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

使用Beautiful Soup解析XBRL时find生效但find_all返回空列表问题

解析XBRL文档中带命名空间的标签

嘿,看来你已经迈出了解析XBRL文档的第一步——用soup.find()拿到了第一个<iic-com:inversionesfinancierasrvcotizada>元素!如果你的目标是获取所有这类标签的内容,或者需要更严谨地处理XBRL的命名空间,这里有几个实用的方法:

1. 直接获取所有匹配元素

既然find()能返回单个结果,换成find_all()就能拿到文档中所有符合条件的标签了:

# 获取所有<iic-com:inversionesfinancierasrvcotizada>元素
all_inv_elements = soup.find_all('iic-com:inversionesfinancierasrvcotizada')

# 遍历处理每个元素
for elem in all_inv_elements:
    # 比如提取子标签<iic-com:codigoisin>的文本内容和属性
    isin_code = elem.find('iic-com:codigoisin').text
    context_ref = elem.find('iic-com:codigoisin')['contextref']
    print(f"ISIN代码: {isin_code}, 上下文引用: {context_ref}")

2. 规范处理XML命名空间

XBRL是带命名空间的XML,<iic-com:是命名空间前缀,对应的完整URI可以在文档的根元素里找到(通常是类似xmlns:iic-com="http://xxx..."的声明)。用命名空间映射来查找会更严谨,避免标签名冲突:

# 替换成你从文档中找到的真实命名空间URI
namespace_map = {'iic-com': 'http://your-actual-namespace-uri'}

# 结合命名空间查找所有元素
all_inv_elements = soup.find_all('iic-com:inversionesfinancierasrvcotizada', namespaces=namespace_map)

小技巧

  • 如果元素内容太长显示不全,用prettify()格式化输出,方便查看完整结构:
print(all_inv_elements[0].prettify())
  • 还可以结合属性筛选精准定位元素,比如找特定contextref的子标签:
target_isin = soup.find('iic-com:codigoisin', contextref="FIM_T12018_V86902186_ia")
print(target_isin.text)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:39:53