Scrapy脚本运行报错:REQUEST_FINGERPRINTER_IMPLEMENTATION设置弃用警告
解决Scrapy中REQUEST_FINGERPRINTER_IMPLEMENTATION弃用警告问题
警告原因
REQUEST_FINGERPRINTER_IMPLEMENTATION设置的2.6值是Scrapy旧版本的请求指纹实现,新版本已弃用该值——即便升级Scrapy,若项目或全局配置中仍保留该旧值,警告依然会触发。
解决方案
1. 修改项目配置文件
找到你的Scrapy项目中的settings.py文件,搜索是否存在以下配置行:
REQUEST_FINGERPRINTER_IMPLEMENTATION = '2.6'
将其替换为新版本的实现:
REQUEST_FINGERPRINTER_IMPLEMENTATION = '3.0'
或者直接删除该行,因为Scrapy 2.6+版本默认使用3.0的指纹实现。
2. 在Spider类中显式配置
如果找不到配置文件中的对应行,可直接在你的Spider类内添加custom_settings属性强制指定新实现:
custom_settings = { 'REQUEST_FINGERPRINTER_IMPLEMENTATION': '3.0' }
顺带优化你的爬取脚本
你的脚本存在两个影响功能的问题,一并修正:
- Google搜索结果的链接是跳转格式(如
/url?q=真实地址&...),直接提取href无法得到真实URL,需解析处理; allowed_domains仅设置为google.com会导致后续爬取医疗网站时被拦截,需注释或修改该配置。
修正后的完整脚本:
import scrapy from urllib.parse import urlparse, parse_qs class HealthcareSpider(scrapy.Spider): name = 'healthcare_spider' # 若要爬取其他医疗网站,需注释或修改allowed_domains # allowed_domains = ['google.com'] start_urls = ['https://www.google.com/search?q=healthcare+websites+usa'] # 配置新的请求指纹实现,消除警告 custom_settings = { 'REQUEST_FINGERPRINTER_IMPLEMENTATION': '3.0' } def parse(self, response): # 提取Google搜索结果 results = response.css('div.g') for result in results: raw_url = result.css('a::attr(href)').get() if raw_url and raw_url.startswith('/url?'): # 解析得到真实目标URL parsed = urlparse(raw_url) real_url = parse_qs(parsed.query).get('q', [None])[0] if real_url and 'healthcare' in real_url.lower(): yield { 'url': real_url, } # 翻页逻辑 next_page_url = response.css('a#pnnext::attr(href)').get() if next_page_url: yield scrapy.Request(response.urljoin(next_page_url), callback=self.parse)
内容的提问来源于stack exchange,提问作者Edgar
相关产品推荐
相关产品推荐

