Scrapy如何動態調整爬取速度?
01-31
這樣的,我的Scrapy項目下有四個爬蟲,用來爬崗位數據的,寫論文用。其中,boss直聘有反爬蟲,也就是爬取延遲在5秒以上,就是DOWNLOAD_DELAY需要設置為5。項目結構如下:
為了方便爬取,我寫了一個bat文件,自動執行任務:
你們也看到了,因為boss直聘需要設置5秒以上的延遲,所以我不得不把boss直聘單獨拎出來,重新設置DOWNLOAD_DELAY然後再跑,這樣就很麻煩,請問各位,有沒有辦法能夠動態設置這個數值呢,比如在Spider的init中,更改settings?我試過在代碼中加入settings.set(DOWNLOAD_DELAY,5)方法,但是爬取速度仍然非常快。所以有沒有其他方法能夠解決這個問題呢?
可以單獨給每個spider設置用戶級別的custom_settings,每個spider的設置會覆蓋默認設置,參考官方文檔(從上到下優先順序依次降低,命令行設置優先順序最高,默認最低)
代碼如下:
這樣應該就可以達到你的目的了,但是官方文檔提到了一點:
默認情況下,scrapy不會等待固定時間,是一個隨機的時間,從0.5到1.5 * DOWNLOAD_DELAY不等,這樣感覺可以不會被反爬蟲識別吧。
最近正在翻譯scrapy 1.5的官方文檔,歡迎加入scrapy1.5-chinese_translation
這個問題么。我不太理解,你是說效率問題,還是時間間隔問題(請允許我粗暴的說時間間隔),如果是前者,我推薦你隨機更換ua,加代理,然後提高並發量,大不了再加一個redis做分散式。如果你要說時間的問題的問題,你完全不用管那個裡面的時間設置啊,你在你的爬蟲文件裡面,加上一個sleep就可以,設置好並發情況,加一個sleep,就可以了啊,這樣就應該算是單獨設置了吧。如果還是不放心,不靠譜,乾脆從中間件下手就好了。當然你也可以像樓上說的,單獨設置。
推薦閱讀: