<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請求/響應處理的Hook框架。這是一個輕,低層次的系統,全球范圍內改變斯拉皮的請求和響應。 ## 激活下載器中間件 要激活下載器中間件組件,請將其添加到 [`DOWNLOADER_MIDDLEWARES`](settings.html#std:setting-DOWNLOADER_MIDDLEWARES) 設置,這是一個dict,其鍵是中間件類路徑,其值是中間件順序。 舉個例子: ```py DOWNLOADER_MIDDLEWARES = { 'myproject.middlewares.CustomDownloaderMiddleware': 543, } ``` 這個 [`DOWNLOADER_MIDDLEWARES`](settings.html#std:setting-DOWNLOADER_MIDDLEWARES) 設置與合并 [`DOWNLOADER_MIDDLEWARES_BASE`](settings.html#std:setting-DOWNLOADER_MIDDLEWARES_BASE) 在scrappy中定義的設置(不打算被覆蓋),然后按順序排序,以獲得已啟用中間件的最終排序列表:第一個中間件更接近引擎,最后一個更接近下載程序。也就是說, [`process_request()`](#scrapy.downloadermiddlewares.DownloaderMiddleware.process_request "scrapy.downloadermiddlewares.DownloaderMiddleware.process_request") 每個中間件的方法將以增加的中間件順序(100、200、300…)調用,并且 [`process_response()`](#scrapy.downloadermiddlewares.DownloaderMiddleware.process_response "scrapy.downloadermiddlewares.DownloaderMiddleware.process_response") 每個中間件的方法將按降序調用。 要決定分配給中間件的順序,請參見 [`DOWNLOADER_MIDDLEWARES_BASE`](settings.html#std:setting-DOWNLOADER_MIDDLEWARES_BASE) 根據要插入中間件的位置設置和選擇一個值。順序很重要,因為每個中間件執行不同的操作,并且您的中間件可能依賴于之前(或之后)應用的一些中間件。 如果要禁用內置中間件(定義于 [`DOWNLOADER_MIDDLEWARES_BASE`](settings.html#std:setting-DOWNLOADER_MIDDLEWARES_BASE) 并在默認情況下啟用)您必須在項目的 [`DOWNLOADER_MIDDLEWARES`](settings.html#std:setting-DOWNLOADER_MIDDLEWARES) 設置和分配 `None` 作為其價值。例如,如果要禁用用戶代理中間件: ```py DOWNLOADER_MIDDLEWARES = { 'myproject.middlewares.CustomDownloaderMiddleware': 543, 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None, } ``` 最后,請記住,某些中間商可能需要通過特定設置啟用。有關更多信息,請參閱每個中間件文檔。 ## 編寫自己的下載中間件 每個下載器中間件都是一個python類,它定義了下面定義的一個或多個方法。 主要入口點是 `from_crawler` 類方法,它接收 [`Crawler`](api.html#scrapy.crawler.Crawler "scrapy.crawler.Crawler") 實例。這個 [`Crawler`](api.html#scrapy.crawler.Crawler "scrapy.crawler.Crawler") 例如,對象允許您訪問 [settings](settings.html#topics-settings) . ```py class scrapy.downloadermiddlewares.DownloaderMiddleware ``` 注解 任何下載器中間件方法也可能返回延遲。 ```py process_request(request, spider) ``` 對于通過下載中間件的每個請求調用此方法。 [`process_request()`](#scrapy.downloadermiddlewares.DownloaderMiddleware.process_request "scrapy.downloadermiddlewares.DownloaderMiddleware.process_request") 應該是:返回 `None` 返回A [`Response`](request-response.html#scrapy.http.Response "scrapy.http.Response") 對象,返回 [`Request`](request-response.html#scrapy.http.Request "scrapy.http.Request") 對象,或提升 [`IgnoreRequest`](exceptions.html#scrapy.exceptions.IgnoreRequest "scrapy.exceptions.IgnoreRequest") . 如果它回來 `None` ,scrapy將繼續處理此請求,執行所有其他中間軟件,直到最后調用適當的下載器處理程序執行請求(及其下載的響應)。 如果它返回 [`Response`](request-response.html#scrapy.http.Response "scrapy.http.Response") 對象,Scrapy不用調用了 _any_ 其他 [`process_request()`](#scrapy.downloadermiddlewares.DownloaderMiddleware.process_request "scrapy.downloadermiddlewares.DownloaderMiddleware.process_request") 或 [`process_exception()`](#scrapy.downloadermiddlewares.DownloaderMiddleware.process_exception "scrapy.downloadermiddlewares.DownloaderMiddleware.process_exception") 方法或適當的下載函數;它將返回該響應。這個 [`process_response()`](#scrapy.downloadermiddlewares.DownloaderMiddleware.process_response "scrapy.downloadermiddlewares.DownloaderMiddleware.process_response") 每次響應都會調用已安裝中間件的方法。 如果它返回 [`Request`](request-response.html#scrapy.http.Request "scrapy.http.Request") 對象,Scrapy將停止調用進程請求方法并重新安排返回的請求。一旦執行新返回的請求,將對下載的響應調用適當的中間件鏈。 如果它引發了 [`IgnoreRequest`](exceptions.html#scrapy.exceptions.IgnoreRequest "scrapy.exceptions.IgnoreRequest") 例外情況 [`process_exception()`](#scrapy.downloadermiddlewares.DownloaderMiddleware.process_exception "scrapy.downloadermiddlewares.DownloaderMiddleware.process_exception") 將調用已安裝的下載器中間件的方法。如果它們都不處理異常,則請求的errback函數( `Request.errback` )。如果沒有代碼處理引發的異常,則忽略該異常,不記錄該異常(與其他異常不同)。 | 參數: | * **request** ([`Request`](request-response.html#scrapy.http.Request "scrapy.http.Request") object) -- 正在處理的請求 * **spider** ([`Spider`](spiders.html#scrapy.spiders.Spider "scrapy.spiders.Spider") object) -- 此請求所針對的 Spider | | --- | --- | ```py process_response(request, response, spider) ``` [`process_response()`](#scrapy.downloadermiddlewares.DownloaderMiddleware.process_response "scrapy.downloadermiddlewares.DownloaderMiddleware.process_response") 應該是:返回 [`Response`](request-response.html#scrapy.http.Response "scrapy.http.Response") 對象,返回 [`Request`](request-response.html#scrapy.http.Request "scrapy.http.Request") 反對或提高 [`IgnoreRequest`](exceptions.html#scrapy.exceptions.IgnoreRequest "scrapy.exceptions.IgnoreRequest") 例外。 如果它返回 [`Response`](request-response.html#scrapy.http.Response "scrapy.http.Response") (可能是相同的給定響應,也可能是全新的響應),該響應將繼續使用 [`process_response()`](#scrapy.downloadermiddlewares.DownloaderMiddleware.process_response "scrapy.downloadermiddlewares.DownloaderMiddleware.process_response") 鏈中的下一個中間件。 如果它返回 [`Request`](request-response.html#scrapy.http.Request "scrapy.http.Request") 對象,中間件鏈將停止,返回的請求將被重新安排以便將來下載。這與從返回請求時的行為相同 [`process_request()`](#scrapy.downloadermiddlewares.DownloaderMiddleware.process_request "scrapy.downloadermiddlewares.DownloaderMiddleware.process_request") . 如果它引發了 [`IgnoreRequest`](exceptions.html#scrapy.exceptions.IgnoreRequest "scrapy.exceptions.IgnoreRequest") 異常,請求的errback函數( `Request.errback` )。如果沒有代碼處理引發的異常,則忽略該異常,不記錄該異常(與其他異常不同)。 | 參數: | * **request** (is a [`Request`](request-response.html#scrapy.http.Request "scrapy.http.Request") object) -- 發起響應的請求 * **response** ([`Response`](request-response.html#scrapy.http.Response "scrapy.http.Response") object) -- 正在處理的響應 * **spider** ([`Spider`](spiders.html#scrapy.spiders.Spider "scrapy.spiders.Spider") object) -- 此響應所針對的 Spider | | --- | --- | ```py process_exception(request, exception, spider) ``` Scrapy電話 [`process_exception()`](#scrapy.downloadermiddlewares.DownloaderMiddleware.process_exception "scrapy.downloadermiddlewares.DownloaderMiddleware.process_exception") 當下載處理程序或 [`process_request()`](#scrapy.downloadermiddlewares.DownloaderMiddleware.process_request "scrapy.downloadermiddlewares.DownloaderMiddleware.process_request") (從下載器中間件)引發異常(包括 [`IgnoreRequest`](exceptions.html#scrapy.exceptions.IgnoreRequest "scrapy.exceptions.IgnoreRequest") 例外) [`process_exception()`](#scrapy.downloadermiddlewares.DownloaderMiddleware.process_exception "scrapy.downloadermiddlewares.DownloaderMiddleware.process_exception") 應該返回:或者 `None` ,A [`Response`](request-response.html#scrapy.http.Response "scrapy.http.Response") 對象,或 [`Request`](request-response.html#scrapy.http.Request "scrapy.http.Request") 對象。 如果它回來 `None` ,Scrapy將繼續處理此異常,執行任何其他 [`process_exception()`](#scrapy.downloadermiddlewares.DownloaderMiddleware.process_exception "scrapy.downloadermiddlewares.DownloaderMiddleware.process_exception") 安裝的中間件的方法,直到沒有中間件,默認的異常處理開始。 如果它返回 [`Response`](request-response.html#scrapy.http.Response "scrapy.http.Response") 對象 [`process_response()`](#scrapy.downloadermiddlewares.DownloaderMiddleware.process_response "scrapy.downloadermiddlewares.DownloaderMiddleware.process_response") 已安裝中間件的方法鏈已啟動,Scrapy不需要調用任何其他方法。 [`process_exception()`](#scrapy.downloadermiddlewares.DownloaderMiddleware.process_exception "scrapy.downloadermiddlewares.DownloaderMiddleware.process_exception") 中間件的方法。 如果它返回 [`Request`](request-response.html#scrapy.http.Request "scrapy.http.Request") 對象,將重新安排返回的請求以便將來下載。這將停止執行 [`process_exception()`](#scrapy.downloadermiddlewares.DownloaderMiddleware.process_exception "scrapy.downloadermiddlewares.DownloaderMiddleware.process_exception") 中間件的方法與返回響應相同。 | 參數: | * **request** (is a [`Request`](request-response.html#scrapy.http.Request "scrapy.http.Request") object) -- 生成異常的請求 * **exception** (an `Exception` object) -- 引發的異常 * **spider** ([`Spider`](spiders.html#scrapy.spiders.Spider "scrapy.spiders.Spider") object) -- 此請求所針對的 Spider | | --- | --- | ```py from_crawler(cls, crawler) ``` 如果存在,則調用該類方法從 [`Crawler`](api.html#scrapy.crawler.Crawler "scrapy.crawler.Crawler") . 它必須返回中間件的新實例。爬蟲對象提供對所有零碎核心組件(如設置和信號)的訪問;它是中間件訪問它們并將其功能連接到零碎的一種方式。 | 參數: | **crawler** ([`Crawler`](api.html#scrapy.crawler.Crawler "scrapy.crawler.Crawler") object) -- 使用此中間件的爬蟲程序 | | --- | --- | ## 內置下載器中間件參考 本頁介紹了所有隨Scrapy一起提供的下載器中間件組件。有關如何使用它們以及如何編寫自己的下載器中間件的信息,請參見 [downloader middleware usage guide](#topics-downloader-middleware) . 有關默認啟用的組件列表(及其順序),請參見 [`DOWNLOADER_MIDDLEWARES_BASE`](settings.html#std:setting-DOWNLOADER_MIDDLEWARES_BASE) 設置。 ### CookiesMiddleware ```py class scrapy.downloadermiddlewares.cookies.CookiesMiddleware ``` 此中間件允許使用需要cookie的站點,例如那些使用會話的站點。它跟蹤Web服務器發送的cookie,并像Web瀏覽器一樣,在隨后的請求(來自該 Spider )上發送它們。 以下設置可用于配置cookie中間件: * [`COOKIES_ENABLED`](#std:setting-COOKIES_ENABLED) * [`COOKIES_DEBUG`](#std:setting-COOKIES_DEBUG) #### 每個 Spider 有多個cookie會話 0.15 新版功能. 通過使用 [`cookiejar`](#std:reqmeta-cookiejar) 請求元鍵。默認情況下,它使用一個cookie jar(會話),但您可以通過一個標識符來使用不同的標識符。 例如:: ```py for i, url in enumerate(urls): yield scrapy.Request(url, meta={'cookiejar': i}, callback=self.parse_page) ``` 記住 [`cookiejar`](#std:reqmeta-cookiejar) meta-key不是“粘性的”。您需要在隨后的請求中繼續傳遞它。例如:: ```py def parse_page(self, response): # do some processing return scrapy.Request("http://www.example.com/otherpage", meta={'cookiejar': response.meta['cookiejar']}, callback=self.parse_other_page) ``` #### COOKIES_ENABLED 違約: `True` 是否啟用cookie中間件。如果禁用,則不會向Web服務器發送cookie。 注意,盡管 [`COOKIES_ENABLED`](#std:setting-COOKIES_ENABLED) 設置中頻 `Request.` [`meta['dont_merge_cookies']`](request-response.html#std:reqmeta-dont_merge_cookies) 評估為 `True` 請求cookies將 **not** 發送到Web服務器并在中接收cookie [`Response`](request-response.html#scrapy.http.Response "scrapy.http.Response") 將 **not** 與現有cookie合并。 有關詳細信息,請參閱 `cookies` 參數在 [`Request`](request-response.html#scrapy.http.Request "scrapy.http.Request") . #### COOKIES_DEBUG 違約: `False` 如果啟用,Scrapy將記錄請求中發送的所有cookie(即 `Cookie` 標題)和響應中收到的所有cookie(即 `Set-Cookie` 標題)。 下面是一個使用 [`COOKIES_DEBUG`](#std:setting-COOKIES_DEBUG) 啟用:: ```py 2011-04-06 14:35:10-0300 [scrapy.core.engine] INFO: Spider opened 2011-04-06 14:35:10-0300 [scrapy.downloadermiddlewares.cookies] DEBUG: Sending cookies to: <GET http://www.diningcity.com/netherlands/index.html> Cookie: clientlanguage_nl=en_EN 2011-04-06 14:35:14-0300 [scrapy.downloadermiddlewares.cookies] DEBUG: Received cookies from: <200 http://www.diningcity.com/netherlands/index.html> Set-Cookie: JSESSIONID=B~FA4DC0C496C8762AE4F1A620EAB34F38; Path=/ Set-Cookie: ip_isocode=US Set-Cookie: clientlanguage_nl=en_EN; Expires=Thu, 07-Apr-2011 21:21:34 GMT; Path=/ 2011-04-06 14:49:50-0300 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://www.diningcity.com/netherlands/index.html> (referer: None) [...] ``` ### DefaultHeadersMiddleware ```py class scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware ``` 此中間件設置在 [`DEFAULT_REQUEST_HEADERS`](settings.html#std:setting-DEFAULT_REQUEST_HEADERS) 設置。 ### DownloadTimeoutMiddleware ```py class scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware ``` 此中間件為中指定的請求設置下載超時 [`DOWNLOAD_TIMEOUT`](settings.html#std:setting-DOWNLOAD_TIMEOUT) 設置或 `download_timeout` Spider 屬性。 注解 您還可以使用設置每個請求的下載超時 [`download_timeout`](request-response.html#std:reqmeta-download_timeout) request.meta key;即使禁用downloadTimeoutMiddleware,也支持此功能。 ### HttpAuthMiddleware ```py class scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware ``` 此中間件使用 [Basic access authentication](https://en.wikipedia.org/wiki/Basic_access_authentication) (又名。HTTP AUTH)。 要從某些spider啟用HTTP身份驗證,請設置 `http_user` 和 `http_pass` 這些 Spider 的屬性。 例子:: ```py from scrapy.spiders import CrawlSpider class SomeIntranetSiteSpider(CrawlSpider): http_user = 'someuser' http_pass = 'somepass' name = 'intranet.example.com' # .. rest of the spider code omitted ... ``` ### HttpCacheMiddleware ```py class scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware ``` 此中間件為所有HTTP請求和響應提供低級緩存。它必須與緩存存儲后端以及緩存策略相結合。 帶有三個HTTP緩存存儲后端的廢料船: > * [文件系統存儲后端(默認)](#httpcache-storage-fs) > * [DBM存儲后端](#httpcache-storage-dbm) > * [LEVELDB存儲后端](#httpcache-storage-leveldb) 您可以使用 [`HTTPCACHE_STORAGE`](#std:setting-HTTPCACHE_STORAGE) 設置。或者您也可以實現自己的存儲后端。 Scrapy附帶兩個HTTP緩存策略: > * [RCF2616政策](#httpcache-policy-rfc2616) > * [虛擬策略(默認)](#httpcache-policy-dummy) 可以使用更改HTTP緩存策略 [`HTTPCACHE_POLICY`](#std:setting-HTTPCACHE_POLICY) 設置。或者您也可以實現自己的策略。 您還可以避免在使用 [`dont_cache`](#std:reqmeta-dont_cache) 元密鑰相等 `True` . #### 虛擬策略(默認) 此策略不知道任何HTTP緩存控制指令。每個請求及其相應的響應都被緩存。當再次看到相同的請求時,將返回響應,而不從Internet傳輸任何內容。 虛擬策略對于更快地測試spider(而不必每次都等待下載)以及在無法連接到Internet時嘗試離線使用spider非常有用。目標是能夠“重播” Spider 的奔跑 和以前一樣. 要使用此策略,請設置: * [`HTTPCACHE_POLICY`](#std:setting-HTTPCACHE_POLICY) to `scrapy.extensions.httpcache.DummyPolicy` #### RCF2616政策 此策略提供了一個符合RFC2616的HTTP緩存,即具有HTTP緩存控制意識,旨在生產,并在連續運行中使用,以避免下載未修改的數據(以節省帶寬和加快爬行速度)。 實施內容: * 不要試圖用存儲響應/請求 `no-store` 緩存控制指令集 * 如果 `no-cache` 甚至為新響應設置了緩存控制指令 * 計算新鮮度壽命 `max-age` 緩存控制指令 * 計算新鮮度壽命 `Expires` 響應報頭 * 計算新鮮度壽命 `Last-Modified` 響應頭(firefox使用的啟發式方法) * 計算當前年齡 `Age` 響應報頭 * 計算當前年齡 `Date` 頁眉 * 基于以下內容重新驗證過時響應 `Last-Modified` 響應報頭 * 基于以下內容重新驗證過時響應 `ETag` 響應報頭 * 集合 `Date` 接收到的任何響應的頭丟失了它 * 支持 `max-stale` 請求中的緩存控制指令 這允許spider使用完整的rfc2616緩存策略進行配置,但避免按請求進行重新驗證,同時保持與HTTP規范一致。 例子: 添加 `Cache-Control: max-stale=600` 請求頭接受超過其過期時間不超過600秒的響應。 另見:RFC2616,14.9.3 缺少的內容: * `Pragma: no-cache` 支持https://www.w3.org/protocols/rfc2616/rfc2616-sec14.html sec14.9.1 * `Vary` 頭支持https://www.w3.org/protocols/rfc2616/rfc2616-sec13.html sec13.6 * Invalidation after updates or deletes [https://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.10](https://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.10) * …可能還有其他…… 要使用此策略,請設置: * [`HTTPCACHE_POLICY`](#std:setting-HTTPCACHE_POLICY) to `scrapy.extensions.httpcache.RFC2616Policy` #### 文件系統存儲后端(默認) 文件系統存儲后端可用于HTTP緩存中間件。 要使用此存儲后端,請設置: * [`HTTPCACHE_STORAGE`](#std:setting-HTTPCACHE_STORAGE) to `scrapy.extensions.httpcache.FilesystemCacheStorage` 每個請求/響應對存儲在包含以下文件的不同目錄中: > * `request_body` -普通請求主體 > * `request_headers` -請求頭(原始HTTP格式) > * `response_body` -普通反應體 > * `response_headers` -請求頭(原始HTTP格式) > * `meta` -python中這個緩存資源的一些元數據 `repr()` 格式(grep友好格式) > * `pickled_meta` -中的相同元數據 `meta` 但是為了更有效的反序列化而進行的pickled 目錄名是根據請求指紋生成的(請參見 `scrapy.utils.request.fingerprint` 一級子目錄用于避免在同一目錄中創建過多的文件(在許多文件系統中效率低下)。示例目錄可以是: ```py /path/to/cache/dir/example.com/72/72811f648e718090f041317756c03adb0ada46c7 ``` #### DBM存儲后端 0.13 新版功能. DBM_uu存儲后端也可用于HTTP緩存中間件。 默認情況下,它使用anydbm_u模塊,但您可以使用 [`HTTPCACHE_DBM_MODULE`](#std:setting-HTTPCACHE_DBM_MODULE) 設置。 要使用此存儲后端,請設置: * [`HTTPCACHE_STORAGE`](#std:setting-HTTPCACHE_STORAGE) to `scrapy.extensions.httpcache.DbmCacheStorage` #### LEVELDB存儲后端 0.23 新版功能. 還為HTTP緩存中間件提供了一個級別數據庫存儲后端。 不建議將此后端用于開發,因為只有一個進程可以同時訪問LEVELDB數據庫,因此不能對同一個spider運行爬網并并行打開scrapy shell。 要使用此存儲后端: * 設置 [`HTTPCACHE_STORAGE`](#std:setting-HTTPCACHE_STORAGE) 到 `scrapy.extensions.httpcache.LeveldbCacheStorage` * 安裝 [LevelDB python bindings](https://pypi.python.org/pypi/leveldb) 喜歡 `pip install leveldb` #### httpcache中間件設置 這個 [`HttpCacheMiddleware`](#scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware "scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware") 可通過以下設置進行配置: ##### HTTPCACHE_ENABLED 0.11 新版功能. 違約: `False` 是否啟用HTTP緩存。 在 0.11 版更改: 0.11之前, [`HTTPCACHE_DIR`](#std:setting-HTTPCACHE_DIR) 用于啟用緩存。 ##### HTTPCACHE_EXPIRATION_SECS 違約: `0` 緩存請求的過期時間(秒)。 超過此時間的緩存請求將被重新下載。如果為零,則緩存請求將永不過期。 在 0.11 版更改: 在0.11之前,零意味著緩存請求總是過期。 ##### HTTPCACHE_DIR 違約: `'httpcache'` 用于存儲(低級)HTTP緩存的目錄。如果為空,則將禁用HTTP緩存。如果給定了相對路徑,則相對于項目數據目錄。有關詳細信息,請參閱: [Scrapy 項目的默認結構](commands.html#topics-project-structure) . ##### HTTPCACHE_IGNORE_HTTP_CODES 0.10 新版功能. 違約: `[]` 不要用這些HTTP代碼緩存響應。 ##### HTTPCACHE_IGNORE_MISSING 違約: `False` 如果啟用,在緩存中找不到的請求將被忽略,而不是下載。 ##### HTTPCACHE_IGNORE_SCHEMES 0.10 新版功能. 違約: `['file']` 不要用這些URI方案緩存響應。 ##### HTTPCACHE_STORAGE 違約: `'scrapy.extensions.httpcache.FilesystemCacheStorage'` 實現緩存存儲后端的類。 ##### HTTPCACHE_DBM_MODULE 0.13 新版功能. 違約: `'anydbm'` 要在中使用的數據庫模塊 [DBM storage backend](#httpcache-storage-dbm) . 此設置特定于DBM后端。 ##### HTTPCACHE_POLICY 0.18 新版功能. 違約: `'scrapy.extensions.httpcache.DummyPolicy'` 實現緩存策略的類。 ##### HTTPCACHE_GZIP 1.0 新版功能. 違約: `False` 如果啟用,將使用gzip壓縮所有緩存數據。此設置特定于文件系統后端。 ##### HTTPCACHE_ALWAYS_STORE 1.1 新版功能. 違約: `False` 如果啟用,將無條件緩存頁。 Spider 可能希望緩存中有所有可用的響應,以便將來與一起使用 `Cache-Control: max-stale` 例如。dummypolicy緩存所有響應,但從不重新驗證它們,有時需要更細微的策略。 此設置仍然尊重 `Cache-Control: no-store` 回應中的指示。如果你不想要,過濾 `no-store` 在您向緩存中間件提供的響應中超出了緩存控制頭。 ##### HTTPCACHE_IGNORE_RESPONSE_CACHE_CONTROLS 1.1 新版功能. 違約: `[]` 要忽略的響應中的緩存控制指令列表。 站點通常設置“無存儲”、“無緩存”、“必須重新驗證”等,但是如果 Spider 遵守這些指令,它會對 Spider 產生的流量感到不安。這允許有選擇地忽略緩存控制指令,這些指令對于正在被爬網的站點來說是不重要的。 我們假設 Spider 不會在請求中發出緩存控制指令,除非它確實需要它們,所以請求中的指令不會被過濾。 ### HttpCompressionMiddleware ```py class scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware ``` 此中間件允許從網站發送/接收壓縮(gzip、deflate)流量。 此中間件還支持解碼 [brotli-compressed](https://www.ietf.org/rfc/rfc7932.txt) 回答,提供 [brotlipy](https://pypi.python.org/pypi/brotlipy) 已安裝。 #### httpcompression中間件設置 ##### COMPRESSION_ENABLED 違約: `True` 是否啟用壓縮中間件。 ### HttpProxyMiddleware 0.8 新版功能. ```py class scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware ``` 此中間件通過設置 `proxy` 元價值 [`Request`](request-response.html#scrapy.http.Request "scrapy.http.Request") 物體。 像Python標準庫模塊一樣 [urllib](https://docs.python.org/2/library/urllib.html) 和 [urllib2](https://docs.python.org/2/library/urllib2.html) ,它遵循以下環境變量: * `http_proxy` * `https_proxy` * `no_proxy` 您也可以設置meta鍵 `proxy` 每個請求的值 `http://some_proxy_server:port` 或 `http://username:password@some_proxy_server:port` . 請記住,此值將優先于 `http_proxy` / `https_proxy` 環境變量,它也將忽略 `no_proxy` 環境變量。 ### RedirectMiddleware ```py class scrapy.downloadermiddlewares.redirect.RedirectMiddleware ``` 此中間件根據響應狀態處理請求的重定向。 請求通過的URL(在重定向時)可以在 `redirect_urls` [`Request.meta`](request-response.html#scrapy.http.Request.meta "scrapy.http.Request.meta") 關鍵。 每個重定向背后的原因 [`redirect_urls`](#std:reqmeta-redirect_urls) 可以在 `redirect_reasons` [`Request.meta`](request-response.html#scrapy.http.Request.meta "scrapy.http.Request.meta") 關鍵。例如: `[301, 302, 307, 'meta refresh']` . 原因的格式取決于處理相應重定向的中間件。例如, [`RedirectMiddleware`](#scrapy.downloadermiddlewares.redirect.RedirectMiddleware "scrapy.downloadermiddlewares.redirect.RedirectMiddleware") 以整數表示觸發響應狀態代碼,而 [`MetaRefreshMiddleware`](#scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware "scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware") 總是使用 `'meta refresh'` 字符串作為原因。 這個 [`RedirectMiddleware`](#scrapy.downloadermiddlewares.redirect.RedirectMiddleware "scrapy.downloadermiddlewares.redirect.RedirectMiddleware") 可以通過以下設置進行配置(有關詳細信息,請參閱設置文檔): * [`REDIRECT_ENABLED`](#std:setting-REDIRECT_ENABLED) * [`REDIRECT_MAX_TIMES`](settings.html#std:setting-REDIRECT_MAX_TIMES) 如果 [`Request.meta`](request-response.html#scrapy.http.Request.meta "scrapy.http.Request.meta") 有 `dont_redirect` key設置為true,該中間件將忽略該請求。 如果要處理 Spider 中的某些重定向狀態代碼,可以在 `handle_httpstatus_list` Spider 屬性。 例如,如果您希望重定向中間件忽略301和302響應(并將它們傳遞給您的spider),可以這樣做: ```py class MySpider(CrawlSpider): handle_httpstatus_list = [301, 302] ``` 這個 `handle_httpstatus_list` 關鍵 [`Request.meta`](request-response.html#scrapy.http.Request.meta "scrapy.http.Request.meta") 還可以用于指定每個請求允許哪些響應代碼。您也可以設置meta鍵 `handle_httpstatus_all` 到 `True` 如果您想允許請求的任何響應代碼。 #### 重定向中間件設置 ##### REDIRECT_ENABLED 0.13 新版功能. 違約: `True` 是否啟用重定向中間件。 ##### REDIRECT_MAX_TIMES 違約: `20` 單個請求將遵循的最大重定向數。 ### MetaRefreshMiddleware ```py class scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware ``` 此中間件處理基于meta-refresh html標記的請求重定向。 這個 [`MetaRefreshMiddleware`](#scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware "scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware") 可以通過以下設置進行配置(有關詳細信息,請參閱設置文檔): * [`METAREFRESH_ENABLED`](#std:setting-METAREFRESH_ENABLED) * [`METAREFRESH_MAXDELAY`](#std:setting-METAREFRESH_MAXDELAY) 這個中間件服從 [`REDIRECT_MAX_TIMES`](settings.html#std:setting-REDIRECT_MAX_TIMES) 設置, [`dont_redirect`](#std:reqmeta-dont_redirect) , [`redirect_urls`](#std:reqmeta-redirect_urls) 和 [`redirect_reasons`](#std:reqmeta-redirect_reasons) 按說明請求元鍵 [`RedirectMiddleware`](#scrapy.downloadermiddlewares.redirect.RedirectMiddleware "scrapy.downloadermiddlewares.redirect.RedirectMiddleware") #### 元刷新中間件設置 ##### METAREFRESH_ENABLED 0.17 新版功能. 違約: `True` 是否啟用元刷新中間件。 ##### METAREFRESH_MAXDELAY 違約: `100` 重定向后的最大元刷新延遲(秒)。有些站點使用meta-refresh重定向到會話過期的頁面,因此我們將自動重定向限制為最大延遲。 ### RetryMiddleware ```py class scrapy.downloadermiddlewares.retry.RetryMiddleware ``` 一種中間件,用于重試可能由臨時問題(如連接超時或HTTP 500錯誤)引起的失敗請求。 一旦爬行器完成對所有常規(非失敗)頁面的爬行,將在抓取過程中收集失敗的頁面,并在最后重新安排。 這個 [`RetryMiddleware`](#scrapy.downloadermiddlewares.retry.RetryMiddleware "scrapy.downloadermiddlewares.retry.RetryMiddleware") 可以通過以下設置進行配置(有關詳細信息,請參閱設置文檔): * [`RETRY_ENABLED`](#std:setting-RETRY_ENABLED) * [`RETRY_TIMES`](#std:setting-RETRY_TIMES) * [`RETRY_HTTP_CODES`](#std:setting-RETRY_HTTP_CODES) 如果 [`Request.meta`](request-response.html#scrapy.http.Request.meta "scrapy.http.Request.meta") 有 `dont_retry` key設置為true,該中間件將忽略該請求。 #### 重試IDdleware設置 ##### RETRY_ENABLED 0.13 新版功能. 違約: `True` 是否啟用重試中間件。 ##### RETRY_TIMES 違約: `2` 除第一次下載外,還要重試的最大次數。 也可以使用指定每個請求的最大重試次數 [`max_retry_times`](request-response.html#std:reqmeta-max_retry_times) 屬性 [`Request.meta`](request-response.html#scrapy.http.Request.meta "scrapy.http.Request.meta") . 初始化時, [`max_retry_times`](request-response.html#std:reqmeta-max_retry_times) 元鍵優先于 [`RETRY_TIMES`](#std:setting-RETRY_TIMES) 設置。 ##### RETRY_HTTP_CODES 違約: `[500, 502, 503, 504, 522, 524, 408]` 要重試的HTTP響應代碼。總是重試其他錯誤(DNS查找問題、連接丟失等)。 在某些情況下,您可能希望將400添加到 [`RETRY_HTTP_CODES`](#std:setting-RETRY_HTTP_CODES) 因為它是用于指示服務器過載的常見代碼。默認情況下不包括它,因為HTTP規范這么說。 ### RobotsTxtMiddleware ```py class scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware ``` 此中間件過濾掉robots.txt排除標準禁止的請求。 要確保scrapy尊重robots.txt,請確保啟用中間件,并且 [`ROBOTSTXT_OBEY`](settings.html#std:setting-ROBOTSTXT_OBEY) 設置已啟用。 如果 [`Request.meta`](request-response.html#scrapy.http.Request.meta "scrapy.http.Request.meta") 有 `dont_obey_robotstxt` 密鑰設置為true,即使 [`ROBOTSTXT_OBEY`](settings.html#std:setting-ROBOTSTXT_OBEY) 啟用。 ### DownloaderStats ```py class scrapy.downloadermiddlewares.stats.DownloaderStats ``` 存儲通過它的所有請求、響應和異常的統計信息的中間件。 要使用此中間件,必須啟用 [`DOWNLOADER_STATS`](settings.html#std:setting-DOWNLOADER_STATS) 設置。 ### UserAgentMiddleware ```py class scrapy.downloadermiddlewares.useragent.UserAgentMiddleware ``` 允許spider覆蓋默認用戶代理的中間件。 為了讓spider重寫默認的用戶代理,其 `user_agent` 必須設置屬性。 ### AjaxCrawlMiddleware ```py class scrapy.downloadermiddlewares.ajaxcrawl.AjaxCrawlMiddleware ``` Middleware that finds 'AJAX crawlable' page variants based on meta-fragment html tag. See [https://developers.google.com/webmasters/ajax-crawling/docs/getting-started](https://developers.google.com/webmasters/ajax-crawling/docs/getting-started) for more info. 注解 Scrapy查找“ajax可爬行”頁面,查找類似 `'http://example.com/!#foo=bar'` 即使沒有這個中間件。當URL不包含時,需要AjaxCrawlMiddleware `'!#'` . 這通常是“索引”或“主要”網站頁面的情況。 #### AjaxCrawl中間件設置 ##### AJAXCRAWL_ENABLED 0.21 新版功能. 違約: `False` 是否啟用AjaxCrawl中間件。您可能希望啟用它 [broad crawls](broad-crawls.html#topics-broad-crawls) . #### httpproxymiddleware設置 ##### HTTPPROXY_ENABLED 違約: `True` 是否啟用 `HttpProxyMiddleware` . ##### HTTPPROXY_AUTH_ENCODING 違約: `"latin-1"` 上代理身份驗證的默認編碼 `HttpProxyMiddleware` .
                  <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>

                              哎呀哎呀视频在线观看