Scrapy - 过滤重复请求

时间:2016-09-27 17:07:55

标签: python scrapy

我正在使用scrapy。我想遍历db表并获取每个scrape(random_form_page)的起始页面,然后为每个起始页面生成一个请求。请注意,我正在使用api来获取初始请求的代理。我想设置每个请求以拥有自己的代理,因此使用我的回调模型:

def start_requests(self):
    for x in xrange(8): 
        random_form_page = session.query(....

        PR = Request(
            'htp://my-api',
            headers=self.headers,
            meta={'newrequest': Request(random_form_page,  headers=self.headers)},
            callback=self.parse_PR
        )
        yield PR

我注意到了:

[scrapy] DEBUG: Filtered duplicate request: <GET 'htp://my-api'> - no more duplicates will be shown (see DUPEFILTER_DEBUG to show all duplicates)

在我的代码中,我可以看到虽然它循环了8次,但它只产生对第一页的请求。我假设的其他人被过滤掉了。我查看http://doc.scrapy.org/en/latest/topics/settings.html#dupefilter-class但仍不确定如何关闭此过滤操作。如何关闭过滤?

2 个答案:

答案 0 :(得分:10)

使用

  

请求对象中的dont_filter = True

_wikiSpider
  +scrapy.cfg
  _wikiSpider
    +__init__.py
    +items.py
    +items.pyc
    +settings.py
    +settings.pyc
    +pipelines.py
    _spiders
     +__init__.py
     +__init__.pyc
     +articleSpider.py
     +articleSpider.pyc
     +items.py

答案 1 :(得分:5)

当您访问API时,您可能最想完全禁用重复过滤器:

# settings.py
DUPEFILTER_CLASS = 'scrapy.dupefilters.BaseDupeFilter'

这样您就不必使用dont_filter=True混乱所有的请求创建代码。