使用 python 阅读 xbrl

Reading xbrl with python

我正在尝试在 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:LiabilitiesCurrent 的值,但我想要 us-gaap:Liabilities 的值。 现在,一旦找到匹配项,就会存储它。但在许多情况下,由于 xbrl 中的标记格式,它会出现错误匹配。我认为我需要更改 re.compile() 部分以使其正常工作。

尝试在末尾加上 $ 美元符号,以指示不匹配美元符号后的任何其他内容:

liabilities = xbrl.find_all(name=re.compile("(us-gaap:Liabilities$)",
                          re.IGNORECASE | re.MULTILINE))

我会非常谨慎地使用这种方法来解析 XBRL(或者实际上,任何 XML 其中包含名称空间)。 "us-gaap:Liabilities" 是一个 QName,由前缀 ("us-gaap") 和本地名称 ("Liabilities") 组成。前缀只是一个 shorthand 用于完整的命名空间 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:Liabilities"。

beautifulsoup4 对名称空间的支持非常有限,因此我不建议将其作为构建 XBRL 处理器的起点。可能值得看看 Arelle 项目,它是一个完整的 XBRL 处理器,可以更轻松地执行其他任务,例如查找标签和其他与分类法中的事实相关的信息。