Python Scrapy:爬行蜘蛛规则进程链接vs进程请求vs下载中间件

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

这不是一个“我如何使用这些?”的问题,而是一个“我什么时候/为什么要使用这些?”类型的问题

EDIT:这个问题几乎是重复的,它建议使用下载中间件来过滤这些请求。更新了我下面的问题以反映这一点。

在中,规则接受两个可调用项,
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链接
    ,那么您需要创建自己的中间件


  • 谢谢你的描述性回答,非常感谢!