Skip to main content
 首页 » 编程设计

python之使用 python 和正则表达式解析 xbrl 以查找 TextBlocks

2025年02月15日27mfryf

我正在使用 python 和 ElementTree 访问从 EDGAR 抓取的 .xml 文件列表。我已经阅读并重新阅读了 ElementTree/python.org页面,但我仍然不了解如何深入了解数据。我应该如何使用 ElementTree 来获取类似于所列 .xml 的第一个 TextBlock 的内容

import import re 
from urllib2 import urlopen 
import requests 
import xml.etree.ElementTree as ET 
full_xml =['https://www.sec.gov/Archives/edgar/data/1593001/000121390017010242/ngtf-20170630.xml', 'https://www.sec.gov/Archives/edgar/data/13573/000143774917016692/bwla-20170702.xml', 'https://www.sec.gov/Archives/edgar/data/1652871/000165287117000030/none-20170630.xml', 'https://www.sec.gov/Archives/edgar/data/1434674/000154972717000042/chnd-20170630_cal.xml', 'https://www.sec.gov/Archives/edgar/data/1083922/000130841117000030/arao-20170331.xml'] 
for xml in full_xml: 
    file = urllib2.urlopen(xml) 
    tree = ET.parse(file) 
    root = tree.getroot() 
    print root 

请您参考如下方法:

查找文本 block 的信息不仅在 XBRL 实例(主 .xml 文件)中。它也在属于 DTS 的分类架构文件中。

在 XML 级别查找文本 block 事实需要:

  • 通过解析来自实例的模式和链接库的所有链接来构建 DTS

  • 构建从找到的所有模式中收集的概念及其元数据的列表

  • 按类型过滤这些概念(您想找到类型为 nonnum:textBlockItemType 的概念 -- 命名空间敏感的比较)

  • 在 XBRL 实例中查找与通过上述过滤器的概念相关联的事实

  • 可能处理维度以仅包含无维度的事实

这在理论上是可行的,但在 XML 级别上这样做会非常复杂且耗费资源,并且容易出错——更何况在 XML 技术堆栈之外的命令式语言中使用库 (如 XQuery)。事实上,这相当于重新实现(部分)XBRL 处理器,这超出了正则表达式的范围。

一般来说,我强烈建议使用现有的 XBRL 处理器——那里有开源处理器,有些甚至可能与 python 兼容——上面的逻辑已经实现,使用 API(例如、REST 或 python)来浏览概念、选择文本 block 并使用适当的数据模型查找事实。

XBRL 技术堆栈仍处于首次亮相阶段,许多处理器仍未在适当的抽象级别处理维度,但如果它继续流行,产品数量应该会增加,它们应该会变得更加完整和稳定。