<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 體系結構概述 > 譯者:[OSGeo 中國](https://www.osgeo.cn/) 本文描述了Scrapy的體系結構及其組件如何交互。 ## 概述 下圖顯示了Scrapy架構及其組件的概述,以及系統內部發生的數據流的概要(以紅色箭頭顯示)。下面提供了這些組件的簡要說明以及有關它們的詳細信息的鏈接。數據流也描述如下。 ## 數據流 [![Scrapy architecture](https://img.kancloud.cn/e2/95/e2954a386344f0c1a065b4e0bc384a21_1400x940.png)](../_images/scrapy_architecture_02.png) Scrapy中的數據流由執行引擎控制,如下所示: 1. 這個 [Engine](#component-engine) 獲取要從 [Spider](#component-spiders) . 2. 這個 [Engine](#component-engine) 在中安排請求 [Scheduler](#component-scheduler) 并請求下一個要爬行的請求。 3. 這個 [Scheduler](#component-scheduler) 將下一個請求返回到 [Engine](#component-engine) . 4. 這個 [Engine](#component-engine) 將請求發送到 [Downloader](#component-downloader) ,通過 [Downloader Middlewares](#component-downloader-middleware) (見 [`process_request()`](downloader-middleware.html#scrapy.downloadermiddlewares.DownloaderMiddleware.process_request "scrapy.downloadermiddlewares.DownloaderMiddleware.process_request") ) 5. 一旦頁面完成下載, [Downloader](#component-downloader) 生成響應(使用該頁)并將其發送到引擎,并通過 [Downloader Middlewares](#component-downloader-middleware) (見 [`process_response()`](downloader-middleware.html#scrapy.downloadermiddlewares.DownloaderMiddleware.process_response "scrapy.downloadermiddlewares.DownloaderMiddleware.process_response") ) 6. 這個 [Engine](#component-engine) 接收來自的響應 [Downloader](#component-downloader) 并發送到 [Spider](#component-spiders) 用于處理,通過 [Spider Middleware](#component-spider-middleware) (見 [`process_spider_input()`](spider-middleware.html#scrapy.spidermiddlewares.SpiderMiddleware.process_spider_input "scrapy.spidermiddlewares.SpiderMiddleware.process_spider_input") ) 7. 這個 [Spider](#component-spiders) 處理響應并向 [Engine](#component-engine) ,通過 [Spider Middleware](#component-spider-middleware) (見 [`process_spider_output()`](spider-middleware.html#scrapy.spidermiddlewares.SpiderMiddleware.process_spider_output "scrapy.spidermiddlewares.SpiderMiddleware.process_spider_output") ) 8. 這個 [Engine](#component-engine) 將已處理的項目發送到 [Item Pipelines](#component-pipelines) ,然后將已處理的請求發送到 [Scheduler](#component-scheduler) 并請求可能的下一個爬行請求。 9. 該過程重復(從步驟1開始),直到不再有來自 [Scheduler](#component-scheduler) . ## 組件 ### 抓取式發動機 引擎負責控制系統所有組件之間的數據流,并在發生某些操作時觸發事件。見 [Data Flow](#data-flow) 有關詳細信息,請參閱上面的部分。 ### 調度程序 調度器接收來自引擎的請求,并將它們排隊,以便在引擎請求時(也向引擎)提供這些請求。 ### 下載器 下載者負責獲取網頁并將其送入引擎,引擎反過來又將網頁送入 Spider 。 ### Spider spider是由scraphy用戶編寫的自定義類,用于解析響應并從中提取項目(也稱為scraped項)或后續的附加請求。有關詳細信息,請參閱 [Spider](spiders.html#topics-spiders) . ### 項目管道 項目管道負責處理被 Spider 提取(或 Scrape)的項目。典型的任務包括清理、驗證和持久性(如將項目存儲在數據庫中)。有關詳細信息,請參閱 [項目管道](item-pipeline.html#topics-item-pipeline) . ### 下載器中心件 下載器中間件是位于引擎和下載器之間的特定Hook,當它們從引擎傳遞到下載器時處理請求,以及從下載器傳遞到引擎的響應。 如果需要執行以下操作之一,請使用下載器中間件: * 在將請求發送給下載者之前處理該請求(即在Scrapy將請求發送到網站之前); * 變更在傳遞給spider之前收到響應; * 發送新的請求,而不是將收到的響應傳遞給spider; * 在不獲取網頁的情況下將響應傳遞給 Spider ; * 悄悄地放棄一些請求。 有關詳細信息,請參閱 [下載器中間件](downloader-middleware.html#topics-downloader-middleware) . ### Spider 中心件 Spider 中間件是位于引擎和 Spider 之間的特定Hook,能夠處理 Spider 的輸入(響應)和輸出(項目和請求)。 如果需要,使用 Spider 中間件 * post-process output of spider callbacks - change/add/remove requests or items; * 后處理啟動請求; * 處理spider異常; * 對一些基于響應內容的請求調用errback,而不是回調。 有關詳細信息,請參閱 [Spider 中間件](spider-middleware.html#topics-spider-middleware) . ## 事件驅動的網絡 Scrapy是用 [Twisted](https://twistedmatrix.com/trac/) 是一個流行的事件驅動的python網絡框架。因此,它使用非阻塞(即異步)代碼實現并發性。 有關異步編程和扭曲的更多信息,請參閱以下鏈接: * [Introduction to Deferreds in Twisted](https://twistedmatrix.com/documents/current/core/howto/defer-intro.html) * [Twisted - hello, asynchronous programming](http://jessenoller.com/blog/2009/02/11/twisted-hello-asynchronous-programming/) * [Twisted Introduction - Krondo](http://krondo.com/an-introduction-to-asynchronous-programming-and-twisted/)
                  <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>

                              哎呀哎呀视频在线观看