如何使用BeautifulSoup抓取指定URL页面中的所有价格数据
问题原因及修复方案
1. 代码语法错误
你调用的查找方法名拼写错误,BeautifulSoup的批量查找方法是find_all,不是findall,拼写错误会直接导致方法调用失败返回空值。
2. 缺少反爬请求头
目标站点有基础反爬机制,无标识的裸请求会被拦截,返回的不是正常商品页面内容,因此解析不到对应元素,需要在请求中添加User-Agent头模拟浏览器访问。
3. 解析器优化(可选)
Python内置的html.parser对部分不规范HTML结构的解析容错性较低,可以换成lxml解析器提升解析成功率,需要提前执行pip install lxml安装依赖。
修正后可运行代码
import bs4 import requests url = 'https://skinport.com/market?cat=Knife&item=Doppler&type=M9+Bayonet&sort=price&order=asc' # 构造模拟浏览器的请求头 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' } # 发送带请求头的请求 r = requests.get(url, headers=headers) # 校验请求是否成功 r.raise_for_status() soup = bs4.BeautifulSoup(r.text, "lxml") price_elements = soup.find_all("div", {"class": "Tooltip-link"}) # 提取价格文本输出 price_list = [item.text.strip() for item in price_elements] print("抓取到的价格如下:") for price in price_list: print(price)
额外说明
- 如果运行后仍返回空列表,说明目标站点的价格数据是前端JS动态渲染的,静态请求无法拿到渲染后的内容,这种情况需要改用
selenium、playwright等动态渲染工具抓取,也可以尝试查找站点的公开数据接口直接请求。 - 抓取数据请遵守目标站点的使用协议,避免高频请求触发反爬限制。
内容的提问来源于stack exchange,提问作者user6332747
相关产品推荐
相关产品推荐

