如何使用BS4提取指定class下无title属性的span标签内的文本
问题修复方案
错误点说明
- BeautifulSoup 初始化参数格式错误
你代码中传入的第二个解析器参数lxml缺少引号,属于语法错误,需要改为字符串格式的'lxml';如果未安装lxml库,也可以替换为Python内置的'html.parser'无需额外安装依赖。
- BeautifulSoup 初始化参数格式错误
- 选择器未过滤带title属性的span
当前选择器.priceValue span会匹配该类名下所有span元素,不符合你筛选无title属性span的需求,需要用CSS伪类:not([title])做属性过滤。
- 选择器未过滤带title属性的span
- 缺少请求头触发反爬
CoinMarketCap有基础反爬校验,直接发起无标识请求会被拦截,返回的不是正常页面内容,无法提取到目标数据,需要补充User-Agent头伪装成浏览器请求。
- 缺少请求头触发反爬
修正后可运行代码
import requests from bs4 import BeautifulSoup s = requests.Session() # 伪装浏览器请求头 headers = { "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36" } url = "https://coinmarketcap.com/currencies/solana/" html = s.get(url, headers=headers) # 修正解析器参数,调整选择器过滤无title属性的span soup = BeautifulSoup(html.text, 'lxml') price = soup.select_one('.priceValue span:not([title])').text print(price)
额外排查建议
如果运行后还是拿不到数据,可以先打印html.text查看返回的页面内容,若返回的是验证页面或403提示,说明触发了更高等级的反爬策略,可以改用无头浏览器工具加载页面获取数据。
内容的提问来源于stack exchange,提问作者user16496922
相关产品推荐
相关产品推荐

