Scrapy 将唯一网址过滤为重复网址

Scrapy is filtering unique urls as duplicate urls

网址:

  1. http://www.extrastores.com/en-sa/products/mobiles/smartphones-99500240157?page=1
  2. http://www.extrastores.com/en-sa/products/mobiles/smartphones-99500240157?page=2 are unique but scrapy is filtering these urls as duplicates and not scraping them.

我正在使用符合这些规则的 CrawlSpider:

rules = (
    Rule(LinkExtractor(restrict_css=('.resultspagenum'))),
    Rule(LinkExtractor(allow=('\/mobiles\/smartphones\/[a-zA-Z0-9_.-]*',), ), callback='parse_product'),
)`

我不明白这种行为,有人可以解释一下吗?同样的代码在上周运行。 使用 Scrapy 版本 1.3.0

按照@paul trmbrth 的建议,我重新检查了被抓取的代码和网站。 Scrapy 正在下载 links 并过滤 links 因为它们之前已经下载过。问题是 html 的 'a' 标签中的 link 属性从静态 link 更改为某些 javascript 函数:

<a href='javascript:gtm.traceProductClick("/en-sa/mobiles/smartphones/samsung-galaxy-s7-32gb-dual-sim-lte-gold-188024">

相应地,我将蜘蛛代码更改为:

    def _process_value(value):
    m = re.search('javascript:gtm.traceProductClick\("(.*?)"', value)
    if m:
        return m.group(1)


rules = (
    Rule(LinkExtractor(restrict_css=('.resultspagenum'))),
    Rule(LinkExtractor(
        allow=('\/mobiles\/smartphones\/[a-zA-Z0-9_.-]*',),
        process_value=_process_value
    ), callback='parse_product'),
)

这不是 scrapy 过滤非唯一 url 的问题,而是关于从 'a' 标签的 'href' 属性中提取 link,因为 link最近更改了,我的代码被破坏了。 再次感谢@paul trmbrth