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

为何用Beautiful Soup的select('#author')返回空列表,而span#author可行?

为什么select('#author')返回空列表,而select('span#author')有效?

这大概率是因为你创建BeautifulSoup对象时使用了XML解析器(比如'xml'),而非HTML解析器(比如'html.parser'、'lxml'或'html5lib')。

具体原因:

  • 在HTML规范里,id属性是具有特殊语义的唯一标识符,CSS选择器#author就是专门匹配带有id="author"的HTML元素的规则。
  • 但XML解析器不会把id属性当作特殊属性处理,它只会将其视为普通的元素属性。此时,#author这种依赖HTML语义的CSS选择器就无法被解析器识别,自然返回空列表。
  • 而span#author这种写法,本质是标签选择器 + 属性选择器的组合(等价于span[id="author"]),XML解析器可以识别这种基于标签和属性的匹配逻辑,所以能正确定位到目标元素。

验证与解决:

先检查你创建BeautifulSoup对象的代码,如果是类似这样的:

exampleSoup = BeautifulSoup(html_content, 'xml')

改成使用HTML解析器即可:

# 推荐用lxml或html5lib,兼容性更强
exampleSoup = BeautifulSoup(html_content, 'lxml')
# 或者用Python内置的解析器
exampleSoup = BeautifulSoup(html_content, 'html.parser')

修改后再调用exampleSoup.select('#author'),就能正常返回目标元素了。

另外,也有可能是你使用的BeautifulSoup版本过于老旧(比如低于4.4.0),旧版本对CSS选择器的支持存在缺陷。建议升级到最新版本:

pip install --upgrade beautifulsoup4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:39:48