不区分大小写的不区分大小写的URL

时间:2017-05-18 17:24:25

标签: python scrapy

我使用不区分大小写的scrapy抓取一组网址,以使http://www.example.com/ABC/1http://www.example.com/abc/1页面相同。在我的CrawlSpider中,我有一个看起来像的运行:

Rule(LinkExtractor(allow=('(?i)http://www.example.com/abc/\d+', ))

选择了这两种变体,但我最终会对页面进行双重抓取,因为复制过滤器会将它们视为不同的页面。

是否有一种简单的方法可以强制scrapy只访问一个变体或另一个变体(但不能同时访问两个变体),而无需继承RFPDupeFilter并更改DUPEFILTER_CLASS设置?或者这是最好的解决方案?

1 个答案:

答案 0 :(得分:3)

Scrapy的规则类有一个属性process_links,可用于将所有链接规范化为小写。在一个要点:

def links_as_lower(links):
    for link in links:
        link.url = link.url.lower()
        yield link

Rule(LinkExtractor(allow=('(?i)http://www.example/abc/\d+', ), process_links=links_as_lower)

有关scrapy规则的完整文档为here