Scrapy_redis的使用

由于Scrapy_redis已經(jīng)為封裝了大部分的流程,所以使用它不會有任何難度。

1.啟動Redis

首先需要把Redis啟動起來。使用Mac OS/Linux的同學(xué)在終端下面輸入以下命令并回車:

redis-server

使用Windows的同學(xué),在CMD中cd進入存放Redis的文件夾,并運行:

redis-server.exe

2.修改爬蟲

在前面的課程中,我們爬蟲是繼承自scrapy.Spider這個父類。這是Scrapy里面最基本的一個爬蟲類,只能實現(xiàn)基本的爬蟲功能。現(xiàn)在需要把它替換掉,從而實現(xiàn)更高級的功能。

請對比一下下面這段使用了Scrapy_redis的代碼與前面read color網(wǎng)站爬蟲的代碼頭部有什么不同:

from scrapy_redis.spiders import RedisSpider

class ReadColorSpider(RedisSpider):name ="readcolorspider"

redis_key ='readcolorspider:start_urls'

可以看出,這里爬蟲的父類已經(jīng)改成了RedisSpider,同時多了一個:

redis_key='readcolorspider:start_urls'

這里的redis_key實際上就是一個變量名,之后爬蟲爬到的所有URL都會保存到Redis中這個名為“readcolorspider:start_urls”的列表下面,爬蟲同時也會從這個列表中讀取后續(xù)頁面的URL。這個變量名可以任意修改。

除了這兩點以外,在爬蟲部分的其他代碼都不需要做修改。

實際上,這樣就已經(jīng)建立了一個分布式爬蟲,只不過現(xiàn)在只有一臺電腦。

3.修改設(shè)置

現(xiàn)在已經(jīng)把三輪車換成了挖掘機,但是Scrapy還在按照指揮三輪車的方式指揮挖掘機,所以挖掘機還不能正常工作。因此修改爬蟲文件還不行,Scrapy還不能認(rèn)識這個新的爬蟲?,F(xiàn)在修改settings.py。

(1)Scheduler

首先是Scheduler的替換,這個東西是Scrapy中的調(diào)度員。在settings.py中添加以下代碼:

# Enables scheduling storing requests queue in redis.

SCHEDULER="scrapy_redis.scheduler.Scheduler"

(2)去重

# Ensure all spiders share same duplicates filter through redis.

DUPEFILTER_CLASS="scrapy_redis.dupefilter.RFPDupeFilter"

設(shè)置好上面兩項以后,爬蟲已經(jīng)可以正常開始工作了。不過還可以多設(shè)置一些東西使爬蟲更好用。

(3)不清理Redis隊列

# Don't cleanup redis queues, allows to pause/resume crawls.

SCHEDULER_PERSIST=True

如果這一項為True,那么在Redis中的URL不會被Scrapy_redis清理掉,這樣的好處是:爬蟲停止了再重新啟動,它會從上次暫停的地方開始繼續(xù)爬取。但是它的弊端也很明顯,如果有多個爬蟲都要從這里讀取URL,需要另外寫一段代碼來防止重復(fù)爬取。

如果設(shè)置成了False,那么Scrapy_redis每一次讀取了URL以后,就會把這個URL給刪除。這樣的好處是:多個服務(wù)器的爬蟲不會拿到同一個URL,也就不會重復(fù)爬取。但弊端是:爬蟲暫停以后再重新啟動,它會重新開始爬。

4.爬蟲請求的調(diào)度算法

爬蟲的請求調(diào)度算法,有三種情況可供選擇:

隊列

SCHEDULER_QUEUE_CLASS='scrapy_redis.queue.SpiderQueue'

如果不配置調(diào)度算法,默認(rèn)就會使用這種方式。它實現(xiàn)了一個先入先出的隊列,先放進Redis的請求會優(yōu)先爬取。

SCHEDULER_QUEUE_CLASS='scrapy_redis.queue.SpiderStack'

這種方式,后放入到Redis的請求會優(yōu)先爬取。

優(yōu)先級隊列

SCHEDULER_QUEUE_CLASS='scrapy_redis.queue.SpiderPriorityQueue'

這種方式,會根據(jù)一個優(yōu)先級算法來計算哪些請求先爬取,哪些請求后爬取。這個優(yōu)先級算法比較復(fù)雜,會綜合考慮請求的深度等各個因素。

【拓展閱讀】

Redis信息,如果不配置的話,Scrapy_redis會默認(rèn)Redis就運行在現(xiàn)在這臺電腦上,IP和端口也都是默認(rèn)的127.0.0.1和6379。如果Redis不在本地的話,就需要將它們寫出來:

REDIS_HOST='127.0.0.1'#修改為Redis的實際IP地址

REDIS_PORT=6379#修改為Redis的實際端口

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容