如何用BeautifulSoup从Buff页面解析指定CSGO皮肤价格?
解决Buff CSGO商品页面解析问题
问题根源
直接通过requests.get()请求你提供的页面URL,得到的是静态HTML框架,页面上的商品数据是通过JavaScript动态加载的(AJAX请求),所以BeautifulSoup无法从静态源码中提取到商品信息。
正确方案:抓取动态数据接口
Buff的商品列表数据来自专门的API接口,我们可以直接请求这个接口获取JSON格式的商品数据,无需解析HTML。
代码示例
import requests # 商品列表API接口,page_num控制页码,page_size控制每页数量 api_url = 'https://buff.163.com/api/market/goods?game=csgo&page_num=1&page_size=20&sort_by=price.desc&sort_type=default&tab=selling' # 请求头,模拟浏览器访问,避免被拦截 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' } # 发送请求获取JSON数据 response = requests.get(api_url, headers=headers) data = response.json() # 遍历商品列表,找到目标商品 target_item_name = 'StatTrak™ MAG-7 | Cobalt Core (Well-Worn)' for item in data['data']['items']: if item['name'] == target_item_name: print(f"商品名称: {item['name']}") print(f"当前价格: {item['price']} 元") break else: print("未找到目标商品")
代码说明
- API接口参数:
page_num是页码,tab=selling对应“出售”标签,game=csgo指定游戏为CSGO,其他参数可根据需求调整(比如sort_by控制排序方式)。 - 请求头:必须带上
User-Agent,否则Buff的服务器会拒绝请求。 - 数据解析:接口返回的JSON中,
data['items']是商品数组,每个元素包含商品名称、价格、链接等详细信息,直接根据name字段匹配目标商品即可。
原代码无效原因
你原代码中用soup.find_all('li')只能找到静态HTML里的<li>标签,而商品对应的<li>元素是页面加载完成后由JavaScript动态生成的,静态源码中不存在这些元素,所以无法提取到数据。
内容的提问来源于stack exchange,提问作者Artem Gorbunov
相关产品推荐
相关产品推荐

