Pythonでは、XMLやHTML形式のデータを読み込むライブラリがいくつも存在する。

lxml、Beautiful Soup、html5libなどが代表的なライブラリとして挙げられるが、まずはこれらをインストールし、スクレイピングのための環境を整えていこう。

必要なライブラリのインストール

ターミナルで下記コマンドを入力する。

conda install lxml
pip install beautifulsoup4 html5lib

※condaコマンドが使えない場合は「pip install lxml」でOKだ。

pandasのread_html関数でスクレイピングする

ライブラリをインストールしたら、Jupyter Notebookを開き、早速スクレイピングをおこなっていく。

今回はpandasのread_html関数を使用する方法を紹介しよう。

import pandas as pd

tables = pd.read_html('https://chusotsu-program.com/numpy-ndarray02/')
# [           0                                1
# 0       データ型                               説明
# 1       int8                      符号あり8ビット整数型
# 2      int16                     符号あり16ビット整数型
# 3      int32                     符号あり32ビット整数型
# 4      int64                     符号あり64ビット整数型
# 5    float16                        半精度不動小数点型
# 6    float32                        単精度不動小数点型
# 7    float64                        倍精度不動小数点型
# 8       bool                             真偽値型
# 9     object                    Pythonオブジェクト型
# 10   string_              固定長文字列型(1文字あたり1バイト)
# 11  unicode_  固定長ユニコード文字列型(1文字あたりのバイト数は環境による)]

上記は、当ブログのとあるページをスクレイピングした例だ。

read_htmlは引数にURLまたはファイルパスを指定し、デフォルトでは<table>タグで囲まれたデータを検出しパースしようとする。

また関数の戻り値として得られるオブジェクトは、データフレームのリストとなっている。

tables[0]

read_htmlで得たリストのインデックス番号を指定すると、上記のとおりpandasのデータフレームオブジェクトを得られる。

ヘッダー行を指定する

read_html関数はデフォルトではヘッダー行までデータとして読み込むので、ヘッダー行をデータフレームのラベルとしたい場合は、header引数に0を指定する。

import pandas as pd

tables = pd.read_html('https://chusotsu-program.com/numpy-ndarray02/', header=0)
tables[0]