使用普通刮擦时,只需使用 dont_filter=True
我在用 scrapy-redis
它正在过滤重复的请求。如果禁用这个,我会覆盖 make_request_from_data
功能和使用 dont_filter=True
:
# spider.py:
class ScheduledRequest:
def __init__(self, reques_id, url):
self.reques_id = reques_id
self.url = url
class MySpider(RedisSpider):
name = "myspider"
def make_request_from_data(self, data):
scheduled = ScheduledRequest(
**json.loads(
bytes_to_str(data, self.redis_encoding)
)
)
return scrapy.Request(url=scheduled.url, meta={"request_id": scheduled.reques_id}, dont_filter=True)
添加后 dont_filter=True
它不会过滤所有的重复项,但会过滤其中的一部分。
如果我推10个完全相同的网址,不是所有10个都被爬网。它只爬行5或7个网址。
# schedule.py:
def push():
r.lpush(
"myspider:start_urls",
json.dumps(
{
"reques_id": "XXXXXXXXXXXXXXXXXXXXX",
"url": "https://google.com",
}
),
)
如何禁用在scrapy redis中过滤重复项?
暂无答案!
目前还没有任何答案,快来回答吧!