• 締切済み

PythonのAPI使用について

PythonでAPIを用いて情報を取得する練習をしています。 ---------------------------------------------- import urllib2, sys import xml.etree.ElementTree as etree try: railcode = sys.argv[1] except: railcode = '11302' resp = urllib2.urlopen('http://www.ekidata.jp/api/l/%s.xml'%railcode).read() output = {} tree = etree.fromstring(resp) ---------------------------------------------- 山手線のデータを取得し、tree構造を作ろうとしています。 おそらく、treeの中に'ekidata'があり、'line'と'station'のそれぞれのデータが入っていると思うのですが、それぞれのデータをどうやって表示させるのかがわかりません。 ---------------------------------------------- for e in tree: print e print e.tag print e.text ---------------------------------------------- としてみたところ、 ---------------------------------------------- <Element 'line' at 0x10caa0790> line <Element 'station' at 0x10caa0a50> station <Element 'station' at 0x10caa0bd0> station <Element 'station' at 0x10caa0d50> station <Element 'station' at 0x10caa0ed0> station <Element 'station' at 0x10caa5090> station (続く) ---------------------------------------------- のようになり ---------------------------------------------- for e in tree[1]: print e print e.tag print e.text ---------------------------------------------- のようにtreeの一つを選択すると ---------------------------------------------- <Element 'station_cd' at 0x10a06ba90> station_cd 1130201 <Element 'station_g_cd' at 0x10a06bad0> station_g_cd 1130201 <Element 'station_name' at 0x10a06bb10> station_name 大崎 <Element 'lon' at 0x10a06bb50> lon 139.728439 <Element 'lat' at 0x10a06bb90> lat 35.619772 ---------------------------------------------- のようにそれぞれの情報がでてきます。 各treeに収納されているであろうそれぞれの駅のデータから、駅名だけを取り出したりしたいと考えています。 treeの構造がわかっていないことが大きいかもしれません。 何かヒントを与えていただければうれしいです。 よろしくお願いします

みんなの回答

回答No.1

マニュアルを読みましょう。 http://docs.python.jp/2/library/xml.etree.elementtree.html#module-xml.etree.ElementTree マニュアルを見た限り、forでelementの子供が取り出せるようなので、そんな感じで駅名を取り出すコードを書いてみました。 tree = ElementTree.fromstring(resp) stations = [e for e in tree if e.tag == 'station'] print [[e.text for e in station if e.tag == 'station_name'][0] for station in stations] これはもっと良い書き方ができそうですが... 単に駅名を取り出すだけなら、station_nameしか要らないので、domを使ったほうが楽かもしれません。 from xml.dom import minidom (略) tree = minidom.parseString(resp) station_names = tree.getElementsByTagName('station_name') print [station_name.firstChild.nodeValue for station_name in station_names] http://docs.python.jp/2/library/xml.dom.html

関連するQ&A