残缺过滤重复请求

2024-09-28 20:47:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我在和斯皮里一起工作。我想循环遍历一个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,但仍然不确定如何关闭此筛选操作。如何关闭筛选?


Tags: debugselfformapi代理requestmypage
2条回答

使用

dont_filter = True in Request object

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

当您访问一个API时,您很可能希望完全禁用重复过滤器:

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

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

相关问题 更多 >