使用bs4抓取天赋构建列表为空的问题排查求助
问题排查与解决建议
1. 先确认请求是否成功获取有效页面内容
- 打印
response.status_code,确认返回值为200。若返回403/404等状态码,说明请求被网站拦截,需添加请求头模拟浏览器:headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' } response = requests.get('https://www.icy-veins.com/heroes/hogger-talents', headers=headers) - 打印
response.text的前1000字符,检查是否拿到真实页面内容,而非反爬提示页(如验证码、JS启用提示)。
2. 核对元素选择器是否匹配当前页面结构
网站页面结构可能更新,需重新定位元素:
- 打开目标页面按F12调出开发者工具,用元素选择器定位天赋构建的父容器:比如天赋构建通常在带特定class的
div/section标签内(如talent-build-container类) - 确认天赋构建名称的标签层级:若找不到
h3,可能标签已改为h2或带特定class的h3(如build-title),需调整选择器
3. 排查是否为JavaScript动态加载内容
如果天赋数据是通过JS渲染的,直接用requests+bs4无法获取:
- 打开开发者工具「网络」标签,刷新页面后筛选「XHR/Fetch」请求,找到返回天赋数据的接口,直接请求接口获取数据更稳定
- 若必须渲染页面,可改用
selenium或playwright模拟浏览器加载JS后再解析
4. 分步调试定位问题
- 逐步打印中间结果:先打印所有匹配的父容器列表,再在每个容器内单独查找名称、等级天赋元素,定位哪一步返回空值
- 尝试用
bs4的select方法替代find_all,支持CSS选择器更灵活,例如:soup.select('div.talent-build-group > div.build-item')
内容的提问来源于stack exchange,提问作者Poggers
相关产品推荐
相关产品推荐

