下载器中间件¶
下载器中间件是 Scrapy 请求/响应处理中的一组钩子框架。它是一个轻量级、低级别的系统,用于全局修改 Scrapy 的请求和响应。
激活下载器中间件¶
要激活下载器中间件组件,请将其添加到 DOWNLOADER_MIDDLEWARES
设置中,该设置是一个字典,其键是中间件类路径,其值是中间件顺序。
这是一个示例
DOWNLOADER_MIDDLEWARES = {
"myproject.middlewares.CustomDownloaderMiddleware": 543,
}
DOWNLOADER_MIDDLEWARES
设置与 Scrapy 中定义的 DOWNLOADER_MIDDLEWARES_BASE
设置合并,然后按顺序排序以获取最终排序的已启用中间件列表:第一个中间件是靠近引擎的中间件,最后一个是靠近下载器的中间件。换句话说,每个中间件的 process_request()
方法将按中间件顺序递增调用 (100、200、300、…),并且每个中间件的 process_response()
方法将按中间件顺序递减调用。
要确定为中间件分配哪个顺序,请参阅 DOWNLOADER_MIDDLEWARES_BASE
设置,并根据要插入中间件的位置选择一个值。顺序很重要,因为每个中间件都执行不同的操作,并且您的中间件可能依赖于应用的一些先前(或后续)中间件。
如果要禁用内置中间件(在 DOWNLOADER_MIDDLEWARES_BASE
中定义并默认启用的中间件),则必须在项目的 DOWNLOADER_MIDDLEWARES
设置中定义它,并将其值分配为 None
。例如,如果要禁用用户代理中间件
DOWNLOADER_MIDDLEWARES = {
"myproject.middlewares.CustomDownloaderMiddleware": 543,
"scrapy.downloadermiddlewares.useragent.UserAgentMiddleware": None,
}
最后,请记住,某些中间件可能需要通过特定的设置启用。有关更多信息,请参阅每个中间件的文档。
编写自己的下载器中间件¶
每个下载器中间件都是一个 Python 类,它定义了一个或多个下面定义的方法。
主要入口点是 from_crawler
类方法,它接收一个 Crawler
实例。例如,Crawler
对象使您可以访问 设置。
- class scrapy.downloadermiddlewares.DownloaderMiddleware¶
注意
任何下载器中间件方法也可以返回一个延迟对象。
- process_request(request, spider)¶
此方法会对通过下载器中间件的每个请求调用。
如果它返回
None
,Scrapy 将继续处理此请求,执行所有其他中间件,直到最终调用相应的下载器处理程序执行请求(并下载其响应)。如果它返回一个
Response
对象,Scrapy 将不会调用任何其他process_request()
或process_exception()
方法或相应的下载函数;它将返回该响应。已安装中间件的process_response()
方法始终在每个响应上调用。如果它返回一个
Request
对象,Scrapy 将停止调用process_request()
方法并重新调度返回的请求。执行新返回的请求后,将对下载的响应调用相应的中间件链。如果它引发
IgnoreRequest
异常,将调用已安装下载器中间件的process_exception()
方法。如果它们都不处理异常,则会调用请求的 errback 函数(Request.errback
)。如果没有任何代码处理引发的异常,则会忽略该异常且不会记录(与其他异常不同)。- 参数:
request (
Request
对象) – 正在处理的请求spider (
Spider
对象) – 此请求的目标爬虫
- process_response(request, response, spider)¶
-
如果它返回一个
Response
(它可能是给定的相同响应或一个全新的响应),则该响应将继续使用链中下一个中间件的process_response()
进行处理。如果它返回一个
Request
对象,则中间件链将停止,并且返回的请求将被重新调度以在将来下载。这与从process_request()
返回请求时的行为相同。如果它引发
IgnoreRequest
异常,则请求的 errback 函数(Request.errback
)将被调用。如果没有任何代码处理引发的异常,则该异常将被忽略且不会记录(与其他异常不同)。
- process_exception(request, exception, spider)¶
当下载处理器或
process_request()
(来自下载器中间件)引发异常(包括IgnoreRequest
异常)时,Scrapy 会调用process_exception()
。process_exception()
应该返回:None
、Response
对象或Request
对象。如果它返回
None
,Scrapy 将继续处理此异常,执行已安装中间件的其他任何process_exception()
方法,直到没有剩余中间件并且默认异常处理开始。如果它返回
Response
对象,则将启动已安装中间件的process_response()
方法链,并且 Scrapy 不会再调用中间件的任何其他process_exception()
方法。如果它返回一个
Request
对象,则返回的请求将被重新调度以在将来下载。这会停止中间件的process_exception()
方法的执行,就像返回响应一样。- 参数:
request(是
Request
对象) – 生成异常的请求exception(
Exception
对象) – 引发的异常spider (
Spider
对象) – 此请求的目标爬虫
内置下载器中间件参考¶
此页面描述了 Scrapy 附带的所有下载器中间件组件。有关如何使用它们以及如何编写自己的下载器中间件的信息,请参阅 下载器中间件使用指南。
有关默认情况下启用的组件(及其顺序)的列表,请参阅 DOWNLOADER_MIDDLEWARES_BASE
设置。
DefaultHeadersMiddleware¶
- class scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware[source]¶
此中间件设置
DEFAULT_REQUEST_HEADERS
设置中指定的所有默认请求标头。
DownloadTimeoutMiddleware¶
- class scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware[source]¶
此中间件为在
DOWNLOAD_TIMEOUT
设置或download_timeout
爬虫属性中指定的请求设置下载超时时间。
注意
您也可以使用 download_timeout
Request.meta 键为每个请求设置下载超时时间;即使禁用 DownloadTimeoutMiddleware,此功能也受支持。
HttpAuthMiddleware¶
- class scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware[source]¶
此中间件使用 基本身份验证(又称 HTTP 身份验证)对某些爬虫生成的全部请求进行身份验证。
要为爬虫启用 HTTP 身份验证,请将
http_user
和http_pass
爬虫属性设置为身份验证数据,并将http_auth_domain
爬虫属性设置为需要此身份验证的域名(其子域名也将以相同方式处理)。您可以将http_auth_domain
设置为None
以对所有请求启用身份验证,但您可能会将身份验证凭据泄露到不相关的域名。警告
在以前的 Scrapy 版本中,HttpAuthMiddleware 会将身份验证数据与所有请求一起发送,如果爬虫向多个不同的域名发出请求,这将是一个安全问题。目前,如果未设置
http_auth_domain
属性,则中间件将使用第一个请求的域名,这对于某些爬虫有效,但对于其他爬虫无效。将来,中间件将改为产生错误。示例
from scrapy.spiders import CrawlSpider class SomeIntranetSiteSpider(CrawlSpider): http_user = "someuser" http_pass = "somepass" http_auth_domain = "intranet.example.com" name = "intranet.example.com" # .. rest of the spider code omitted ...
HttpCacheMiddleware¶
- class scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware[source]¶
此中间件为所有 HTTP 请求和响应提供低级缓存。它必须与缓存存储后端以及缓存策略结合使用。
Scrapy 附带以下 HTTP 缓存存储后端
您可以使用
HTTPCACHE_STORAGE
设置更改 HTTP 缓存存储后端。或者,您也可以 实现您自己的存储后端。Scrapy 附带两种 HTTP 缓存策略
您可以使用
HTTPCACHE_POLICY
设置更改 HTTP 缓存策略。或者,您也可以实现您自己的策略。您还可以使用
dont_cache
元键等于True
来避免在每个策略上缓存响应。
虚拟策略(默认)¶
RFC2616 策略¶
- class scrapy.extensions.httpcache.RFC2616Policy[source]¶
此策略提供符合 RFC2616 的 HTTP 缓存,即具有 HTTP Cache-Control 意识,旨在用于生产环境并在连续运行中使用,以避免下载未修改的数据(以节省带宽并加快爬取速度)。
已实现的功能
不要尝试存储设置了
no-store
缓存控制指令的响应/请求即使对于新响应,如果设置了
no-cache
缓存控制指令,也不要从缓存中提供响应根据
max-age
缓存控制指令计算新鲜度生命周期根据
Expires
响应头计算新鲜度生命周期根据
Last-Modified
响应头计算新鲜度生命周期(Firefox 使用的启发式方法)根据
Age
响应头计算当前年龄根据
Date
头计算当前年龄基于
Last-Modified
响应头重新验证陈旧响应基于
ETag
响应头重新验证陈旧响应为任何缺少此头的接收到的响应设置
Date
头支持请求中的
max-stale
缓存控制指令
这允许爬虫配置完整的 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.1Vary
头支持 https://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.6更新或删除后的失效 https://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.10
… 可能还有其他…
文件系统存储后端(默认)¶
- class scrapy.extensions.httpcache.FilesystemCacheStorage[source]¶
文件系统存储后端可用于 HTTP 缓存中间件。
每个请求/响应对都存储在不同的目录中,其中包含以下文件
request_body
- 纯请求正文request_headers
- 请求头(以原始 HTTP 格式)response_body
- 纯响应正文response_headers
- 请求头(以原始 HTTP 格式)meta
- 此缓存资源的一些元数据,采用 Pythonrepr()
格式(易于 grep 的格式)pickled_meta
- 与meta
中相同的元数据,但已序列化,以便更有效地反序列化
目录名称由请求指纹生成(请参阅
scrapy.utils.request.fingerprint
),并且使用一层子目录来避免在同一目录中创建太多文件(这在许多文件系统中效率低下)。示例目录可能是/path/to/cache/dir/example.com/72/72811f648e718090f041317756c03adb0ada46c7
DBM 存储后端¶
- class scrapy.extensions.httpcache.DbmCacheStorage[source]¶
HTTP 缓存中间件还提供了一个 DBM 存储后端。
默认情况下,它使用
dbm
,但您可以使用HTTPCACHE_DBM_MODULE
设置更改它。
编写您自己的存储后端¶
您可以通过创建一个定义下面描述的方法的 Python 类来实现缓存存储后端。
- class scrapy.extensions.httpcache.CacheStorage¶
- open_spider(spider)¶
此方法在蜘蛛打开以供爬取后被调用。它处理
open_spider
信号。- 参数:
spider (
Spider
对象) – 已打开的蜘蛛
- close_spider(spider)¶
此方法在蜘蛛关闭后被调用。它处理
close_spider
信号。- 参数:
spider (
Spider
对象) – 已关闭的蜘蛛
为了使用您的存储后端,请设置
HTTPCACHE_STORAGE
为自定义存储类的 Python 导入路径。
HTTPCache 中间件设置¶
HttpCacheMiddleware
可以通过以下设置进行配置
HTTPCACHE_ENABLED¶
默认值:False
HTTP 缓存是否启用。
HTTPCACHE_EXPIRATION_SECS¶
默认值:0
缓存请求的过期时间(以秒为单位)。
比此时间旧的缓存请求将被重新下载。如果为零,则缓存请求永远不会过期。
HTTPCACHE_DIR¶
默认值:'httpcache'
用于存储(低级)HTTP 缓存的目录。如果为空,则 HTTP 缓存将被禁用。如果给定相对路径,则相对于项目数据目录。有关更多信息,请参阅:Scrapy 项目的默认结构。
HTTPCACHE_IGNORE_HTTP_CODES¶
默认值:[]
不要缓存具有这些 HTTP 代码的响应。
HTTPCACHE_IGNORE_MISSING¶
默认值:False
如果启用,则缓存中找不到的请求将被忽略,而不是下载。
HTTPCACHE_IGNORE_SCHEMES¶
默认值:['file']
不要缓存具有这些 URI 方案的响应。
HTTPCACHE_STORAGE¶
默认值:'scrapy.extensions.httpcache.FilesystemCacheStorage'
实现缓存存储后端的类。
HTTPCACHE_DBM_MODULE¶
默认值:'dbm'
在 DBM 存储后端 中使用的数据库模块。此设置特定于 DBM 后端。
HTTPCACHE_POLICY¶
默认值:'scrapy.extensions.httpcache.DummyPolicy'
实现缓存策略的类。
HTTPCACHE_GZIP¶
默认值:False
如果启用,则使用 gzip 压缩所有缓存数据。此设置特定于文件系统后端。
HTTPCACHE_ALWAYS_STORE¶
默认值:False
如果启用,则无条件缓存页面。
蜘蛛可能希望所有响应都可用于缓存,以便将来与 Cache-Control: max-stale
一起使用,例如。DummyPolicy 缓存所有响应但从不重新验证它们,有时需要更细致的策略。
此设置仍然尊重响应中的 Cache-Control: no-store
指令。如果您不希望这样做,请将 no-store
从您提供给缓存中间件的响应中的 Cache-Control 标头中过滤掉。
HTTPCACHE_IGNORE_RESPONSE_CACHE_CONTROLS¶
默认值:[]
要忽略的响应中 Cache-Control 指令的列表。
站点通常设置“no-store”、“no-cache”、“must-revalidate”等,但如果蜘蛛实际尊重这些指令,则会对生成的流量感到不安。这允许有选择地忽略已知对正在爬取的站点不重要的 Cache-Control 指令。
我们假设蜘蛛不会在请求中发出 Cache-Control 指令,除非它确实需要它们,因此不会过滤请求中的指令。
HttpCompressionMiddleware¶
- class scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware[source]¶
此中间件允许从网站发送/接收压缩(gzip、deflate)流量。
此中间件还支持解码 brotli 压缩 以及 zstd 压缩 响应,前提是分别安装了 brotli 或 zstandard。
HttpCompressionMiddleware 设置¶
COMPRESSION_ENABLED¶
默认值:True
压缩中间件是否启用。
HttpProxyMiddleware¶
- class scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware[source]¶
此中间件通过为
Request
对象设置proxy
元值来设置要用于请求的 HTTP 代理。与 Python 标准库模块
urllib.request
一样,它遵守以下环境变量http_proxy
https_proxy
no_proxy
您还可以为每个请求设置元键
proxy
,其值为http://some_proxy_server:port
或http://username:password@some_proxy_server:port
。请记住,此值将优先于http_proxy
/https_proxy
环境变量,并且它也将忽略no_proxy
环境变量。
OffsiteMiddleware¶
- class scrapy.downloadermiddlewares.offsite.OffsiteMiddleware[source]¶
版本 2.11.2 中的新功能。
过滤掉超出蜘蛛覆盖的域的 URL 的请求。
此中间件过滤掉主机名不在蜘蛛的
allowed_domains
属性中的所有请求。任何列表中域的所有子域也允许。例如,规则www.example.org
也将允许bob.www.example.org
但不允许www2.example.com
也不允许example.com
。当您的蜘蛛返回对不属于蜘蛛覆盖的域的请求时,此中间件将记录类似于以下内容的调试消息
DEBUG: Filtered offsite request to 'offsite.example': <GET http://offsite.example/some/page.html>
为了避免日志中出现太多噪音,它只会为每个新过滤的域打印其中一条消息。因此,例如,如果过滤掉对
offsite.example
的另一个请求,则不会打印日志消息。但是,如果过滤掉对other.example
的请求,则会打印一条消息(但仅针对第一个过滤的请求)。如果蜘蛛没有定义
allowed_domains
属性,或者该属性为空,则 offsite 中间件将允许所有请求。如果请求具有
dont_filter
属性设置,即使其域名未列在允许的域名中,离站中间件也将允许该请求。
重定向中间件¶
请求经过的 URL(在重定向期间)可以在redirect_urls
Request.meta
键中找到。
每个重定向的原因redirect_urls
可以在redirect_reasons
Request.meta
键中找到。例如:[301, 302, 307, 'meta refresh']
。
原因的格式取决于处理相应重定向的中间件。例如,RedirectMiddleware
将触发响应状态码表示为整数,而MetaRefreshMiddleware
始终使用'meta refresh'
字符串作为原因。
RedirectMiddleware
可以通过以下设置进行配置(有关更多信息,请参阅设置文档)
如果Request.meta
具有dont_redirect
键设置为 True,则此中间件将忽略该请求。
如果要处理蜘蛛中的某些重定向状态代码,可以在handle_httpstatus_list
蜘蛛属性中指定这些代码。
例如,如果要重定向中间件忽略 301 和 302 响应(并将它们传递给您的蜘蛛),您可以这样做
class MySpider(CrawlSpider):
handle_httpstatus_list = [301, 302]
handle_httpstatus_list
键Request.meta
也可以用于指定每个请求允许哪些响应代码。如果要允许请求的任何响应代码,还可以将元数据键handle_httpstatus_all
设置为True
。
重定向中间件设置¶
REDIRECT_ENABLED¶
默认值:True
是否启用重定向中间件。
REDIRECT_MAX_TIMES¶
默认值:20
将为单个请求遵循的最大重定向次数。如果超过最大重定向次数,则请求将中止并被忽略。
元刷新中间件¶
- class scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware[source]¶
此中间件根据元刷新 html 标签处理请求的重定向。
MetaRefreshMiddleware
可以通过以下设置进行配置(有关更多信息,请参阅设置文档)
此中间件遵守REDIRECT_MAX_TIMES
设置、dont_redirect
、redirect_urls
和redirect_reasons
请求元数据键,如RedirectMiddleware
所述。
元刷新中间件设置¶
METAREFRESH_ENABLED¶
默认值:True
是否启用元刷新中间件。
METAREFRESH_MAXDELAY¶
默认值:100
要遵循重定向的最大元刷新延迟(以秒为单位)。某些站点使用元刷新重定向到会话过期页面,因此我们将自动重定向限制为最大延迟。
重试中间件¶
- class scrapy.downloadermiddlewares.retry.RetryMiddleware[source]¶
一个中间件,用于重试可能由临时问题(例如连接超时或 HTTP 500 错误)引起的失败请求。
失败的页面在抓取过程中收集,并在蜘蛛完成所有常规(非失败)页面的抓取后重新安排。
RetryMiddleware
可以通过以下设置进行配置(有关更多信息,请参阅设置文档)
如果Request.meta
具有dont_retry
键设置为 True,则此中间件将忽略该请求。
要重试蜘蛛回调中的请求,可以使用get_retry_request()
函数
- scrapy.downloadermiddlewares.retry.get_retry_request(request: Request, *, spider: Spider, reason: str | Exception | type[Exception] = 'unspecified', max_retry_times: int | None = None, priority_adjust: int | None = None, logger: Logger = <Logger scrapy.downloadermiddlewares.retry (WARNING)>, stats_base_key: str = 'retry') Request | None [source]¶
返回一个新的
Request
对象以重试指定的请求,或者如果指定的请求的重试已用尽,则返回None
。例如,在
Spider
回调中,您可以按如下方式使用它def parse(self, response): if not response.text: new_request_or_none = get_retry_request( response.request, spider=self, reason='empty', ) return new_request_or_none
spider是正在请求重试请求的
Spider
实例。它用于访问设置和统计信息,并提供额外的日志记录上下文(请参阅logging.debug()
)。reason是一个字符串或一个
Exception
对象,指示请求需要重试的原因。它用于命名重试统计信息。max_retry_times 是一个数字,用于确定request可以重试的最大次数。如果未指定或为
None
,则从请求的max_retry_times
元键读取该数字。如果max_retry_times
元键未定义或为None
,则从RETRY_TIMES
设置读取该数字。priority_adjust 是一个数字,用于确定新请求的优先级相对于request如何变化。如果未指定,则从
RETRY_PRIORITY_ADJUST
设置读取该数字。logger 是用于记录消息的 logging.Logger 对象。
stats_base_key 是一个字符串,用作与重试相关的作业统计信息的基键。
RetryMiddleware 设置¶
RETRY_ENABLED¶
默认值:True
Retry 中间件是否启用。
RETRY_TIMES¶
默认值:2
除了第一次下载之外,重试的最大次数。
还可以使用 Request.meta
的 max_retry_times
属性为每个请求指定最大重试次数。初始化时,max_retry_times
元键的优先级高于 RETRY_TIMES
设置。
RETRY_HTTP_CODES¶
默认值:[500, 502, 503, 504, 522, 524, 408, 429]
要重试的 HTTP 响应代码。其他错误(DNS 查找问题、连接丢失等)始终会重试。
在某些情况下,您可能希望将 400 添加到 RETRY_HTTP_CODES
,因为它是一个常用代码,用于指示服务器过载。默认情况下不包含它,因为 HTTP 规范如是说。
RETRY_EXCEPTIONS¶
默认值
[
'twisted.internet.defer.TimeoutError',
'twisted.internet.error.TimeoutError',
'twisted.internet.error.DNSLookupError',
'twisted.internet.error.ConnectionRefusedError',
'twisted.internet.error.ConnectionDone',
'twisted.internet.error.ConnectError',
'twisted.internet.error.ConnectionLost',
'twisted.internet.error.TCPTimedOutError',
'twisted.web.client.ResponseFailed',
IOError,
'scrapy.core.downloader.handlers.http11.TunnelError',
]
要重试的异常列表。
每个列表条目可以是异常类型或其作为字符串的导入路径。
当异常类型不在 RETRY_EXCEPTIONS
中或请求的最大重试次数已超过时(请参阅 RETRY_TIMES
),不会捕获异常。要了解未捕获异常的传播,请参阅 process_exception()
。
RETRY_PRIORITY_ADJUST¶
默认值:-1
调整重试请求相对于原始请求的优先级。
正的优先级调整表示更高的优先级。
负的优先级调整(默认值)表示较低的优先级。
RobotsTxtMiddleware¶
- class scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware[source]¶
此中间件过滤掉 robots.txt 排除标准禁止的请求。
要确保 Scrapy 遵守 robots.txt,请确保启用了中间件,并启用了
ROBOTSTXT_OBEY
设置。ROBOTSTXT_USER_AGENT
设置可用于指定用于在 robots.txt 文件中匹配的用户代理字符串。如果它为None
,则将使用您与请求一起发送的用户代理标头或USER_AGENT
设置(按此顺序)来确定在 robots.txt 文件中使用的用户代理。此中间件必须与 robots.txt 解析器结合使用。
Scrapy 附带对以下 robots.txt 解析器的支持
您可以使用
ROBOTSTXT_PARSER
设置更改 robots.txt 解析器。或者,您还可以 实现对新解析器的支持。
如果 Request.meta
的 dont_obey_robotstxt
键设置为 True,则即使启用了 ROBOTSTXT_OBEY
,此中间件也会忽略该请求。
解析器在几个方面有所不同
实现语言
支持的规范
对通配符匹配的支持
使用 基于长度的规则:特别是对于
Allow
和Disallow
指令,其中基于路径长度的最具体的规则优先于不太具体的(较短的)规则。
不同解析器的性能比较可在 以下链接 中找到。
Protego 解析器¶
基于 Protego
用 Python 实现
支持通配符匹配
使用基于长度的规则
Scrapy 默认使用此解析器。
RobotFileParser¶
是 Python 的内置 robots.txt 解析器
缺少对通配符匹配的支持
不使用基于长度的规则
它比 Protego 快,并且与 1.8.0 之前的 Scrapy 版本向后兼容。
要使用此解析器,请设置
ROBOTSTXT_PARSER
为scrapy.robotstxt.PythonRobotParser
Robotexclusionrulesparser¶
用 Python 实现
支持通配符匹配
不使用基于长度的规则
要使用此解析器
运行
pip install robotexclusionrulesparser
安装Robotexclusionrulesparser
将
ROBOTSTXT_PARSER
设置设置为scrapy.robotstxt.RerpRobotParser
实现对新解析器的支持¶
您可以通过子类化抽象基类 RobotParser
并实现下面描述的方法来实现对新 robots.txt 解析器的支持。
- class scrapy.robotstxt.RobotParser[source]¶
- abstract allowed(url: str | bytes, user_agent: str | bytes) bool [source]¶
如果
user_agent
允许抓取url
,则返回True
,否则返回False
。
- abstract classmethod from_crawler(crawler: Crawler, robotstxt_body: bytes) Self [source]¶
将 robots.txt 文件的内容(以字节形式)进行解析。这必须是一个类方法。它必须返回解析器后端的新实例。
- 参数:
crawler (
Crawler
实例) – 发起请求的爬虫robotstxt_body (bytes) – robots.txt 文件的内容。
DownloaderStats¶
- class scrapy.downloadermiddlewares.stats.DownloaderStats[source]¶
存储所有通过它的请求、响应和异常的统计信息的中间件。
要使用此中间件,必须启用
DOWNLOADER_STATS
设置。
UserAgentMiddleware¶
AjaxCrawlMiddleware¶
- class scrapy.downloadermiddlewares.ajaxcrawl.AjaxCrawlMiddleware[source]¶
基于元片段 html 标签查找“AJAX 可抓取”页面变体的中间件。
注意
即使没有此中间件,Scrapy 也会为类似
'http://example.com/!#foo=bar'
的 URL 查找“AJAX 可抓取”页面。当 URL 不包含'!#'
时,需要使用 AjaxCrawlMiddleware。这通常是网站“索引”或“主”页面的情况。
AjaxCrawlMiddleware 设置¶
AJAXCRAWL_ENABLED¶
默认值:False
是否启用 AjaxCrawlMiddleware。对于 广泛抓取,您可能希望启用它。
HttpProxyMiddleware 设置¶
HTTPPROXY_ENABLED¶
默认值:True
是否启用 HttpProxyMiddleware
。
HTTPPROXY_AUTH_ENCODING¶
默认值:"latin-1"
HttpProxyMiddleware
上代理身份验证的默认编码。