使用 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 处理器,可以更轻松地执行其他任务,例如查找标签和其他与分类法中的事实相关的信息。
我正在尝试在 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 处理器,可以更轻松地执行其他任务,例如查找标签和其他与分类法中的事实相关的信息。