2017-10-04 59 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處理器嗎?或者推薦一個易於訪問的開源軟件? –