有価証券報告書のxbrlとかMB単位のやたら力強いxmlで、
まともに殴り合うとつらすぎるので、xpathで必要なところだけ抜き出す話。
xpathはこのあたりがわかりやすい。
https://qiita.com/rllllho/items/cb1187cec0fb17fc650a
下準備
サンプルのターゲットはこいつ。
https://www.mizuho-fg.co.jp/investors/financial/report/yuho_201603/data/xbrl_mhbk160627.zip
~/Downloads
に落としてきてzipを展開しておく。
欲しいところのnamespaceとタグ名は事前に調べておかないとならない。
ここは手作業。
今回は jpcrp_cor
名前空間の、タグ名に BusinessResults
が含まれる要素を抜き出してみる。
namespace
<jpcrp_cor:OrdinaryIncomeSummaryOfBusinessResults ...
みたいなタグ名の、コロンの左側の部分がnamespace。
これは要素名と別に指定が必要。
namespaceはroot要素 <xbrli:xbrl>
の属性にくっついてる。
jpcrp_cor
の場合はこれ。
xmlns:jpcrp_cor="http://disclosure.edinet-fsa.go.jp/taxonomy/jpcrp/2013-08-31/jpcrp_cor"
で、こう。
# coding: utf-8
import os
import lxml.etree
file = '%s/Downloads/xbrl_mhbk160627/PublicDoc/jpcrp030000-asr-001_E03532-000_2016-03-31_01_2016-06-27.xbrl' % os.environ["HOME"]
doc = lxml.etree.parse(file)
ns = {
"jpcrp_cor": "http://disclosure.edinet-fsa.go.jp/taxonomy/jpcrp/2013-08-31/jpcrp_cor",
}
# 'BusinessResults' が含まれてるタグ名で引っ掛ける
xp = "//*[contains(name(), 'BusinessResults')]"
elems = doc.xpath(xp, namespaces=ns)
for x in elems:
print(x.text)