W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
有時,對于大型網(wǎng)站,暫停爬行并稍后恢復(fù)爬行是可取的。
Scrapy通過提供以下功能來支持此功能:
要啟用持久性支持,只需定義 作業(yè)目錄 通過 JOBDIR 設(shè)置。此目錄將用于存儲所有必需的數(shù)據(jù),以保持單個作業(yè)(即spider運行)的狀態(tài)。需要注意的是,該目錄不能由不同的spider共享,甚至不能由同一spider的不同作業(yè)/運行共享,因為它是用來存儲 單一的 工作。
要在啟用持久性支持的情況下啟動spider,請按如下方式運行:
scrapy crawl somespider -s JOBDIR=crawls/somespider-1
然后,您可以隨時安全地停止蜘蛛(通過按ctrl-c或發(fā)送信號),然后通過發(fā)出相同的命令恢復(fù)蜘蛛:
scrapy crawl somespider -s JOBDIR=crawls/somespider-1
有時您需要在暫停/恢復(fù)批處理之間保持一些持久的蜘蛛狀態(tài)。你可以使用 spider.state 屬性,它應(yīng)該是dict。當(dāng)spider啟動和停止時,有一個內(nèi)置擴展負責(zé)從作業(yè)目錄序列化、存儲和加載該屬性。
下面是一個使用spider狀態(tài)的回調(diào)示例(為了簡潔起見,省略了其他spider代碼):
def parse_item(self, response):
# parse item here
self.state['items_count'] = self.state.get('items_count', 0) + 1
如果您想使用零碎的持久性支持,需要記住以下幾點:
Cookie可能過期。因此,如果你不盡快恢復(fù)你的蜘蛛,計劃的請求可能不再有效。如果你的蜘蛛不依賴cookies,這就不是問題了。
為了堅持工作, ?Request
? 對象必須可以用序列化 ?pickle
? ,除了 ?callback
? 和 ?errback
? 傳遞給他們的值 ?__init__
? 方法,它必須是運行的方法
?Spider
? 班級。
如果要記錄無法序列化的請求,可以設(shè)置 ?SCHEDULER_DEBUG
? 設(shè)置為 True 在項目的“設(shè)置”頁中。它是 False 默認(rèn)情況下。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: