我正在尝试在 xbrl 文件中查找特定标记。我最初尝试使用 python-xbrl 包,但这并不完全是我想要的,所以我的代码基于该包中可用的代码。
这是我感兴趣的xbrl部分
<us-gaap:LiabilitiesCurrent contextRef="eol_PE2035----1510-Q0008_STD_0_20150627_0" unitRef="iso4217_USD" decimals="-6" id="id_5025426_6FEF05CB-B19C-4D84-AAF1-79B431731049_1_24">65285000000</us-gaap:LiabilitiesCurrent>
<us-gaap:Liabilities contextRef="eol_PE2035----1510-Q0008_STD_0_20150627_0" unitRef="iso4217_USD" decimals="-6" id="id_5025426_6FEF05CB-B19C-4D84-AAF1-79B431731049_1_28">147474000000</us-gaap:Liabilities>
这是代码
python-xbrl
软件包基于 beautifulsoup4
和其他几个软件包。
liabilities = xbrl.find_all(name=re.compile("(us-gaap:Liabilities)",
re.IGNORECASE | re.MULTILINE))
我获得了 us-gaap:LiabilityCurrent
的值,但我想要 us-gaap:Liability
的值。
现在,一旦找到匹配项,就会存储它。但在很多情况下,由于 xbrl 中的标签格式,它的匹配是错误的。我相信我需要更改 re.compile()
部分才能使其正常工作。
最佳答案
对于使用这种方法来解析 XBRL(或者实际上是任何包含命名空间的 XML),我会非常谨慎。 “us-gaap:负债”是一个 QName,由前缀(“us-gaap”)和本地名称(“负债”)组成。前缀只是完整命名空间 URI 的简写,例如“http://fasb.org/us-gaap/2015-01-31 ”,它由命名空间声明定义,通常位于文档顶部。如果您查看文档顶部,您会看到类似以下内容:
xmlns:us-gaap="http://fasb.org/us-gaap/2015-01-31"
这意味着在本文档的范围内,“us-gaap”被视为完整命名空间 URI。
XML 创建者可以自由使用他们想要的任何前缀,因此不能保证该元素在您遇到的所有文档中实际上都被称为“us-gaap:Liability”。
beautifulsoup4 对命名空间的支持非常有限,因此我不建议将其作为构建 XBRL 处理器的起点。 Arelle 项目可能值得一看,它是一个完整的 XBRL 处理器,并且可以更轻松地执行其他任务,例如查找与分类中的事实相关的标签和其他信息。
关于python - 使用python读取xbrl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33903843/