禁用scrapy redis中的重复过滤器

fjnneemd  于 2021-06-07  发布在  Redis
关注(0)|答案(0)|浏览(191)

使用普通刮擦时,只需使用 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中过滤重复项?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题