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

为何BeautifulSoup无法识别XBRL相关的ix:nonfraction标签?

问题:为什么find_all('ix')找不到<ix:nonfraction>标签?

核心差异与原因

  • 第一个代码里的<ix:nonfraction>是带XML命名空间的标签:ix:是命名空间的前缀,nonfraction才是真正的标签名,和纯<ix>标签完全是两个不同的元素。
  • BeautifulSoup处理带命名空间的XML/HTML时,会将标签解析成(命名空间URI, 标签名)的元组结构。直接用find_all('ix')只会匹配标签名为ix的普通元素,无法匹配带ix:前缀的nonfraction标签。
  • 第二个代码里的<ix>是普通HTML标签,标签名就是ix,所以find_all('ix')能直接命中。

解决方案

1. 直接查找完整标签名

如果目标明确是<ix:nonfraction>,直接用完整标签字符串查找:

from bs4 import BeautifulSoup

text = """
<td style="BORDER-BOTTOM:0.75pt solid #7f7f7f;white-space:nowrap;vertical-align:bottom;text-align:right;">$ <ix:nonfraction name="ecd:AveragePrice" contextref="P01_01_2022To12_31_2022" unitref="Unit_USD" decimals="2" scale="0" format="ixt:num-dot-decimal">97.88</ix:nonfraction>
</td>
"""

soup = BeautifulSoup(text, 'lxml')
ix_tags = soup.find_all('ix:nonfraction')
print(ix_tags)  # 会输出找到的<ix:nonfraction>标签

2. 正则匹配所有ix:前缀的标签

如果要批量查找所有带ix:前缀的标签,用正则表达式匹配标签名:

import re
from bs4 import BeautifulSoup

text = """
<td style="BORDER-BOTTOM:0.75pt solid #7f7f7f;white-space:nowrap;vertical-align:bottom;text-align:right;">$ <ix:nonfraction name="ecd:AveragePrice" contextref="P01_01_2022To12_31_2022" unitref="Unit_USD" decimals="2" scale="0" format="ixt:num-dot-decimal">97.88</ix:nonfraction>
</td>
"""

soup = BeautifulSoup(text, 'lxml')
ix_tags = soup.find_all(re.compile(r'^ix:'))
print(ix_tags)

3. 利用命名空间映射查找(推荐规范做法)

如果文档里声明了ix对应的命名空间URI(通常是http://www.xbrl.org/2003/instance),可以用select方法结合命名空间映射:

from bs4 import BeautifulSoup

text = """
<td style="BORDER-BOTTOM:0.75pt solid #7f7f7f;white-space:nowrap;vertical-align:bottom;text-align:right;">$ <ix:nonfraction name="ecd:AveragePrice" contextref="P01_01_2022To12_31_2022" unitref="Unit_USD" decimals="2" scale="0" format="ixt:num-dot-decimal">97.88</ix:nonfraction>
</td>
"""

soup = BeautifulSoup(text, 'lxml')
# 定义命名空间映射,URI以实际文档声明为准
namespaces = {'ix': 'http://www.xbrl.org/2003/instance'}
ix_tags = soup.select('ix|nonfraction', namespaces=namespaces)
print(ix_tags)

内容的提问来源于stack exchange,提问作者Victor Wang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 06:11:08