[英]Crawling case-insensitive URLs without duplicates
我爬行了一套使用scrapy网址是区分大小写的,这样http://www.example.com/ABC/1
是在同一个页面http://www.example.com/abc/1
。 在我的CrawlSpider中,我的运行类似于:
Rule(LinkExtractor(allow=('(?i)http://www.example.com/abc/\d+', ))
它可以同时使用这两种变体,但由于复制过滤器将它们视为不同的页面,因此我最终对页面进行了两次爬网。
有没有一种简单的方法可以强制scrapy只访问一个变体或另一个变体(但不能同时访问两个变体),而无需RFPDupeFilter
子类并更改DUPEFILTER_CLASS
设置? 还是最好的解决方案?
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规则的完整文档在这里
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.