【解決】スクレイピングで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コードあり)
【解決】Google ColabのPythonでエクセル(Excel)ファイルやCSVファイルに出力・入力する方法【コピペで動く!】
【解決】スクレイピングでHTTP Error 403: Forbiddenでアクセスできないときに試すべき方法【コピペで動く!】【Google Colab:Python:pd.read_html,selenium】
【コピペで動く!】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で出てくる知見は本当か自分で調べてみよう。
【コピペで動く!】IB証券(インタラクティブ・ブローカーズ証券 )へのPythonでのAPI接続 ib_insync [自分が使っているPythonコード]
TradingViewを使ってポートフォリオ運用(複数銘柄運用) 米国株 2019/10/01に10万ドル(約1000万円)投資していたらどうなった?TradingViewのミニチャートウィジェットで簡単確認!
IB証券(インタラクティブ・ブローカーズ証券)のAPIを利用して個別株、ETF、先物のヒストリカルデータの出力できるJupyter notebookファイルの提供
ConoHa WINGレンタルサーバーでPython! Webアプリcgiを動かす手順を紹介!3つの例あり【コピペで動く!】
株価時系列データを分析する上で正規化を行う事の重要性について紹介する【違いをみつけろ!】
プログラム環境構築初心者用におすすめ!Windows10にPython3.9.2をインストールしてIB証券のTWS経由でAPI接続してみた!

コメント

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