在scrapy中,不过滤重复的请求

Scrapy提供了一个内置的重复请求过滤器,用于根据网址过滤重复的请求。可以根据业务需求制定规则过滤重复的请求

基于url过滤重复的请求

假设已访问过

http:://www.abc.com/p/xyz.html?id=1234&refer=4567

我想做的是过滤请求,如:

http:://www.abc.com/p/xyz.html?id=1234&refer=5678

通过编写自定义中间件以进行重复删除,并将其添加到设置中

import os

from scrapy.dupefilter import RFPDupeFilter
from scrapy.utils.request import request_fingerprint

class CustomFilter(RFPDupeFilter):
"""A dupe filter that considers specific ids in the url"""

    def __getid(self, url):
        mm = url.split("&refer")[0] #or something like that
        return mm

    def request_seen(self, request):
        fp = self.__getid(request.url)
        if fp in self.fingerprints:
            return True
        self.fingerprints.add(fp)
        if self.file:
            self.file.write(fp + os.linesep)

然后在settings.py中添加如下代码

DUPEFILTER_CLASS = 'scraper.duplicate_filter.CustomFilter'

不过滤重复任何请求

若在 scrapy 中,不过滤任何 request 请求,可以自定义如下文件


from scrapy.dupefilter import RFPDupeFilter

class CloseDupefilter(RFPDupeFilter):
    def request_seen(self, request):
        return False

然后在settings.py中添加如下代码

DUPEFILTER_CLASS = 'scraper.duplicate_filter.CustomFilter'
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值