【解決】スクレイピングで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 米国株 Webサービス&コード 【Google Colabで違いをみつけろ!】
【コピペで動く!】Pythonで1.5GBのcsvファイル読み込み高速化:1分5秒⇒4秒程度 DASK , pickle (Pythonコードあり)
【コピペで動く!】20行で資産運用モデル作成 Google ColabのPythonで 米国株の株価を取得し、グラフ・チャートを表示
【コピペで動く!】Google ColabでPython を用いての 効率的フロンティア と ポートフォリオの最適化 Efficient Frontier & Portfolio Optimization with Python [Part 2/2]
過去50年間のS&P500の季節性の値動きから負けにくいポジション構築はできるのか考える・大統領選挙のアノマリー対応!【コピペで動く!】Google ColabのPythonで自分で調べてみよう!
【解決】Google ColabのPythonでエクセル(Excel)ファイルやCSVファイルに出力・入力する方法【コピペで動く!】
【解決】スクレイピングでHTTP Error 403: Forbiddenでアクセスできないときに試すべき方法【コピペで動く!】【Google Colab:Python:pd.read_html,selenium】
曜日による米国株指数(S&P500)のパフォーマンスに違いはあるのか?有利なポジション取りはできるのか?【Google ColabのPython:コピペで動く!】Twitterで出てくる知見は本当か自分で調べてみよう。
【コピペで動く!】IB証券(インタラクティブ・ブローカーズ証券 )へのPythonでのAPI接続 ib_insync [自分が使っているPythonコード]
【コピペで動く!】20行で資産運用モデル作成 長期、中期、短期の3区分の期間チャートをGoogle ColabのPythonで作成 【違いをみつけろ!】
ボラティリティ クラスタリング(Volatility Clustering)について:Google ColabのPythonでの相場環境分析
米国株のティッカー(Symbol)のスクレイピングによる取得、APIによるヒストリカルデータやファンダメンタルズデータ取得について【コピペで動く!】Python,Quandl,無料枠あり
Google ColabでYouTube動画を開始・終了の時間を指定してPythonでダウンロード(音声・動画両方対応)【コピペで動く!】
対話型チャットAI「ChatGPT」が人気なので、アカウントの作成とか難しいことが分からない人向けにとりあえずBlogに埋め込んでみた!

コメント

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