You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 23:36:23