Python Scrapy:爬行蜘蛛规则进程链接vs进程请求vs下载中间件
这不是一个“我如何使用这些?”的问题,而是一个“我什么时候/为什么要使用这些?”类型的问题 EDIT:这个问题几乎是重复的,它建议使用下载中间件来过滤这些请求。更新了我下面的问题以反映这一点。 在中,规则接受两个可调用项,Python Scrapy:爬行蜘蛛规则进程链接vs进程请求vs下载中间件,python,web-crawler,scrapy,Python,Web Crawler,Scrapy,这不是一个“我如何使用这些?”的问题,而是一个“我什么时候/为什么要使用这些?”类型的问题 EDIT:这个问题几乎是重复的,它建议使用下载中间件来过滤这些请求。更新了我下面的问题以反映这一点。 在中,规则接受两个可调用项,process\u links和process\u request(以下引用文档以便于参考) 默认情况下,Scrapy会过滤重复的URL,但我希望对请求进行额外的过滤,因为我会得到重复的页面,这些页面有多个不同的URL链接到它们。比如 URL1 = "http://exampl
process\u links
和process\u request
(以下引用文档以便于参考)
默认情况下,Scrapy会过滤重复的URL,但我希望对请求进行额外的过滤,因为我会得到重复的页面,这些页面有多个不同的URL链接到它们。比如
URL1 = "http://example.com/somePage.php?id=XYZ&otherParam=fluffyKittens"
URL2 = "http://example.com/somePage.php?id=XYZ&otherParam=scruffyPuppies"
但是,这些URL在查询字符串中有一个类似的元素-如上图所示,它是id
我认为使用spider的process\u链接来过滤重复请求是有意义的
问题:
为什么处理请求
更适合此任务
如果没有,您能否举例说明处理请求
何时更适用
下载中间件是否比过程链接
或过程请求
更合适?如果是这样,您能否举例说明process\u links
或process\u request
何时是更好的解决方案
文档引用:
process_links是可调用的,或者是字符串(在这种情况下是来自
将使用具有该名称的spider对象),该对象将被调用
对于使用
指定的链接提取程序。这主要用于过滤目的
process_请求是一个可调用的或字符串(在这种情况下是一个方法)
从具有该名称的爬行器对象)将
使用此规则提取的每个请求调用,并且必须返回
请求或无(过滤掉请求)
不,process\u链接
是您更好的选择,因为您只是在筛选URL,这样可以节省在process\u请求
中创建请求
而放弃它的开销
process\u request
非常有用,如果您想在发送请求之前稍微按摩一下request
,比如您想添加meta
参数,或者添加或删除标题
您不需要任何中间件,因为您需要的功能直接内置到规则中。如果规则中没有内置process\u链接
,那么您需要创建自己的中间件
谢谢你的描述性回答,非常感谢!