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

Scrapy技术问题:下载response.body时页面内容不一致求助

解决Scrapy爬取时Response内容与预期不一致的问题

我来帮你排查下这个问题,这种情况在Scrapy爬取实践里挺常见的,咱们一步步拆解可能的原因和解决办法:

1. 检查URL的完整性

你代码里的start_urls和next_page都没有加上http://或https://前缀,Scrapy会把它们当作相对URL处理,导致实际请求的地址可能不是你预期的目标页面。

修正方法:给所有URL添完整的协议头,比如:

def start_requests(self):
    start_urls = [
        "https://www.page.com/results?sort=price",  # 加上https://
    ]
    for url in start_urls:
        yield scrapy.Request(url=url, callback=self.parse)

def parse(self, response):
    # some code
    next_page = "https://www.page.com/results?sort=price&type=12"  # 替换&为&,加上协议头
    yield response.follow(next_page, self.get_models)

2. 修复URL中的转义字符

你next_page里的&是HTML转义后的&,直接用这个URL请求会导致服务器解析参数出错,应该替换成原始的&符号。

3. 排查是否是动态内容渲染问题

如果目标页面是用JavaScript动态加载数据的,Scrapy默认的Request只能获取到静态HTML骨架,无法拿到JS渲染后的内容。

验证方法:打开浏览器的开发者工具(F12),切换到Network面板,刷新页面,看是否有AJAX请求加载实际数据。如果是这种情况,可以:

  • 直接请求AJAX接口获取数据(更高效)
  • 使用Scrapy结合Splash/Playwright等工具渲染动态页面

4. 添加必要的请求头

很多网站会校验User-Agent、Referer等请求头,缺失或不符合规范的话,可能返回反爬页面、空白内容或错误页面。

示例:在请求中添加User-Agent:

yield scrapy.Request(
    url=url,
    callback=self.parse,
    headers={
        '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'
    }
)

5. 检查会话/Cookie是否正常

如果目标页面需要登录或保持会话才能访问完整内容,要确保Scrapy的CookieJar正确处理了会话信息,或者手动在请求中带上必要的Cookie。

另外,你代码里的get_models函数有个小笔误:f.write(resp...应该是f.write(response.text)或者response.body,不过这应该不是导致内容不一致的直接原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:32:28