個人的な作業用です。
総務省APIなんかではXMLでレスポンスを取得できます。このXMLを解析する方法をまとめておきます。週明け時間が空いた時に仕事で使う予定。
総務省APIのサンプルコードに社会・人口統計を取得する方法が書いてありまして、叩くと以下の様なXMLが返ってきます。
<?xml version="1.0" encoding="UTF-8" standalone="true"?>
<GET_STATS_DATA xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://api.e-stat.go.jp/rest/2.0/schema/GetStatsData.xsd">
<RESULT>
<STATUS>0</STATUS>
<ERROR_MSG>正常に終了しました。</ERROR_MSG>
<DATE>2016-09-04T21:28:09.920+09:00</DATE>
</RESULT>
<PARAMETER>
<LANG>J</LANG>
<STATS_DATA_ID>C0020050213000</STATS_DATA_ID>
<NARROWING_COND>
<CODE_CAT01_SELECT>#A03503</CODE_CAT01_SELECT>
</NARROWING_COND>
<DATA_FORMAT>X</DATA_FORMAT>
以下省略
これをurllibモジュールを使って取得してきて、xmlモジュールを使って要素にアクセスするという感じ。古いAPIだとJSON出力ない場合もあるので。
APIから取り込み
これはいろんなところに書いてありますし、公式ドキュメント見たら色々書いてあります。総務省APIのエンドポイントURLを使いますが、アプリケーションIDとかはログインして取得してください。
import urllib
url = 'http://api.e-stat.go.jp/rest/2.0/app/XXXXXXXXXXXX'
req = urllib.request.Request(url)
with urllib.request.urlopen(req) as response:
XmlData = response.read()
これでXmlDataにXMLのテキストデータが格納されます。
XMLの解析
XMLモジュールをインポートして解析開始。これも公式ドキュメントに詳しく書いてあります。
import xml.etree.ElementTree as ET
root = ET.fromstring(XmlData)
これだけ。
要素の中身を見てみる
# 最上位階層のタグと中身
print(root.tag,root.attrib)
# 子階層のタグと中身
for child in root:
print(child.tag, child.attrib)
孫要素まで入れたいのならリストやディクショナリ作って書き込むのがいいんですかね。
要素へのアクセス
リストへのアクセスなんかと同じ感じ。
print(root[0][1].text)
とりあえずやりたいことはこれでできそう。