配置 spider 忽略 url 参数,这样 scrapy 就不会抓取同一个页面两次

Configure spider to ignore url parameters so scrapy doesn't scrape the same page twice

是否可以将 Scrapy 蜘蛛配置为忽略已访问的 URL 中的 URL 参数,以便在 www.example.com/page?p=value1 已被访问时不会访问 www.example.com/page?p=value2已经去过了吗?

您无法配置它,但根据 documentation,您可以子class 标准重复过滤器 class 并覆盖它的 request_fingerprint 方法。

这没有经过测试,但应该可以。首先 subclass 标准重复过滤器 class(例如 dupefilters.py):

from w3lib.url import url_query_cleaner
from scrapy.dupefilters import RFPDupeFilter
from scrapy.utils.request import request_fingerprint

class MyRFPDupeFilter(RFPDupeFilter):

    def request_fingerprint(self, request):
        new_request = request.replace(url=url_query_cleaner(request.url))
        return request_fingerprint(new_request)

DUPEFILTER_CLASS 设置为 settings.py 中的 class:

DUPEFILTER_CLASS = 'myproject.dupefilters.MyRFPDupeFilter'