如何用Python离线解析本地多文件结构的XBRL财务报表?
离线解析本地XBRL文件(Arelle & Py-xbrl实现)
一、使用Arelle Python API解析
Arelle支持直接加载本地XBRL实例文件,并自动识别同目录下的关联链接库(cal、def、lab、pre文件)和模式文件(xsd),只需确保所有文件处于同一目录即可。以下是完整脚本示例:
from arelle import Cntlr, ModelManager # 初始化控制器和模型管理器 cntlr = Cntlr.Cntlr() model_manager = ModelManager.initialize(cntlr) # 设置离线模式,避免自动联网获取依赖 model_manager.disclosureSystem.offline = True # 加载本地XBRL实例文件(替换为你的实例文件路径,如aapl-20200926_htm.xml) instance_path = "./aapl-20200926/aapl-20200926_htm.xml" model = model_manager.load(instance_path) # 遍历并提取财务事实数据 for fact in model.facts: # 获取元素名称、数值、单位和期间 element_name = fact.qname.localName value = fact.value unit = fact.unitID if fact.unit else "N/A" period = fact.period.strftime("%Y-%m-%d") if fact.period else "N/A" print(f"{element_name}: {value} ({unit}) - {period}") # 清理资源 model_manager.close() cntlr.close()
关键说明:
- 确保所有XBRL关联文件(xsd、cal、def等)与实例文件处于同一目录,Arelle会自动解析这些依赖。
- 设置
disclosureSystem.offline = True强制离线模式,防止工具尝试联网获取缺失的资源。 model.facts包含了所有XBRL实例中的财务事实,可根据需求筛选特定元素(如通过fact.concept.id匹配报表项目)。
二、使用Py-xbrl解析
Py-xbrl的OfflineLoader类支持离线加载本地XBRL文件,可直接将所有文件放在同一目录下让工具自动识别依赖。以下是实现示例:
from py_xbrl import XBRLParser, OfflineLoader # 初始化解析器和离线加载器 parser = XBRLParser() loader = OfflineLoader() # 加载本地XBRL实例文件(替换为你的实例文件路径) instance_path = "./aapl-20200926/aapl-20200926_htm.xml" xbrl = parser.parse(instance_path, loader) # 提取财务数据:筛选数值型概念并获取对应信息 for concept in xbrl.concepts: if concept.is_numeric(): value = xbrl.get_value(concept) period = xbrl.get_period(concept) print(f"{concept.name}: {value} - {period}")
关键说明:
OfflineLoader会自动在实例文件所在目录查找关联的模式和链接库文件,无需额外配置路径。- 通过
concept.is_numeric()可快速筛选出数值型财务数据,xbrl.get_value()和xbrl.get_period()分别获取对应数值和报告期间。 - 若遇到依赖文件查找失败,可确认所有XBRL相关文件已放入同一目录,或通过
OfflineLoader的参数手动指定依赖文件路径。
内容的提问来源于stack exchange,提问作者Pmmoks
相关产品推荐
相关产品推荐

