Pandasを使ってHTMLのテーブル要素を抽出する
九州のオープンデータを使っていろいろと可視化をしようとしています。様々な団体がオープンデータを公開していますが、リアルタイム性があるものはそう多くありません。 ただ、国の機関は日単位・時間単位で情報を公開している場合があるので、これを使って自分でデータを作ります。
対象は国土交通省 九州地方整備局が公開している道路のデータです。以下のページから1時間毎の道路温度を取得することができます。
篠栗のデータを取る場合には以下のURLにアクセスします。
http://www.qsr.mlit.go.jp/fukkoku/bousai/pc/kion_rireki.php?ino=603&type=2
Pythonを使ってこの情報を定期的に収集していきましょう。
前準備
今回はurllib、Pandasを使います。Anaconda環境ならインストールされています。入っていない場合はpip使って入れます。urllibは多分標準で入ってると思います。
pip install pandas
URLからHTMLを取得
from urllib.request import urlopen url = 'http://www.qsr.mlit.go.jp/fukkoku/bousai/pc/kion_rireki.php?ino=603&type=2' f = urlopen(url) html = f.read()
ここでprint(html)を見たら平文HTMLがごちゃごちゃ出てきます。スクレイピングをやる際にはこのHTMLをBeautifulSoupに食わせます。beautifulsoupでtd, trタグをとってくることもできますが、以下に記しているようにPandas使う方が楽です。
Pandasでテーブル構造を取る
Pandasほんとうにすごくて、平文HTMLを食わせるだけでテーブル部分だけデータフレームにしてくれます。
import pandas as pd df = pd.io.html.read_html(html)
これだけ。
データフレームに加工できたので、嘘だった。これリストです。なんですが
df[0]
このように指定することでデータフレームになります。
ここからCSVにしてもいいですし、DBにぶち込んでも良いでしょう。
スクレイピングのお作法に則ってBeautifulSoupを使って試行錯誤してましたが、pandasで読み込むだけでできました。本当にありがたいツールです。