<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 作業:暫停和恢復爬行 > 譯者:[OSGeo 中國](https://www.osgeo.cn/) 有時,對于大型網站,暫停爬行并稍后恢復爬行是可取的。 Scrapy通過提供以下功能來支持此功能: * 在磁盤上保持預定請求的計劃程序 * 重復的篩選器,用于將訪問的請求保持在磁盤上 * 在批處理之間保持某些 Spider 狀態(鍵/值對)持久的擴展。 ## 作業目錄 要啟用持久性支持,只需定義 _job directory_ 通過 `JOBDIR` 設置。這個目錄將用于存儲保持單個作業(即 Spider 運行)狀態所需的所有數據。需要注意的是,這個目錄不能由不同的 Spider 共享,甚至不能由同一 Spider 的不同作業/運行共享,因為它用于存儲 _single_ 工作。 ## 如何使用它 要在啟用持久性支持的情況下啟動spider,請按如下方式運行: ```py scrapy crawl somespider -s JOBDIR=crawls/somespider-1 ``` 然后,您可以隨時安全地停止 Spider (通過按ctrl-c或發送信號),然后通過發出相同的命令恢復 Spider : ```py scrapy crawl somespider -s JOBDIR=crawls/somespider-1 ``` ## 保持批之間的持久狀態 有時您需要在暫停/恢復批處理之間保持一些持久的 Spider 狀態。你可以使用 `spider.state` 屬性,它應該是dict。當spider啟動和停止時,有一個內置擴展負責從作業目錄序列化、存儲和加載該屬性。 下面是一個使用spider狀態的回調示例(為了簡潔起見,省略了其他spider代碼): ```py def parse_item(self, response): # parse item here self.state['items_count'] = self.state.get('items_count', 0) + 1 ``` ## 持久性問題 如果您想使用零碎的持久性支持,需要記住以下幾點: ### cookies過期 cookies可能會過期。因此,如果您不快速恢復您的 Spider ,那么計劃的請求可能不再有效。如果 Spider 不依賴餅干,這就不是問題了。 ### 請求序列化 請求必須可由 `pickle` 模塊,以便持久性工作,所以您應該確保您的請求是可序列化的。 這里最常見的問題是使用 `lambda` 無法持久化的請求回調函數。 例如,這不起作用: ```py def some_callback(self, response): somearg = 'test' return scrapy.Request('http://www.example.com', callback=lambda r: self.other_callback(r, somearg)) def other_callback(self, response, somearg): print("the argument passed is: %s" % somearg) ``` 但這將: ```py def some_callback(self, response): somearg = 'test' return scrapy.Request('http://www.example.com', callback=self.other_callback, meta={'somearg': somearg}) def other_callback(self, response): somearg = response.meta['somearg'] print("the argument passed is: %s" % somearg) ``` 如果要記錄無法序列化的請求,可以設置 [`SCHEDULER_DEBUG`](settings.html#std:setting-SCHEDULER_DEBUG) 設置為 `True` 在項目的“設置”頁中。它是 `False` 默認情況下。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看