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

Scrapy Shell与爬虫执行结果不一致的原因排查咨询

问题分析与解决思路

核心问题

在Scrapy Shell中通过XPath //script[@id='product_data_json']/text() 可正常定位目标script标签并提取图片链接:

>>> data1 = response.xpath("//script[@id='product_data_json']/text()").extract_first()
data = json.loads(data1)
data['image']
['https://i.otto.de/i/otto/3bd46022-3def-5f08-b4d9-207fcfbada7b/aniston-selected-jerseykleid-mit-farbenfrohem-muster.jpg?$formatz$', 'https://i.otto.de/i/otto/c50a5766-5e83-5670-9d38-5585d6bbbdca/aniston-selected-jerseykleid-mit-farbenfrohem-muster.jpg?$formatz$', 'https://i.otto.de/i/otto/e7dbf482-4827-5e12-a60a-82cd19a936cc/aniston-selected-jerseykleid-mit-farbenfrohem-muster.jpg?$formatz$']

但在爬虫代码(包括新建的默认配置项目)中使用相同XPath无法定位该标签,调用inspect_response(response, self)查看发现响应中完全不存在目标script标签及其他可提取图片的标签。

可能原因与解决思路

  • 请求头差异:Scrapy Shell默认请求头与爬虫代码不一致,网站可能依据请求头返回不同内容。检查并统一请求头,重点模拟真实浏览器的User-Agent、Accept等字段。
  • 动态内容渲染:目标script标签由JavaScript动态生成,Scrapy默认的HtmlResponse无法处理动态加载内容。可尝试两种方案:
    1. 使用scrapy-splash或playwright等工具渲染页面,获取JS执行后的完整响应;
    2. 抓包定位生成该script标签的API接口,直接请求接口获取JSON数据,跳过页面解析步骤。
  • Cookie/会话不一致:Scrapy Shell中可能保留了登录或会话Cookie,而爬虫代码未携带,导致返回内容不同。导出Shell中的Cookie信息,在爬虫代码中添加对应Cookie。
  • 未察觉的重定向:爬虫请求时发生了重定向,返回的是重定向后的页面而非目标页面。可临时关闭重定向(REDIRECT_ENABLED=False)测试,或检查response.status、response.url确认是否存在重定向。
  • 反爬拦截:网站识别出爬虫请求,返回精简版或伪造页面。尝试添加随机请求延迟、使用代理IP、轮换请求头,降低被识别为爬虫的概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 08:47:03