【解決】スクレイピングでHTTP Error 403: Forbiddenでアクセスできないときに試すべき方法【コピペで動く!】【Google Colab:Python:pd.read_html,selenium】

スポンサーリンク
投資

以下のようなスクレイピングでの問題を拝見しました。最近増えてきているスクレイピングを回避するサイトかなと思いましたので、簡単な回避策をご紹介したいと思います。

問題の確認

記述頂いたサイトにアクセスをし、Pythonのシンプルなコードでのスクレイピングができないことを以下のコードで確認しまいた。

import pandas as pd

url = 'https://kabu.dmm.com/service/us/stock_list/etf_list/'

data = pd.read_html(url, header = 0)
display(len(data))
display(data[0].head(5))

HTTPError: HTTP Error 403: Forbidden

ということで、スクレイピング防止の設定がされているのかもしれません。

場合によっては’User-Agent‘の設定を付けてあげて回避する方法もあるようですが、今回の例ではSeleniumを使って問題の解決を図りたいと思います。

使用するツール

使用するツールはGoogle Colaboratoryのpythonを使いますので、無料で、簡単に行うことができます。Google Colaboratoryについては以前書いた記事をご参照いただければと思います。

実際のコードとやっていること

Google ColaboratoryでSelenium実行するには以下のサイトが詳しいので、設定自体はこのサイトをご覧いただくのがよろしいと思います。

【Python】Google ColaboratoryでSelenium実行

【Python】Google ColaboratoryでSelenium実行|ゆゆうブログ
Google Colaboratory便利ですね。 ローカルに環境を整えなくても、簡単にPythonの実行環境が準備でき

Google Colaboratory上でSeleniumを利用するための環境設定部分が以下です。

#Chromiumとseleniumをインストール
print("前処理を開始")
!apt-get update
!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin
!pip install selenium

実際のサイトへのアクセス部分は以下のようになります。

#ライブラリをインポート
from selenium import webdriver
import time

#---------------------------------------------------------------------------------------
# 処理開始
#---------------------------------------------------------------------------------------
# ブラウザをheadlessモード実行
print("\nブラウザを設定")
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome('chromedriver',options=options)
driver.implicitly_wait(10)

# サイトにアクセス
print("サイトにアクセス開始")
driver.get("https://kabu.dmm.com/service/us/stock_list/etf_list/")
time.sleep(3)

ヘッドレスモードで動いているので、特に新規にブラウザが立ち上がるような事もなく、サイトにアクセスできている状態になります。

ここからがスクレイピングの部分ですが、いかのようになります。

import pandas as pd

dfs5 = pd.read_html(driver.page_source,flavor='bs4', header=0)
display(dfs5[0])

DataFrameにtableを読み込ませていますので、後はCSVで吐き出すなり、このDataFrameを再利用するなり、なんとでもできると思います。

出力データ

実際に出力したデータは以下の通りになります。

最後に改めてではありますが、参考にさせていただいたサイトを紹介させていただきます。

【Python】Google ColaboratoryでSelenium実行|ゆゆうブログ
Google Colaboratory便利ですね。 ローカルに環境を整えなくても、簡単にPythonの実行環境が準備でき

Pythonに関する記事をご紹介します。

Python高速化! for文は遅いので、”これ”を使うと30倍早いですよ!【Google ColabのPython:コピペで動く!】
【コピペで動く!】Pythonで1.5GBのcsvファイル読み込み高速化:1分5秒⇒4秒程度 DASK , pickle (Pythonコードあり)
【コピペで動く!】日本株、米国株で個別銘柄ベータ値(β値)を簡単に調べる方法 Python 米国株 Webサービス&コード 【Google Colabで違いをみつけろ!】
【コピペで動く!】Google ColabでPython を用いての 効率的フロンティア と ポートフォリオの最適化 Efficient Frontier & Portfolio Optimization with Python [Part 2/2]
【コピペで動く!】20行で資産運用モデル作成 Google ColabのPythonで 米国株の株価を取得し、グラフ・チャートを表示
過去50年間のS&P500の季節性の値動きから負けにくいポジション構築はできるのか考える・大統領選挙のアノマリー対応!【コピペで動く!】Google ColabのPythonで自分で調べてみよう!
曜日による米国株指数(S&P500)のパフォーマンスに違いはあるのか?有利なポジション取りはできるのか?【Google ColabのPython:コピペで動く!】Twitterで出てくる知見は本当か自分で調べてみよう。
【解決】スクレイピングでHTTP Error 403: Forbiddenでアクセスできないときに試すべき方法【コピペで動く!】【Google Colab:Python:pd.read_html,selenium】
【解決】Google ColabのPythonでエクセル(Excel)ファイルやCSVファイルに出力・入力する方法【コピペで動く!】
【コピペで動く!】IB証券(インタラクティブ・ブローカーズ証券 )へのPythonでのAPI接続 ib_insync [自分が使っているPythonコード]
米国株のティッカー(Symbol)のスクレイピングによる取得、APIによるヒストリカルデータやファンダメンタルズデータ取得について【コピペで動く!】Python,Quandl,無料枠あり
Google ColabでYouTube動画を開始・終了の時間を指定してPythonでダウンロード(音声・動画両方対応)【コピペで動く!】
Pythonを使ってTwitterに自動投稿。APIの設定など。(Twitter API v2とAPI v1.1の併用)
ボラティリティ クラスタリング(Volatility Clustering)について:Google ColabのPythonでの相場環境分析
TradingViewを使ってポートフォリオ運用(複数銘柄運用・配当込み) 日本株 2019年末に約1000万円投資していたらどうなった?【コピペで動く!】Google ColabのPythonで自分で調べてみよう!

コメント