2017-10-04 69 views
1

我使用python和ElementTree访问从EDGAR中抓取的.xml文件列表。我已阅读并重新阅读ElementTree/python.org页面,但我仍不理解如何深入了解数据。我怎么用ElementTree的要达到这样的第一TextBlock中所列出的.xmls使用python和正则表达式解析xbrl以查找TextBlocks

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 

回答

1

的信息找到的TextBlocks不仅在XBRL实例(主.xml文件)。它也位于属于DTS的分类架构文件中。在XML的层次

查找文本块的事实将需要:

  • 通过解析从实例

  • 建筑概念的列表中的所有链接模式和链接库构建DTS从我收集了所有发现的模式以及它们的元数据

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

  • 查找该被关联到使得它通过上述过滤器

  • 潜在地与尺寸处理的概念在XBRL实例的事实仅包括无量纲事实

这将是理论上是可行的,但是在XML级别进行操作并且容易出错是非常复杂和耗费资源的 - 甚至更多的是在XML技术栈之外的命令式语言中使用库(例如XQuery)。事实上,这相当于重新实现了(部分)XBRL处理器,这超出了正则表达式的功能。

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

XBRL技术堆栈仍处于初始阶段,许多处理器仍未在适当的抽象层面处理维度,但如果它继续普及,产品数量应该增加,并且应该变得更加完整和稳定。

+0

吉谢兰感谢您的深入响应。你会碰巧拥有一台最喜欢的XBRL处理器吗?或者推荐一个易于访问的开源软件? –