我正在和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
Run Code Online (Sandbox Code Playgroud)
我注意到:
[scrapy] DEBUG: Filtered duplicate request: <GET 'htp://my-api'> - no more duplicates will be shown (see DUPEFILTER_DEBUG to show all duplicates)
Run Code Online (Sandbox Code Playgroud)
在我的代码中,我可以看到虽然它循环了8次,但它只产生对第一页的请求.我假设的其他人被过滤掉了.我查看了http://doc.scrapy.org/en/latest/topics/settings.html#dupefilter-class,但仍然不确定如何关闭此过滤操作.如何关闭过滤功能?
MrP*_*dav 13
使用
请求对象中的dont_filter = True
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,
dont_filter = True
)
yield PR
Run Code Online (Sandbox Code Playgroud)
当您访问API时,您最有可能想要完全禁用重复过滤器:
# settings.py
DUPEFILTER_CLASS = 'scrapy.dupefilters.BaseDupeFilter'
Run Code Online (Sandbox Code Playgroud)
这样您就不必混淆所有的Request创建代码dont_filter=True.