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]
