下载器中间件¶
下载器中间件是一个钩子框架,用于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
对象让你可以访问,例如,settings。
- class scrapy.downloadermiddlewares.DownloaderMiddleware¶
注意
任何下载器中间件方法也可能返回一个延迟对象。
- process_request(request, spider)¶
此方法针对每个通过下载中间件的请求调用。
process_request()应该:返回None,返回一个Response对象,返回一个Request对象,或者抛出IgnoreRequest。如果它返回
None,Scrapy 将继续处理此请求,执行所有其他中间件,直到最终调用适当的下载器处理程序执行请求(并下载其响应)。如果它返回一个
Response对象,Scrapy将不会调用任何其他的process_request()或process_exception()方法,或者适当的下载函数;它将返回该响应。已安装中间件的process_response()方法总是在每个响应上被调用。如果它返回一个
Request对象,Scrapy将停止调用process_request()方法并重新安排返回的请求。一旦新返回的 请求被执行,将在下载的响应上调用适当的中间件链。如果它引发了一个
IgnoreRequest异常,已安装的下载器中间件的process_exception()方法将被调用。如果它们都没有处理该异常,请求的错误回调函数(Request.errback)将被调用。如果没有代码处理引发的异常,它将被忽略且不会被记录(与其他异常不同)。- Parameters:
请求 (
Request对象) – 正在处理的请求spider (
Spider对象) – 此请求所针对的蜘蛛
- process_response(request, response, spider)¶
process_response()应该:返回一个Response对象,返回一个Request对象,或者抛出一个IgnoreRequest异常。如果它返回一个
Response(可能是相同的响应,或者是一个全新的响应),该响应将继续被链中的下一个中间件的process_response()处理。如果它返回一个
Request对象,中间件链将停止,并且返回的请求将被重新安排在未来下载。这与从process_request()返回请求的行为相同。如果它引发了一个
IgnoreRequest异常,请求的错误回调函数(Request.errback)将被调用。如果没有代码处理引发的异常,它将被忽略且不会被记录(与其他异常不同)。
- process_exception(request, exception, spider)¶
Scrapy 在下载处理器或下载器中间件的
process_request()抛出异常(包括IgnoreRequest异常)时调用process_exception()。process_exception()应该返回:要么是None, 一个Response对象,或者一个Request对象。如果它返回
None,Scrapy将继续处理此异常,执行任何其他已安装中间件的process_exception()方法,直到没有中间件剩余并且默认的异常处理开始。如果它返回一个
Response对象,已安装中间件的process_response()方法链将启动,Scrapy将不会调用任何其他中间件的process_exception()方法。如果它返回一个
Request对象,返回的请求将被重新安排在未来下载。这会停止执行process_exception()方法的中间件,就像返回一个响应一样。- Parameters:
request (是一个
Request对象) – 生成异常的请求异常 (一个
Exception对象) – 引发的异常spider (
Spider对象) – 此请求所针对的蜘蛛
内置下载器中间件参考¶
本页面描述了Scrapy自带的所有下载器中间件组件。有关如何使用它们以及如何编写自己的下载器中间件的信息,请参阅下载器中间件使用指南。
有关默认启用的组件列表(及其顺序),请参阅
DOWNLOADER_MIDDLEWARES_BASE 设置。
默认头中间件¶
- class scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware[source]¶
此中间件设置了在
DEFAULT_REQUEST_HEADERS设置中指定的所有默认请求头。
下载超时中间件¶
- class scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware[源代码]¶
此中间件为请求设置下载超时,该超时在
DOWNLOAD_TIMEOUT设置或download_timeout爬虫属性中指定。
注意
你也可以使用
download_timeout Request.meta 键为每个请求设置下载超时;即使 DownloadTimeoutMiddleware 被禁用,这也是支持的。
HttpAuthMiddleware¶
- class scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware[源代码]¶
这个中间件使用基本访问认证(也称为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[源代码]¶
此中间件为所有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]¶
一个DBM存储后端也可用于HTTP缓存中间件。
默认情况下,它使用
dbm,但你可以通过HTTPCACHE_DBM_MODULE设置来更改它。
编写您自己的存储后端¶
您可以通过创建一个定义了以下方法的Python类来实现缓存存储后端。
- class scrapy.extensions.httpcache.CacheStorage¶
- open_spider(spider)¶
此方法在蜘蛛被打开进行爬取后被调用。它处理
open_spider信号。- Parameters:
spider (
Spider对象) – 已打开的爬虫
- close_spider(spider)¶
此方法在爬虫关闭后被调用。它处理
close_spider信号。- Parameters:
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)流量。
HttpCompressionMiddleware 设置¶
压缩启用¶
默认值:True
是否启用压缩中间件。
HttpProxyMiddleware¶
- class scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware[源代码]¶
此中间件通过为
Request对象设置proxy元值,来设置用于请求的HTTP代理。与Python标准库模块
urllib.request类似,它遵循以下环境变量:http_proxyhttps_proxyno_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[源代码]¶
新版本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属性,或者 该属性为空,则站点外中间件将允许所有请求。如果请求具有
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]
Request.meta 的 handle_httpstatus_list 键也可以用于指定每个请求允许的响应代码。如果你想允许请求的任何响应代码,也可以将元键 handle_httpstatus_all 设置为 True。
重定向中间件设置¶
重定向已启用¶
默认值:True
是否启用重定向中间件。
重定向最大次数¶
默认值:20
单个请求将遵循的最大重定向次数。 如果超过最大重定向次数,请求将被中止并忽略。
MetaRefreshMiddleware¶
- class scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware[source]¶
此中间件处理基于meta-refresh html标签的请求重定向。
MetaRefreshMiddleware 可以通过以下设置进行配置(更多信息请参阅设置文档):
此中间件遵循REDIRECT_MAX_TIMES设置,dont_redirect,
redirect_urls和redirect_reasons请求元键,如RedirectMiddleware所述
MetaRefreshMiddleware 设置¶
METAREFRESH_ENABLED¶
默认值:True
是否启用Meta Refresh中间件。
METAREFRESH_MAXDELAY¶
默认值:100
最大元刷新延迟(以秒为单位)以跟随重定向。 一些网站使用元刷新来重定向到会话过期页面,因此我们 将自动重定向限制为最大延迟。
重试中间件¶
- class scrapy.downloadermiddlewares.retry.RetryMiddleware[源代码]¶
一个中间件,用于重试可能由临时问题(如连接超时或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[源代码]¶
返回一个新的
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 是一个字符串,用作与重试相关的作业统计信息的基础键
重试中间件设置¶
重试启用¶
默认值:True
是否启用重试中间件。
重试次数¶
默认值:2
最大重试次数,不包括第一次下载。
每次请求的最大重试次数也可以通过使用
max_retry_times 属性在 Request.meta 中指定。
初始化时,max_retry_times 元键的优先级高于
RETRY_TIMES 设置。
重试HTTP代码¶
默认值:[500, 502, 503, 504, 522, 524, 408, 429]
哪些HTTP响应代码需要重试。其他错误(DNS查找问题、连接丢失等)总是会重试。
在某些情况下,您可能希望将400添加到RETRY_HTTP_CODES,因为它是一个常用的代码,用于指示服务器过载。默认情况下不包括它,因为HTTP规范是这样规定的。
重试异常¶
默认:
[
'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()。
重试优先级调整¶
默认值:-1
调整重试请求相对于原始请求的优先级:
正优先级调整意味着更高的优先级。
负优先级调整(默认)意味着较低的优先级。
RobotsTxtMiddleware¶
- class scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware[源代码]¶
此中间件过滤掉被robots.txt排除标准禁止的请求。
为了确保Scrapy遵守robots.txt,请确保中间件已启用 并且
ROBOTSTXT_OBEY设置已启用。ROBOTSTXT_USER_AGENT设置可用于指定在 robots.txt 文件中用于匹配的用户代理字符串。如果它是None,则将使用请求中发送的 User-Agent 头或USER_AGENT设置(按此顺序)来确定在 robots.txt 文件中使用的用户代理。此中间件必须与robots.txt解析器结合使用。
Scrapy 提供了对以下 robots.txt 解析器的支持:
你可以通过robots.txt解析器更改
ROBOTSTXT_PARSER设置。或者你也可以实现对新解析器的支持。
如果 Request.meta 中的
dont_obey_robotstxt 键设置为 True,
即使启用了 ROBOTSTXT_OBEY,该请求也将被此中间件忽略。
解析器在几个方面有所不同:
实现语言
支持的规范
支持通配符匹配
使用基于长度的规则: 特别是对于
Allow和Disallow指令,其中基于路径长度的最具体规则胜过不太具体(较短)的规则
不同解析器的性能比较可在以下链接查看。
Protego 解析器¶
基于 Protego:
用Python实现
支持通配符匹配
使用基于长度的规则
Scrapy 默认使用此解析器。
RobotFileParser¶
基于 RobotFileParser:
是 Python 内置的 robots.txt 解析器
缺少对通配符匹配的支持
不使用基于长度的规则
它比Protego更快,并且与1.8.0之前的Scrapy版本向后兼容。
为了使用这个解析器,请设置:
ROBOTSTXT_PARSER到scrapy.robotstxt.PythonRobotParser
机器人排除规则解析器¶
用Python实现
支持通配符匹配
不使用基于长度的规则
为了使用这个解析器:
通过运行
pip install robotexclusionrulesparser来安装Robotexclusionrulesparser将
ROBOTSTXT_PARSER设置设置为scrapy.robotstxt.RerpRobotParser
实现对新解析器的支持¶
您可以通过子类化抽象基类 RobotParser 并实现下面描述的方法来实现对新的 robots.txt 解析器的支持。
- class scrapy.robotstxt.RobotParser[源代码]¶
- 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文件的内容为字节。这必须是一个类方法。 它必须返回解析器后端的新实例。
- Parameters:
爬虫 (
Crawler实例) – 发起请求的爬虫robotstxt_body (bytes) – robots.txt 文件的内容。
下载器统计¶
- class scrapy.downloadermiddlewares.stats.DownloaderStats[源代码]¶
中间件,用于存储通过它的所有请求、响应和异常的统计信息。
要使用此中间件,您必须启用
DOWNLOADER_STATS设置。
用户代理中间件¶
AjaxCrawlMiddleware¶
- class scrapy.downloadermiddlewares.ajaxcrawl.AjaxCrawlMiddleware[源代码]¶
中间件,基于meta-fragment html标签找到‘AJAX可抓取’的页面变体。
注意
Scrapy 可以找到像
'http://example.com/!#foo=bar'这样的‘AJAX 可爬取’页面,即使没有这个中间件。当 URL 不包含'!#'时,AjaxCrawlMiddleware 是必要的。这通常是‘索引’或‘主’网站页面的情况。
AjaxCrawlMiddleware 设置¶
AJAXCRAWL_ENABLED¶
默认值:False
是否启用AjaxCrawlMiddleware。您可能希望为broad crawls启用它。
HttpProxyMiddleware 设置¶
HTTPPROXY_ENABLED¶
默认值:True
是否启用HttpProxyMiddleware。
HTTPPROXY_AUTH_ENCODING¶
默认值: "latin-1"
HttpProxyMiddleware 上代理身份验证的默认编码。