yuji0602’s blog

日々思っていることなど。

pandasでテーブルタグがあるサイトをスクレイピングする

これはなに?

仕事で使っている某サイトの管理画面で日々のレポートが見れるのですが、CSVダウンロードとか何かしらのダウンロードがなくてサイトを閲覧することしか出来ないところがありました。あちこちスクレイピングを調べていると、pandasスクレイピングすることが出来るようなので使ってみようかと思いました。

インストール

私の環境ではpython3.6.4を使っています。幾つかインストールする必要があります。

$ pip install pandas lxml html5lib BeautifulSoup4

書いたコード

テーブルタグがありそうなサイトを考えた時、オライリーのことを思い出しました。ここではオライリーの書籍一覧をスクレイピングしてみます。ファイル名はpandas_test.pyという名前でとりあえず書いてみます。

import pandas as pd

url = 'https://www.oreilly.co.jp/catalog/'
rows = pd.io.html.read_html(url)
print(rows[0].head())
print('-----')
print(rows[0].head().to_dict(orient='records'))

書いたコードを実行

実行した結果は以下のようになります。

$ python pandas_test.py
            ISBN                  Title    価格         発行日
0  4-87311-061-0  Javaネットワークプログラミング 第2版  6264  2001/10/01
1  4-87311-063-7        C++プログラミング入門 新版  3024  2001/11/01
2  4-87311-065-3              サーバ負荷分散技術  3240  2001/12/01
3  4-87311-078-5          NFS & NIS 第2版  5184  2002/04/01
4  4-87311-079-3            不正アクセス調査ガイド  3672  2002/04/01
-----
[{'ISBN': '4-87311-061-0', 'Title': 'Javaネットワークプログラミング 第2版', '価格': 6264, '発行日': '2001/10/01'}, {'ISBN': '4-87311-063-7', 'Title': 'C++プログラミング入門 新版', '価格': 3024, '発行日': '2001/11/01'}, {'ISBN': '4-87311-065-3', 'Title': 'サーバ負荷分散技術', '価格': 3240, '発行日': '2001/12/01'}, {'ISBN': '4-87311-078-5', 'Title': 'NFS & NIS 第2版', '価格': 5184, '発行日': '2002/04/01'}, {'ISBN': '4-87311-079-3', 'Title': '不正アクセス調査ガイド', '価格': 3672, '発行日': '2002/04/01'}]

感想とまとめ

思った以上に簡単に出来たので驚きました。pandasを使うの初めてなのですが、これは便利ですね。.to_dict()とかto_json()をやる時に、.to_dict(orient='records')のようにorient指定するとそのままBigQueryに登録できそうな形式になるのでありがたいです。

もう少しpandasを触ってみようと思います。

参考にしたサイト