教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

什么是分布式爬蟲?分布式爬蟲實現(xiàn)方法

更新時間:2020年09月29日11時46分 來源:傳智播客 瀏覽次數(shù):

什么是分布式爬蟲?

分布式爬蟲就是多臺計算機上都安裝爬蟲程序,共享隊列,去重,讓多個爬蟲不爬取其他爬蟲爬取過的內(nèi)容,從而實現(xiàn)實現(xiàn)聯(lián)合采集。

三種分布式爬蟲策略:

(1)Slaver 端從 Master 端拿任務(Request/url/ID)進行數(shù)據(jù)抓取,在抓取數(shù)據(jù)的同時也生成新任務,并將任務分配給 Master端。Master 端只有一個 Redis 數(shù)據(jù)庫,負責對 Slaver 提交的任務進行去重、加入待爬隊列。

·優(yōu)點

scrapy-redis 默認使用的就是這種策略,我們實現(xiàn)起來很簡單,因為任務調(diào)度等工作 scrapy-redis 都已經(jīng)幫我們做好了,我們只需要繼承 RedisSpider、指定 redis_key 即可。

·缺點

scrapy-redis 調(diào)度的任務是 Request 對象,里面信息量比較大(不僅包含 URL, 還有 callback 函數(shù)、headers 等信息),會降低爬蟲速度,而且會占用 Redis 大量的存儲空間。當然,我們可以重寫方法實現(xiàn)調(diào)度 URL或者用戶 ID。

(2)Master 端跑一個程序去生成任務(Request/url/ID)。Master 端負責的是生產(chǎn)任務, 并把任務去重,加入到待爬隊列中。Slaver 端只負責從 Master 端獲取任務進行爬取。

·優(yōu)點

將生成任務和抓取數(shù)據(jù)分開,分工明確,減少了 Master 和 Slaver 端之間的數(shù)據(jù)交流;Master 端生成任務還有一個好處,那就是可以便捷地重寫判重策略(當數(shù)據(jù)量大時優(yōu)化判重的性能和速度還是很重要的)。

·缺點

像 QQ 或者新浪微博這種網(wǎng)站,發(fā)送一個請求,返回的內(nèi)容里面可能包含幾十 個待爬的用戶 ID,即幾十個新爬蟲任務。但有些網(wǎng)站一個請求只能得到一兩個新任務,并 且返回的內(nèi)容里也包含爬蟲要抓取的目標信息,如果將生成任務和抓取任務分開反而會降低爬蟲抓取效率,畢竟帶寬也是爬蟲的一個瓶頸問題。我們要秉著發(fā)送盡量少的請求為原則,同時也是為了減輕網(wǎng)站服務器的壓力,要做一只有道德的Crawler。所以,視情況而定。

(3)Master中只有一個集合,它只有查詢的作用。Slaver 在遇到新任務時詢問 Master 此任務是否已爬,如果未爬則加入 Slaver 自己的待爬隊列中,Master 把此任務記為已爬。它和策略一比較像,但明顯比策略一簡單。策略一的簡單是因為有 Scrapy-redis 實現(xiàn)了

scheduler中間件,它并不適用于非 Scrapy框架的爬蟲。

·優(yōu)點

實現(xiàn)簡單,非 Scrapy框架的爬蟲也適用。Master 端壓力比較小,Master與Slaver 的數(shù)據(jù)交流也不大。

·缺點

“健壯性”不夠,需要另外定時保存待爬隊列以實現(xiàn)“斷點續(xù)爬”功能。各Slaver的待爬任務不通用。

如果把 Slaver 比作工人,把 Master 比作工頭。策略一就是工人遇到新任務都上報給工頭,需要干活的時候就去工頭那里領任務;策略二就是工頭去找新任務,工人只管從工頭那里領任務干活;策略三就是工人遇到新任務時詢問工頭此任務是否有人做了,沒有的話工人就將此任務加到自己的“行程表”。

猜你喜歡:

使用Python語言開發(fā)爬蟲有什么優(yōu)勢?

Python爬蟲入門教程 百度云盤下載 

python爬蟲可以用來做什么?

python高級軟件工程培訓課程

0 分享到:
和我們在線交談!