Python使用BeautifulSoup爬虫遇CSS选择器报错及使用问题求助
报错解决
你当前触发语法错误的原因有两个:
- ID选择器格式错误:
#和ID名col-body之间多了多余空格,CSS选择器中#必须紧跟ID名,空格会被识别为后代选择符,触发语法不合法的报错 - 混入HTML转义字符:选择器里的
>是大于号>的HTML转义编码,需要替换为原生的>才符合CSS选择器语法
修正后的代码如下:
import requests from bs4 import BeautifulSoup html = requests.get('https://www.cryptocompare.com/coins/btc/influence/USDT').text soup = BeautifulSoup(html, 'html.parser') # 已修正选择器的空格和转义问题 total_commit = soup.select_one('#col-body > div > social-influence > div.row.row-zero.influence-others > div:nth-child(2) > div > div > div > div.col-md-3.td-col.brd-right > div > div.repo-tag > span > span > a').text print(total_commit)
注意:该页面目标元素是JS动态渲染生成的,requests请求拿到的静态HTML中不存在对应节点,修正选择器后仍会返回None,后续需要改用支持JS渲染的工具(如Selenium、Playwright)或者直接抓后端接口获取数据
浏览器复制CSS选择器的正确使用方法
- 基础清理:复制选择器后首先删除前后多余空格,把所有转义生成的
>替换为>,检查#和ID名、.和类名之间是否有多余空格,确保符号和名称紧连 - 优化选择器稳定性:浏览器默认复制的选择器通常会带大量层级依赖(如
nth-child),页面结构稍有变动就会失效,建议手动精简为靠稳定ID、自定义属性、唯一类名定位的短选择器,减少层级嵌套 - 分步验证:不要直接使用长选择器定位,可以逐层测试:先验证外层节点是否能被选中,再一步步向内层排查,方便区分是选择器语法错误还是目标元素不存在于静态HTML中
内容的提问来源于stack exchange,提问作者lexi
相关产品推荐
相关产品推荐

