在Python中从XBRL文件提取财务报表信息?
我正在尝试解析XBRL文件并获取信息,发现有一些开源的Python库可以处理XBRL文件。不过,这些库的使用说明似乎不太齐全。我调查过的库有:
- Arelle: https://arelle.readthedocs.io/en/2.25.2/
- Py-xbrl: https://py-xbrl.readthedocs.io/en/latest/usage.html#offline
- Brel*: https://brellibrary.github.io/brel/
*由于一些原因,我现在无法使用Brel(主要是因为它需要Python版本大于等于3.10)。
不过,其他的库似乎不支持让我在离线状态下解析下载的XBRL文件。我下载的XBRL文件的结构如下(以苹果公司的SEC文件为例):
aapl-20200926
|
+-- aapl-20200926.xsd
+-- aapl-20200926_cal.xml
+-- aapl-20200926_def.xml
+-- aapl-20200926_lab.xml
+-- aapl-20200926_pre.xml
+-- aapl-20200926_htm.xml
我知道这不是StackOverflow的典型用途,但有没有人知道我该如何在Python脚本中解析上述结构的XBRL文件(而不是从网上链接解析)?我觉得可以通过Arelle和Python API,或者在py-xbrl中实现,但到目前为止我还没有找到方法。
1 个回答
开始使用Arelle的最简单方法是从美国证券交易委员会(SEC)下载完整的文件ZIP包。虽然在你提到的页面上没有直接的链接,但你可以打开iXBRL文件,然后选择菜单中的“保存XBRL ZIP文件”。或者,你也可以直接把-index.htm
替换成-xbrl.zip
来获取文件:
https://www.sec.gov/Archives/edgar/data/320193/000032019320000096/0000320193-20-000096-xbrl.zip
要开始使用,可以试试这个命令行:
python3 $HOME/Arelle/arelleCmdLine.py -v \
-f 0000320193-20-000096-xbrl.zip \
--plugins 'validate/EFM|saveLoadableOIM' \
--saveLoadableOIM=aapl.json
这条命令会把你下载的文件转换成xBRL-JSON格式,并保存为aapl.json
。
为了处理SEC的文件,你需要使用validate/EFM
插件,因为它们使用了一些特殊的转换。
saveLoadableOIM
功能则是为了启用xBRL-JSON的功能。
如果你想用Python开始,这里有一个相对简单的脚本,可以输出报告中的所有信息:
import sys
from arelle import Cntlr, PluginManager
from arelle.ModelFormulaObject import FormulaOptions
import arelle.FileSource
class ArelleLoader(Cntlr.Cntlr):
def __init__(self):
super().__init__(hasGui=False)
PluginManager.addPluginModule("validate/EFM")
PluginManager.reset()
self.modelManager.loadCustomTransforms()
self.modelManager.formulaOptions = FormulaOptions()
self.startLogging(logFileName="logToStdErr",
logFormat="[%(messageCode)s] %(message)s - %(file)s",
logLevel="DEBUG",
logRefObjectProperties=True,
logToBuffer=False
)
def loadReport(self, f):
fs = arelle.FileSource.openFileSource(f, self)
model = self.modelManager.load(fs)
for fact in model.facts:
print("%s: %s" % (fact.concept.name, fact.value))
xbrl = ArelleLoader()
xbrl.loadReport(sys.argv[1])
处理这个文件时,你需要先解压文件,然后把.htm
文件输入进去:
python3 arelleSample.py aapl/aapl-20200926.htm
ModelFact
对象有很多属性和方法。你可以查看这段代码,它来自Inline XBRL查看器插件,能帮助你了解可以做些什么。