2016-11-25 69 views

回答

0

您可以使用GNU timeout命令執行此操作。

例如,1小時後停止履帶:

timeout 3600 scrapy crawl spider_name 
0

Scrapy提供CLOSESPIDER_TIMEOUT選項停止指定的時間段之後爬行。

雖然這不是一個硬性限制 - Scrapy仍然會處理它已經下載的所有請求,但它不會從調度程序中獲取新的請求;換句話說,CLOSESPIDER_TIMEOUT模擬Ctrl-C,而不是Ctrl-C + Ctrl-C,並試圖優雅地停止蜘蛛。這通常不是一個壞主意,因爲殺蜘蛛可能會導出的數據文件被破壞。

spider活着多長時間取決於網站和重試&併發設置。默認的DOWNLOAD_TIMEOUT是180s;請求可以重試2次,這意味着每個請求可能需要大約10分鐘才能在最差的情況下完成。 CONCURRENT_REQUESTS默認爲16,因此下載器中最多有16個請求,但可能會根據您抓取的內容並行下載。 Autothrottle或CONCURRENT_REQUESTS_PER_DOMAIN選項可能會限制單個域並行執行的多個請求。

因此,在絕對最壞的情況下(順序下載,所有請求都沒有響應並重試2次),蜘蛛可能會使用默認設置掛起約3小時。但通常在實踐中,這個時間要短得多,幾分鐘。因此,您可以將CLOSESPIDER_TIMEOUT設置爲一個值,例如比你的X小時少20分鐘,然後使用額外的管理員(比如@lufte建議的GNU超時)來實現硬超時,如果關機時間超長,就殺死一個蜘蛛。