使用requests抓取电商商品价格无法获取全量HTML数据问题咨询
Ocado圣诞分类页全量商品爬取解决方案
- 问题根因:Ocado该分类页采用懒加载+分页的前端渲染逻辑,直接发送静态GET请求只能拿到首屏渲染的30个商品数据,剩余商品需要触发页面滚动/分页请求才会加载。
方案1:抓包获取后端AJAX接口(推荐)
操作步骤:
- 打开浏览器访问目标页面,按F12打开开发者工具,切换到「网络」面板,筛选「Fetch/XHR」请求
- 手动向下滚动页面触发商品加载,观察新发送的请求,找到返回商品列表数据的接口,这类接口通常会携带
page、offset、limit这类分页参数 - 直接构造接口请求即可批量获取全量商品数据,接口返回的一般是结构化JSON数据,无需解析HTML,效率更高。注意可以适当调整
limit参数值提升爬取效率,不要设置过大避免触发反爬。
- 优化原有请求头:你当前的请求头过于简单,建议补充
User-Agent、Referer、Accept-Language等字段,完全模拟真实浏览器的请求配置,降低被反爬拦截的概率。
方案2:使用无头浏览器模拟用户操作
如果接口加密难以分析,可以用Selenium、Playwright这类自动化工具模拟真实用户操作:
- 启动无头浏览器打开目标页面
- 编写脚本循环模拟页面滚动到底部,每次滚动后等待1-2秒让商品完成加载,直到页面不再出现新的商品、或已加载商品数量达到4879为止
- 加载完成后直接获取完整页面源码,再解析提取价格信息即可
- 该方案无需分析接口,适配性强,但爬取速度比直接请求接口慢。
额外注意事项
- 控制请求频率,添加随机延迟,必要时搭配代理池使用,避免IP被封禁
- 你现有代码中存在拼写错误:
concent = response.text应为content = response.text
内容的提问来源于stack exchange,提问作者Jonhson572
相关产品推荐
相关产品推荐

