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无法处理动态加载内容。可尝试两种方案:- 使用
scrapy-splash或playwright等工具渲染页面,获取JS执行后的完整响应; - 抓包定位生成该script标签的API接口,直接请求接口获取JSON数据,跳过页面解析步骤。
- 使用
- Cookie/会话不一致:Scrapy Shell中可能保留了登录或会话Cookie,而爬虫代码未携带,导致返回内容不同。导出Shell中的Cookie信息,在爬虫代码中添加对应Cookie。
- 未察觉的重定向:爬虫请求时发生了重定向,返回的是重定向后的页面而非目标页面。可临时关闭重定向(
REDIRECT_ENABLED=False)测试,或检查response.status、response.url确认是否存在重定向。 - 反爬拦截:网站识别出爬虫请求,返回精简版或伪造页面。尝试添加随机请求延迟、使用代理IP、轮换请求头,降低被识别为爬虫的概率。
内容的提问来源于stack exchange,提问作者Aly Mtsumi
相关产品推荐
相关产品推荐

