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]