使用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
相关产品推荐
相关产品推荐

