溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

scrapy適合用來處理python爬蟲調(diào)度么

發(fā)布時間:2020-11-24 09:55:24 來源:億速云 閱讀:145 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關(guān)scrapy適合用來處理python爬蟲調(diào)度么的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。

需要使用代碼來爬一些數(shù)據(jù)的大概分為兩類人:

非程序員,需要爬一些數(shù)據(jù)來做畢業(yè)設(shè)計、市場調(diào)研等等,他們可能連 Python 都不是很熟;

程序員,需要設(shè)計大規(guī)模、分布式、高穩(wěn)定性的爬蟲系統(tǒng),對他們來說,語言都無所謂的,更別說用不用框架了。

 

對于一個任何一個已經(jīng)入門的程序員來說,Python 都算不上一個很復(fù)雜的語言,除了不用大括號可能讓一些人感覺有些不適應(yīng)之外,基本上看看語法上手就能寫了。但是恰恰是因為我們都是老司機了,所以不能體會到使用一門編程語言對于外行來說可能『比登天還難』。如果不用 scrapy,可能我只需要這樣:

import requests
 
def main():
    for i in range(100):
        rsp = requests.get(f"http://www.example.com/{i}.html")
        with open("example-{i}.txt", "w") as f:
            f.write(rsp.text)
 
if __name__ == "__main__":
    main()

就寫好了一個簡單的爬蟲,而使用 scrapy 呢,大概需要這樣吧:

import scrapy
 
class QuotesSpider(scrapy.Spider):
    name = 'quotes'
    
    def start_requests(self):
        urls = [
            'http://quotes.toscrape.com/page/1/',
            'http://quotes.toscrape.com/page/2/'
        ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)
 
    def parse(self, response):
        page = response.url.split('/')[-2]
        filename = 'quotes-%s.html' % page
        with open(filename, 'wb') as f:
            f.write(response.body)
        self.log('Save file %s' % filename)

先不說代碼增長了一倍有余,初學(xué)者會問到這些問題:什么是 class?為什么類還有參數(shù)?啊,什么是繼承?yield 又是什么鬼,那個 scrapy.Request 又是啥?這些都是負擔(dān)。

 

既然要開發(fā)大型爬蟲系統(tǒng),那么其中很重要的一部分就是爬蟲的調(diào)度了。一種比較簡單的模式是 scheduler 作為 master,全局調(diào)度。另一種模式?jīng)]有 master,所有的爬蟲 worker 都是對等的。在實際生產(chǎn)中顯然是第一種用的更多。

顯然 scheduler 這部分是不能再用一個爬蟲框架來實現(xiàn)的,連主循環(huán)都沒有咋寫邏輯呢?我們可能還要實現(xiàn)增量爬取,或者消費業(yè)務(wù)方發(fā)來的爬取請求等各種業(yè)務(wù),這塊顯然是在 scheduler 里面的,那么這個爬蟲系統(tǒng)無非是 scheduler 分發(fā)任務(wù)給各個 worker 來抓取。worker 還可以使用 scrapy 實現(xiàn),但是呢,這個 worker 其實已經(jīng)弱化為一層薄薄的 downloader 了,那我要他干嘛呢?scrapy 的核心邏輯也不過是個深度或者廣度優(yōu)先的遍歷而已,少一個依賴不好么……

爬蟲的工作量要么在反爬,要么在調(diào)度等業(yè)務(wù)邏輯,本身只是一個 requests.get 而已,scrapy 提供的種種抽象對于初學(xué)者太復(fù)雜,大型系統(tǒng)又用不上,所以個人不推薦使用包括但不限于 scrapy 在內(nèi)的所有爬蟲框架。

感謝各位的閱讀!關(guān)于scrapy適合用來處理python爬蟲調(diào)度么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI