【Python】pandasでHTMLテーブルなどを超簡単にスクレイピング
- 2021.06.07
- Python
以前pandasでのexcelをDataFrameとして取り込む方法を記事(関心がある方はこちら)にしたが、今回はウェブページ上のHTMLテーブルやCSVファイルをスクレイピングする方法をまとめてみたいと思います。
beautifulsoupやseleniumを使ったスクレイピングほど細かいことはできないものの、その手のスクレイピング方法が難しく感じた方でも、簡単にウェブページ上に落ちている情報をスクレイピングできると思います。
HTMLテーブルをスクレイピングする
細かい引数はともかくとして、テーブルデータを読み込むだけであればURLをしていするだけでできる。
import pandas as pd
df = pd.read_html('URL')
単純に細かい条件をつけずに、指定URLのテーブルをDataFrameとして取り込む場合には、たったこれだけで解決する。
もし指定したURLに複数のHTMLテーブルが含まれている場合には、テーブルごとにDataFrameが作成され、DataFrameのリストが返される。
例えば、トルコの統計局からCPIデータをこのURLから取得してみるとわかりやすい。
url = 'https://tcmb.gov.tr/wps/wcm/connect/EN/TCMB+EN/Main+Menu/Statistics/Inflation+Data/Consumer+Prices'
df = pd.read_html(url)[0] # 指定URLの一つ目のテーブルを指定
詳細設定
細かい条件の指定をする場合には、エクセルファイルをDataFrameとして取り込むのと同じような設定を一通り行うことができる。
代表的なところだけ押させておけば問題ない。
- index_col : インデックスにする列の指定
- header : 何行目をヘッダーにするかを指定(指定した行よりも上は無視される)
- parse_dates : True or Falseで指定。インデックスをtimeseriesにするか否か
CSVファイルを読み込む
web上のCSVファイルもURLを指定するだけでDataFrameに変換することができる(Excelファイルも同じく)
csvファイルを読み込む場合には.read_csv()を使う
(Excelファイルの場合には.read_excel()を使う)
df = pd.read_csv('URL')
こちらも細かい読み込み範囲などを指定することが可能。
主に使うものはHTMLテーブルを読み込むときとほとんど同じになると思う。
- index_col : インデックスに使う列の指定
- header : 何行目をヘッダーにするかを指定(指定した行よりも上は無視される)
- parse_dates : True or Falseで指定。インデックスをtimeseriesにするか否か
- usecols : 使う列の選択
-
前の記事
【Python】pandasでエクセルをDataFrameとして読み込む方法 2021.06.07
-
次の記事
【Python】Plotly Expressで簡単なデータ アニメーションを作成する 2021.06.07