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)

これだけ。

f:id:kazutaka83:20180604234210p:plain

データフレームに加工できたので、嘘だった。これリストです。なんですが

df[0]

このように指定することでデータフレームになります。

ここからCSVにしてもいいですし、DBにぶち込んでも良いでしょう。

スクレイピングのお作法に則ってBeautifulSoupを使って試行錯誤してましたが、pandasで読み込むだけでできました。本当にありがたいツールです。

HTML の表 (<table> タグ) をスクレイピングする時も pandas が超便利


スポンサード リンク