如何用BeautifulSoup抓取无限滚动网站数据?以耐克男鞋页面为例
问题原因
- 耐克官网的商品列表页采用懒加载+分页加载逻辑,首次打开页面只会静态渲染前24个商品,剩余商品在用户向下滚动页面时,通过前端异步请求接口加载,不会包含在首次请求返回的HTML内容里
- 你当前使用的
requests库只能获取首次请求的静态HTML内容,自然只能解析到前24个商品
解决方案
方案1:直接调用商品列表接口(推荐,效率更高)
- 打开浏览器开发者工具(F12),切换到「网络」标签,筛选「Fetch/XHR」请求
- 手动向下滚动页面触发加载更多商品,找到请求前缀包含
product或者search的异步请求,查看请求参数:一般会带有offset(偏移量)、count(单次返回数量)两个核心参数,首次请求offset为0返回24个,下一次offset=24,以此类推 - 直接构造该接口的请求,调整offset参数循环请求即可拿到全量商品数据,接口返回的多为JSON格式,无需解析HTML,提取效率更高
- 注意构造请求时要携带完整的请求头,包括
User-Agent、Referer等,避免被反爬拦截,同时控制请求频率,避免IP被限制
方案2:使用自动化工具模拟页面滚动
如果你不想找接口,可以用Selenium、Playwright等自动化测试工具模拟真实用户操作:
- 启动无头浏览器打开目标页面
- 编写脚本模拟向下滚动的操作,每次滚动后等待几秒让商品加载完成,直到页面不再加载新商品
- 拿到加载完成后的完整页面HTML,再传给BeautifulSoup解析即可拿到所有商品信息
代码优化提示
你当前的代码只做了一次初始页面请求,需要结合上面两种方案调整逻辑,才能拿到全量数据。
内容的提问来源于stack exchange,提问作者user17351571
相关产品推荐
相关产品推荐

