我正在使用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但仍不确定如何关闭此过滤操作。如何关闭过滤?
答案 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
混乱所有的请求创建代码。