Scrapy中间件process_request设置Referer无效问题求助
问题排查与解决
核心问题:属性拼写错误
你的代码里写错了请求头的属性名,Scrapy中请求头对应的是request.headers(复数形式),而非request.header(单数)。修正后代码如下:
def process_request(self, request, spider): referrer_list = [ 'https://google.com', 'https://amazon.com', 'https://facebook.com' # 其他referrer地址 ] referrer = random.choice(referrer_list) request.headers['Referer'] = referrer # 注意是headers,且键名遵循HTTP头首字母大写规范
额外确认项:中间件是否启用
即使代码修正,如果中间件未在settings.py中注册,process_request方法也不会执行。请检查settings.py中的DOWNLOADER_MIDDLEWARES配置,确保你的中间件被添加且优先级合理(数值越小执行顺序越靠前):
DOWNLOADER_MIDDLEWARES = { '你的项目名.middlewares.你的中间件类名': 543, # 替换为实际的中间件路径和类名 # 其他中间件配置 }
补充说明
HTTP头字段名通常遵循首字母大写规范(如Referer而非referer),虽然Scrapy内部兼容大小写,但规范写法能避免潜在问题。DEFAULT_REQUEST_HEADERS生效是因为它是全局默认配置,会被所有请求继承,而中间件需要同时满足正确注册和代码无误两个条件才能生效。
内容的提问来源于stack exchange,提问作者viltx
相关产品推荐
相关产品推荐

