这不是“我如何使用这些?” 以及更多“我何时/为什么要使用这些?” 键入问题。
编辑:这个问题与这个问题几乎重复,它建议使用下载中间件来过滤此类请求。在下面更新了我的问题以反映这一点。
在Scrapy CrawlSpider 文档中,规则接受两个可调用对象,process_links
和process_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
.
我认为使用process_links
我的蜘蛛的可调用来过滤重复请求是有意义的。
问题:
- 有什么理由
process_request
可以更好地完成这项任务吗? - 如果不是,您能否举例说明何时
process_request
更适用? process_links
下载中间件是否比两者更合适process_request
?如果是这样,您能否举例说明何时process_links
或process_request
将是更好的解决方案?
文档引用:
process_links 是一个可调用的或一个字符串(在这种情况下,将使用来自具有该名称的蜘蛛对象的方法),它将为使用指定的链接提取器从每个响应中提取的每个链接列表调用。这主要用于过滤目的。
process_request 是一个可调用的,或者是一个字符串(在这种情况下,将使用来自具有该名称的蜘蛛对象的方法)将在此规则提取的每个请求中调用,并且必须返回一个请求或 None (过滤掉请求)。