【解決】スクレイピングで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コードあり)
デコピコミンが全国(47都道府県)で、どの施設に出てくるか地図(Google Maps)で確認!!【ピクミン ブルーム(Pikmin Bloom)】
Windows10で機械学習環境チェック CPU/GPUでTensorflowの作業時間はどのくらい違うのか、Google Colabとも比較してみた。(CUDA Toolkit,cuDNN)
【解決】Google ColabのPythonでエクセル(Excel)ファイルやCSVファイルに出力・入力する方法【コピペで動く!】
【コピペで動く!】Google ColabでPython を用いての 効率的フロンティア と ポートフォリオの最適化 Efficient Frontier & Portfolio Optimization with Python [Part 2/2]
【コピペで動く!】20行で資産運用モデル作成 Google ColabのPythonで 米国株の株価を取得し、グラフ・チャートを表示
【解決】スクレイピングでHTTP Error 403: Forbiddenでアクセスできないときに試すべき方法【コピペで動く!】【Google Colab:Python:pd.read_html,selenium】
ConoHa WINGレンタルサーバーでPython! Webアプリcgiを動かす手順を紹介!3つの例あり【コピペで動く!】
株価時系列データを分析する上で正規化を行う事の重要性について紹介する【違いをみつけろ!】
Google Analytics にPython APIで接続してみた話【コピペで動く!】
【コピペで動く!】IB証券(インタラクティブ・ブローカーズ証券 )へのPythonでのAPI接続 ib_insync [自分が使っているPythonコード]
Google Data Portalを使ってWeb上のオープンデータを使って簡単に情報を可視化しようという話
Google ColabでYouTube動画を開始・終了の時間を指定してPythonでダウンロード(音声・動画両方対応)【コピペで動く!】
過去50年間のS&P500の季節性の値動きから負けにくいポジション構築はできるのか考える・大統領選挙のアノマリー対応!【コピペで動く!】Google ColabのPythonで自分で調べてみよう!

コメント

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