内置蜘蛛中间件参考¶本页描述了Scrapy附带的所有蜘蛛中间件组件。有关如何使用它们以及如何编写自己的蜘蛛中间件的信息,请参阅 spider middleware usage guide . 有关默认启用的组件列表(及其顺序),请参见 SPIDER_MIDDLEWARES_BASE 设置。 DepthMiddleware¶- classscrapy.spidermiddlewares.depth.DepthMiddleware[源代码]¶
DepthmIddleware用于跟踪被擦除站点内每个请求的深度。它通过设置工作 request.meta['depth'] = 0 如果之前没有设置值(通常只是第一个请求),则将其递增1。 它可以用来限制要抓取的最大深度,根据深度控制请求优先级,等等。 这个 DepthMiddleware 可以通过以下设置进行配置(有关详细信息,请参阅设置文档): DEPTH_LIMIT -允许对任何网站进行爬网的最大深度。如果为零,则不施加限制。
DEPTH_STATS_VERBOSE -是否收集每个深度的请求数。
DEPTH_PRIORITY -是否根据请求的深度对其进行优先级排序。
HttpErrorMiddleware¶- classscrapy.spidermiddlewares.httperror.HttpErrorMiddleware[源代码]¶
过滤掉不成功的(错误的)HTTP响应,这样spider就不必处理它们了,而这些(大部分时间)会增加开销,消耗更多的资源,并使spider逻辑更加复杂。
根据 HTTP standard ,成功的响应是状态代码在200-300范围内的响应。 如果仍要处理超出该范围的响应代码,可以使用 handle_httpstatus_list 蜘蛛属性或 HTTPERROR_ALLOWED_CODES 设置。 例如,如果您希望您的蜘蛛处理404响应,可以这样做: class MySpider(CrawlSpider):
handle_httpstatus_list = [404]
这个 handle_httpstatus_list 的关键字 Request.meta 还可以用于指定在每个请求的基础上允许哪些响应代码。您还可以设置元键 handle_httpstatus_all 至 True 如果要允许请求的任何响应代码,并且 False 要禁用的效果,请执行以下操作 handle_httpstatus_all 钥匙。 不过,请记住,处理非200个响应通常是个坏主意,除非你真的知道自己在做什么。 HTTP Status Code Definitions . httpErrorMiddleware设置¶HTTPERROR_ALLOWED_CODES¶违约: [] 通过此列表中包含非200状态代码的所有响应。 HTTPERROR_ALLOW_ALL¶违约: False 传递所有响应,无论其状态代码如何。 OffsiteMiddleware¶- classscrapy.spidermiddlewares.offsite.OffsiteMiddleware[源代码]¶
过滤掉对spider所覆盖域之外的URL的请求。 此中间件过滤掉其主机名不在爬行器中的每个请求 allowed_domains 属性。也允许列表中任何域的所有子域。例如,这条规则 www.example.org 还将允许 bob.www.example.org 但不是 www2.example.com 也不是 example.com 。 当您的spider返回一个不属于spider覆盖的域的请求时,这个中间件将记录一个与这个类似的调试消息: DEBUG: Filtered offsite request to 'www.othersite.com': <GET http://www.othersite.com/some/page.html>
为了避免在日志中填充过多的噪声,它将只为每个过滤后的新域打印其中一条消息。例如,如果另一个请求 www.othersite.com 已筛选,将不打印日志消息。但如果有人要求 someothersite.com 过滤后,将打印一条消息(但仅针对过滤后的第一个请求)。 如果爬行器没有定义 allowed_domains 属性,或者该属性为空,则异地中间件将允许所有请求。 如果请求具有 dont_filter 属性集,则即使其域未列在允许的域中,非现场中间件也会允许该请求。
|