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

使用BeautifulSoup4抓取Knives下拉菜单子项名称失败,求排查

问题排查:爬取csgoskins.gg Knives下拉菜单返回空的原因及解决

1. 动态渲染导致内容未加载

csgoskins.gg的Knives下拉菜单大概率是JavaScript动态生成的。requests只能获取页面初始HTML源码,而这些下拉子项是页面加载完成后,通过JS从后端接口拉取数据或动态渲染出来的,初始源码里根本不存在这些内容,所以BeautifulSoup自然找不到。

解决办法:

  • 使用selenium或playwright模拟浏览器加载页面,等待JS执行完毕后再抓取完整DOM
  • 打开浏览器开发者工具(F12),切换到Network面板,筛选XHR/Fetch请求,找到加载刀具列表的API接口,直接请求该接口获取数据(这种方式比模拟浏览器更高效)

2. 选择器与实际DOM结构不匹配

你编写的BeautifulSoup选择器可能和页面真实结构不符:

  • 下拉菜单默认处于隐藏状态,子项HTML可能带有display: none等隐藏属性,你的选择器没考虑到这种状态
  • 页面可能使用了动态生成的类名、ID,或者你复制的是下拉菜单展开后的DOM结构,但初始源码里的层级、标签完全不同

解决办法:

  • 在浏览器Elements面板中,右键目标子项标签,选择「Copy > Copy selector」,直接复制精准的CSS选择器用于定位
  • 右键页面选择「查看页面源代码」,检查初始HTML中是否存在目标子项,如果不存在,直接判定为动态渲染问题

3. 请求头缺失触发反爬机制

网站可能会校验请求头中的User-Agent、Referer等字段,requests默认发送的请求头过于简单,服务器可能返回不完整内容或空数据。

解决办法:

  • 给请求添加完整的模拟浏览器请求头,示例代码:
import requests
from bs4 import BeautifulSoup

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'
}
response = requests.get('https://csgoskins.gg', headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 后续使用正确选择器定位

4. 页面加载后DOM结构被重写

部分网站会在页面加载完成后重写DOM结构,你复制的HTML是重写后的最终结构,但requests获取的是重写前的初始结构,两者差异导致定位失败。

解决办法:

  • 对比「页面源代码」和「Elements面板实时DOM」的结构差异,确认是否存在DOM重写情况,若存在则按动态渲染问题处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:54:57