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

使用BeautifulSoup分页爬取Bodybuilding.com会员信息时数据重复问题求助

解决Bodybuilding.com爬取第二页数据重复的问题

嘿,我之前爬类似健身类网站的时候也碰到过这种分页数据重复的坑,来帮你拆解下可能的原因和解决思路:

大概率是这几个原因导致的

  • 分页参数没真正更新:很多网站靠URL里的page参数控制分页,比如?page=2。如果你的第28行代码看起来改了变量,但实际请求的URL还是停留在page=1,那肯定拿到的还是第一页数据。比如你可能只在初始化时给page_url赋值了一次,循环里没重新拼接新的页码。
  • 网站用了动态加载(AJAX/JS):Bodybuilding.com这类流量大的网站,大概率是用JavaScript异步加载分页内容的。你直接请求页面静态HTML的话,哪怕改了页码参数,返回的还是第一页的初始内容,第二页的数据是之后通过AJAX接口拉取的。这种情况就得抓包找真实的API接口,而不是硬啃页面HTML。
  • 变量作用域搞混了:如果第28行的变量是全局变量,或者在循环里没正确重置,也会一直用第一页的参数。比如你定义的current_page变量没在每次循环里递增,那拼出来的URL永远都是第一页的。

给你几个排查和修复的步骤

  1. 先看请求URL对不对:在代码里加个打印,把每次请求的URL输出来,看看第二页的URL是不是真的变成了https://www.bodybuilding.com/members?page=2(或者对应网站的分页格式)。如果还是page=1,那就是变量更新的逻辑有问题。
  2. 抓包找真实请求:打开浏览器F12进Network标签,手动点第二页,看看有没有XHR/fetch类型的请求。要是有,那个请求的URL和参数才是你该爬的目标——比如可能是个返回JSON的API,直接请求这个接口就能拿到正确的分页数据了。
  3. 检查变量更新逻辑:确认第28行的变量是在每次循环里重新计算的。比如原本你可能是这么写的(错误示范):
page_url = "https://www.bodybuilding.com/members?page=1"
for page_num in range(1, 3):
    # 这里没更新page_url,一直请求第一页
    resp = requests.get(page_url)
    # 解析数据...

改成这样就对了:

for page_num in range(1, 3):
    page_url = f"https://www.bodybuilding.com/members?page={page_num}"  # 每次循环重新拼URL
    resp = requests.get(page_url, headers={"User-Agent": "你的浏览器UA"})
    # 解析数据...

另外提一句,Bodybuilding.com有反爬机制,记得加个合理的User-Agent,必要时给请求加个1-2秒的延迟,别猛刷,不然容易被封IP。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:59:44