笨鸟编程-零基础入门Pyhton教程

 找回密码
 立即注册

蜘蛛中间件

发布者: 笨鸟自学网



内置蜘蛛中间件参考

本页描述了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 属性集,则即使其域未列在允许的域中,非现场中间件也会允许该请求。


上一篇:下载器中间件下一篇:扩展

Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )

GMT+8, 2024-11-23 16:14 , Processed in 0.024533 second(s), 17 queries .

© 2001-2020

返回顶部