【Python】pandasのread_html読み込みエラーの対処法|ImportError、ValueError

python-pandas-read_html-how-to-solve-errorsPython

PythonのPandasモジュールのread_html使うとWEB上のhtmlファイルを読み込むことができます。

ですが、必要なライブラリをインストールしていなかったり、表(テーブル)以外のデータを読み込もうとするとエラーが発生します。

read_htmlメソッドで発生しがちな次の4つのエラーの対処法を解説しています。

エラー内容(4つ)
  1. 「ImportError: lxml not found, please install it」
  2. 「ImportError: html5lib not found, please install it」
  3. 「ImportError: BeautifulSoup4 (bs4) not found, please install it」
  4. 「ValueError: No tables found」

エラー対処法

これらのエラーに対処するポイントは以下の2点です。

エラー対処のポイント
  • ライブラリをいくつかインストールしておく必要がある。
  • データ取得は表(テーブル)に対してのみ。
    • 表データがあるページを指定する必要がある。

まずは、以下3つのライブラリをインストールします。そして、読み込めるのは表があるページのみで、読み込み対象は表のみになります。

ライブラリのインストール

3つのライブラリをインストールします。

pip install lxml
pip install html5lib
pip install bs4

②データ取得実行

データ取得を実行します。

import pandas as pd

url = 'https://stocks.finance.yahoo.co.jp/stocks/detail/?code=998407.O'
df = pd.read_html(url)

URLは、日経平均株価【998407】:国内指数 – Yahoo!ファイナンスです。

https://stocks.finance.yahoo.co.jp/stocks/detail/?code=998407.O

無事取得できました。

[        0   1         2                   3
 0  日経平均株価 NaN  19389.43  前日比+724.83(+3.88%),
       0             1
 0  株価予想  どうなる?明日の日経平均,
               0         1
 0        日経平均株価      NYダウ
 1         TOPIX   ナスダック総合
 2  ジャスダックインデックス   S&P 500
 3        香港ハンセン  FTSE 100
 4          上海総合       DAX
 5  ムンバイSENSEX30    CAC 40,
                                              0  \
 0                ピクテ・ゴールド(H有)その他リターン(1年)19.94%   
 1              グローバルSDGs株式ファンドその他リターン(1年)5.27%   
 2  eMAXIS Slim全世界株式(オール・カントリー)その他リターン(1年)3.91%   

                                       1  
 0  パインブリッジ・キャピタル証券F(H有)その他リターン(1年)6.35%  
 1   リスクコントロール世界資産分散ファンドその他リターン(1年)4.81%  
 2     米国株式配当貴族(年4回決算型)国際株式リターン(1年)2.21%  ,
                                                    0  \
 0  総合 値上がり率 1. 新都HLD+45.45% 2. スガイ化+28.30% 3. アマガ...   

                                                    1  
 0  東証1部 値上がり率 1. カネコ種+19.95% 2. セグエG+18.28% 3. 小林...  ]

3つのライブラリをインストールする理由

なぜ3つものライブラリをインストールする必要があるのかというと、ページの解析はBeautifulSoup4で行います。その際、テーブルの解析にlxmlを使用します。

このとき、lxmlでhtmlの解析に失敗した場合に、html5libを使用します。ちなみに、html5libは解析能力に優れ、htmlの補完もできるが重いライブラリです。

ただし、html5libもインストールすることが推奨されているためです。

公式ページ
HTML解析ライブラリについての注意事項

エラー内容の詳細

第1のエラー

import pandas as pd

url = 'https://www.yahoo.co.jp/'
df = pd.read_html(url)

#出力
# ImportError: lxml not found, please install it

lxmlがインストールされていないとのこと。

lxmlとは?

pythonのライブラリの一種で、htmlやxmlを解析するもの。

非常に軽い。ただし、厳密なマークアップにしか対応していないため、解析に失敗することがある。

lxmlのインストール

pip install lxml

第2のエラー

html5libとは?

lxmlを無事インストールし、再度実行すると次のようなエラーが発生します。

「ImportError: html5lib not found, please install it」

こちらはhtml5を解析するもの。
lxmlよりも高性能。無効なマークアップから正しいマークアップを自動生成できる。その代わり重い。

lxmlでhtmlの解析に失敗した場合に使われる。

html5libのインストール

pip install html5lib

第3のエラー

BeautifulSoup4 (bs4) とは?

html5libを無事インストールし、再度実行すると次のようなエラーが発生します。

「ImportError: BeautifulSoup4 (bs4) not found, please install it」

BeautifulSoup4 (bs4) はhtmlやxmlを解析するもの。

ページ解析の大本となるライブラリ。
今回のテーブルの解析には、バックエンドでlxmlやhtml5libが使われる。

BeautifulSoup4 (bs4) のインストール

pip install bs4

第4のエラー

bs4を無事インストールし、再度実行すると次のようなエラーが発生します。

「ValueError: No tables found」

表データが見つからない。つまり、表がないページには使用できないということです。

表データの取得

表データがあるサイトとして、yahooファイナンスの日経平均株価【998407】ページでトライ。

日経平均株価【998407】:株式/株価 - Yahoo!ファイナンス
日経平均株価【998407】の株価、チャート、関連ニュースなどを掲載。投資やマネーの総合情報サイト - Yahoo!ファイナンス

タイトルとURLをコピーしました