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

Scrapy遇302重定向后URL未更新,无法获取目标跳转链接

解决Scrapy获取Google新闻RSS最终重定向URL的问题

核心原因及对应解决方案

1. Google新闻跳转依赖JavaScript,而非HTTP重定向

Google新闻的中间链接通常不是通过HTTP 3xx状态码直接跳转,而是靠页面内的JS逻辑完成跳转。Scrapy默认不执行JS,所以即使返回200状态码,也无法自动跳转到目标页面。你需要手动解析页面里的跳转链接:

  • 先查看响应HTML结构,找类似<a id="jump-link" href="目标URL">的跳转节点,或者包含跳转地址的meta标签、脚本内容。
  • 示例解析代码:
def parse(self, response):
    # 根据实际页面结构调整XPath或CSS选择器
    target_url = response.xpath('//a[contains(@class, "article-link")]/@href').get()
    if target_url:
        # 发起请求获取目标页面内容
        yield scrapy.Request(target_url, callback=self.parse_target_page)

2. 重定向配置的正确用法

如果是HTTP重定向但配置没生效,检查以下两点:

  • dont_redirect是单个请求的meta参数,不是全局设置。要在请求里明确指定:
yield scrapy.Request(google_rss_url, meta={'dont_redirect': True}, callback=self.handle_redirect)

然后在回调函数里手动提取Location头:

def handle_redirect(self, response):
    if response.status == 302:
        target_url = response.headers.get('Location').decode('utf-8')
        yield scrapy.Request(target_url, callback=self.parse_target_page)
  • handle_httpstatus_list需要包含302状态码,可在settings.py全局设置:
handle_httpstatus_list = [302]

或在单个请求的meta里指定。

3. 检查请求的User-Agent

Google会验证请求的UA标识,Scrapy默认UA可能被识别为爬虫,导致返回的页面结构异常(不触发跳转)。在settings.py里设置真实浏览器UA:

USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'

4. 用工具执行JavaScript(极端情况)

如果页面完全依赖JS渲染跳转,上述方法无效的话,可集成JS执行工具:

  • 使用scrapy-playwright插件:在请求里启用playwright=True,让浏览器渲染页面后获取最终URL:
yield scrapy.Request(google_rss_url, meta={'playwright': True}, callback=self.parse)
  • 或使用Scrapy-Splash,配置Splash服务后渲染页面再解析跳转链接。

内容的提问来源于stack exchange,提问作者rish_hyun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:18:29