配置 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'
是否可以将 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'