Pandasのみで表をウェブサイトからスクレイピングして出力する方法と落とし穴
Pythonユーザーにとってはほぼ必須級のライブラリと言っても過言ではないPandasだが、実はread_htmlを使用することで部分的にwebスクレイピングを行うことも可能だ。この記事ではwikipediaのMicrosoft Windowsのページから表を取得するところまでやってみる。
![](https://assets.st-note.com/img/1661932063933-92DduBEoJw.png?width=1200)
import pandas as pd
url = 'https://ja.wikipedia.org/wiki/Microsoft_Windows'
df = pd.read_html(url, match='日本語版')
display(df)
urlには抽出したいウェブページのURLを代入。read_htmlの1つ目の変数にurl、2つ目に抽出したい表を絞り込めるように検索条件を設定。
実行してみよう。
![](https://assets.st-note.com/img/1661932137652-eB81HOHZxy.png?width=1200)
はい、取得できた。
というわけにはいかない。
displayで表を表示させられていない。
これはどういうことかというとdfに格納されているのはリストでありpandasのDataFrameではないということ。つまりこれをスライスしたり結合したりということはできない。
実行しようとすると「AttributeError: 'list' object has no attribute 'loc'」というエラーが出る。
![](https://assets.st-note.com/img/1661933084089-zxs92hzDKS.png?width=1200)
どうすればいいのかというとdfの中は表が1つのlist型ということになるので要素の番号を指定してあげればOK。
import pandas as pd
url = 'https://ja.wikipedia.org/wiki/Microsoft_Windows'
df = pd.read_html(url, match='日本語版')
display(df[0])
![](https://assets.st-note.com/img/1661932776340-p0zl3BK3xj.png?width=1200)
表を複数取得した場合も、要素を指定してあげればdf型として処理ができる。
もし参考になったらいいねとフォローよろしくお願いいたします。