当前位置: 首页 > 知识库问答 >
问题:

Scrapy-爬行器开始爬行后更改规则

徐友樵
2023-03-14

我的查询是针对爬行蜘蛛

我知道链接提取器规则是一个静态变量,

我可以在运行时更改规则,比如

@classmethod
def set_rules(cls,rules):
 cls.rules = rules

通过

self.set_rules(rules)

这是爬行爬行器可接受的做法吗?如果没有,请建议适当的方法

我的用例,

我正在使用scrapy对特定网站的特定类别A、B、C…Z进行爬网。每个类别有1000个链接,分布在10页上

当scrapy点击某个类别中“太旧”的链接时。我希望爬虫停止跟踪/抓取10页中的其余部分,仅针对该类别,因此我对动态规则的要求会发生变化。

请给我指出正确的方向。

谢谢


共有2个答案

计均
2023-03-14

我建议您编写自己的定制下载中间件。这将允许你过滤掉那些你不再想提出的请求。

有关Scrapy架构概述的更多详细信息,您可以在此处找到:http://doc.scrapy.org/en/master/topics/architecture.html

关于downloader中间件以及如何编写自定义中间件:http://doc.scrapy.org/en/master/topics/downloader-middleware.html

郎和通
2023-03-14

蜘蛛中的规则不是动态改变的。它们是在CrawlSpider实例化时编译的。您可以随时更改您的spider.rules并重新运行spider._compile_rules(),但我建议不要这样做。

这些规则为爬虫程序创建了一组指令,用于对要爬取的内容进行排队(即,它将请求排队)。这些请求在发送之前不会被重新访问和重新评估,因为规则不是为了改变而“设计”的。因此,即使您确实动态更改了规则,您最终仍然可能会发出一堆您无意的请求,并且仍然会爬取一堆您无意的内容。

例如,如果您的目标页面设置为“类别A”的页面包含指向“类别A”的第1页至第10页的链接,那么Scrapy将为所有10个页面排队请求。如果第2页的条目“太旧了”,改变规则将无济于事,因为对第3-10页的请求已经排队等待发送。

正如@imx51所说,编写一个下载中间件会更好。它们将能够删除您不想再发出的每个请求,因为它们会在下载之前触发每个通过它的请求。

 类似资料:
  • 我无法更改分析方法中的爬行器设置。但这肯定是一种方式。 例如: 但是项目将由FirstPipeline处理。新项目参数不工作。开始爬网后如何更改设置?提前谢谢!

  • 我想用蜘蛛爬虫代码来获取一些房地产数据。但它一直给我这个错误: 回溯(最近一次呼叫最后一次): 文件“//anaconda/lib/python2.7/site packages/twisted/internet/defer.py”,第1301行,in_inlineCallbacks result=g.send(result) 文件“//anaconda/lib/python2.7/site pa

  • 嗨,我正在运行这个开源Ex-Crawler的罐子 但我总是收到这样的错误:og4j:WARN找不到记录器的追加器(eu.medsea.mimeutil.TextMimeDetector)。log4j:警告请正确初始化log4j系统。log4j:请参阅http://logging.apache.org/log4j/1.2/faq.html#noconfig更多信息

  • 主要内容:Scrapy下载安装,创建Scrapy爬虫项目,Scrapy爬虫工作流程,settings配置文件Scrapy 是一个基于 Twisted 实现的异步处理爬虫框架,该框架使用纯 Python 语言编写。Scrapy 框架应用广泛,常用于数据采集、网络监测,以及自动化测试等。 提示:Twisted 是一个基于事件驱动的网络引擎框架,同样采用 Python 实现。 Scrapy下载安装 Scrapy 支持常见的主流平台,比如 Linux、Mac、Windows 等,因此你可以很方便的安装它

  • 本文向大家介绍浅析python实现scrapy定时执行爬虫,包括了浅析python实现scrapy定时执行爬虫的使用技巧和注意事项,需要的朋友参考一下 项目需要程序能够放在超算中心定时运行,于是针对scrapy写了一个定时爬虫的程序main.py ,直接放在scrapy的存储代码的目录中就能设定时间定时多次执行。 最简单的方法:直接使用Timer类 小伙伴有种方法是使用 她的程序运行正常可以定时多

  • 本文向大家介绍Python反爬虫伪装浏览器进行爬虫,包括了Python反爬虫伪装浏览器进行爬虫的使用技巧和注意事项,需要的朋友参考一下 对于爬虫中部分网站设置了请求次数过多后会封杀ip,现在模拟浏览器进行爬虫,也就是说让服务器认识到访问他的是真正的浏览器而不是机器操作 简单的直接添加请求头,将浏览器的信息在请求数据时传入: 打开浏览器--打开开发者模式--请求任意网站 如下图:找到请求的的名字,打