Python - XMLの解析(地域防災拠点データを読む)

BeautifulSoupを使ってXMLの解析を行っていきます。

XMLの解析

以下のページをXML解析の対象とします。
http://archive.city.yokohama.lg.jp/somu/org/kikikanri/data/shelter.xml

shelter.xml(一部略)

このページで公開されているXML形式の地域防災拠点データを読み込んで、区ごとに防災拠点の名前一覧を出力します。

[コード]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
from bs4 import BeautifulSoup
import urllib.request as req
import os.path

# XMLをダウンロード
url = 'http://archive.city.yokohama.lg.jp/somu/org/kikikanri/data/shelter.xml'
savename = 'shelter.xml'
if not os.path.exists(savename):
req.urlretrieve(url, savename)

# BeautifulSoupでXMLを解析
xml = open(savename, 'r', encoding='utf-8').read()
soup = BeautifulSoup(xml, 'html.parser')

# データを各区ごとに確
info = {}
for i in soup.find_all('shelter'):
name = i.find('name').string
ward = i.find('ward').string
addr = i.find('address').string
note = i.find('notes').string
if not (ward in info):
info[ward] = []
info[ward].append(name)

# 区ごとに防災拠点を表示
for ward in info.keys():
print('+', ward)
for name in info[ward]:
print('| - ', name)

実行結果は下記の通りです。

[実行結果]

+ 鶴見区
| -  生麦小学校
| -  豊岡小学校
| -  鶴見小学校
| -  潮田小学校
| -  下野谷小学校
| -  市場小学校
| -  平安小学校
| -  末吉小学校
| -  上末吉小学校
| -  下末吉小学校
| -  旭小学校
| -  東台小学校
| -  岸谷小学校
| -  矢向小学校
| -  入船小学校
| -  寺尾小学校
| -  汐入小学校
| -  馬場小学校
| -  駒岡小学校
| -  獅子ケ谷小学校
| -  上寺尾小学校
| -  新鶴見小学校
| -  市場中学校
| -  矢向中学校
| -  鶴見中学校
| -  末吉中学校
| -  寺尾中学校
| -  生麦中学校
| -  潮田中学校
| -  寛政中学校
| -  上の宮中学校
+ 神奈川区
| -  三ツ沢小学校
| -  青木小学校
| -  二谷小学校
| -  幸ケ谷小学校
| -  浦島小学校
| -  子安小学校
(以下略)