こんにちは、エンジニアのオオバです。
前回記事からの続きです。
最低限の機械学習の知識を手に入れるため勉強中。
本書全7章中3章目に入りました。
様々なデータ形式をパースするというテーマのチャプターっぽいです。
初回はXML。
【今回の処理フロー】
- 避難施設XMLをローカルにダウンロード
- ダウンロードしたXMLをBeautifulSoupでパース
- BeautifulSoupから指定要素を取り出す
1. 避難施設XMLをローカルにダウンロード
urllib.request.urlretrieve("URL", "保存するファイル名")
urlretrieveメソッドを使ってファイルをダウンロードします。
2. ダウンロードしたXMLをBeautifulSoupでパース
xml = open("保存するファイル名", "r", encoding="utf-8").read()
soup = BeautifulSoup(xml, 'html.parser')
open関数でダウンロードしたxmlをメモリに乗せ、BeautifulSoupでxmlをパースします。
3. BeautifulSoupから指定要素を取り出す
今回ダウンロードしたxmlは以下のような構造になっています。
生麦小学校
鶴見区
生麦四丁目15番1号
被災した住民の避難生活の場所、情報受伝達、備蓄機能を備えた拠点です。
豊岡小学校
鶴見区
豊岡町27番地1
被災した住民の避難生活の場所、情報受伝達、備蓄機能を備えた拠点です。
・・・
以下のように複数要素あるshelter
はfind_all関数
で配列取得し、単一要素はfind関数
を使います。
info = {}
for obj in soup.find_all("shelter"):
name = obj.find('name').string
ward = obj.find('ward').string
if not (ward in info):
info[ward] = []
info[ward].append(name)
最後に今回のサンプルコードです。
このコードを実行すると以下のように出力されます。
+ 鶴見区
| - 生麦小学校
| - 豊岡小学校
| - 鶴見小学校
| - 潮田小学校
| - 下野谷小学校
| - 市場小学校
| - 平安小学校
| - 末吉小学校
| - 上末吉小学校
BeautifulSoupを使うとxmlパースは簡単ですね。
→11万文字で徹底解説した「DOTweenの教科書」Unityアニメーションの超効率化ツールはこちら
もくじ
最後に
XML、JSON、YAML、csv、Excel辺りのパースをこの3章ではパースするそうです。次回まとめてやります。
この記事が気に入ったらフォローしよう
オススメ記事
検証環境
- macOS 10.12.6
- Selenium 3.7.0
- PhantomJS 2.1.1
- Python 3.6.3
- Node.js 9.0.0
- Requests 2.18.4