DebankのPythonスクレイピングプログラムの環境構築!chromedriverまで解説!

ごごちと申します。

Debankで仮想通貨のログを自動取得する
Pythonスクレイピングプログラムを作成しました。
【仮想通貨】DebankのPythonスクレイピング結果のグラフ化!分散型取引所(DEX)の成績を比較しやすくしました!

また、Windowsタスクスケジューラを使った
定期実行も紹介しました。
スリープ中でもPythonスクレイピングプログラムを定期実行する方法【タスクスケジューラ】【Windows10】

今回は筆者が用いた環境の構築方法を説明します。
OSはWindows10です。

以下の順番で説明します。

  1. Anacondaのインストール
  2. VScodeのインストールと設定
  3. Google Chromeを用いたスクレイピング

1. Anacondaのインストールと仮想環境作成

Anacondaのインストール

Anacondaの公式ページから
ダウンロード>インストールします

Pythonのバージョンは
最新のもので問題ありません。
この記事を書いた時点では Python 3.10です。

インストールする際の設定は
特に変更する必要はありません。
すべてデフォルトの設定でインストーラを進めます。

conda仮想環境の作成

②Windowsメニューから
Anaconda > Anaconda Prompt
を開きます。

xxxxxの部分には各自のユーザ名が入ります

③以下のコマンドを実行して「py_test」という名前の仮想環境を構築します。

conda create --name py_test python=3.10 numpy=1.23 pandas openpyxl selenium matplotlib

仮想環境の構築と同時に、
以前紹介したプログラムが動作するように
必要となるライブラリのインストールも
同時に行います。

筆者は既存環境の分、行数が異なっています。

④インストールが完了したら、
以下のコマンドを実行して
作成した仮想環境を確認できます。
「-e」 は environments の略です。

conda info -e

⑤次のコマンドを入力して
仮想環境をactivateします。

conda activate py_test

上記の④までがうまくいっていたら
(base)環境から(py_test)環境に
移動していることかと思います。

⑥(py_test)環境下で以下のコマンドを実行し
seleniumライブラリを最新のものにします。

pip install -U seleniumu

⑦(py_test)環境下で以下のコマンドを実行し
numpyのバージョンが1.23.X
であるのを確認しておきます。

conda list

⑧確認出来たら以下のコマンドで
(py_test)環境を終了します

conda deactivate

⑨(base)環境で以下のコマンドを実行します。

conda init powershell

Windows PowerShellから
Anaconda PowerShellを
利用できるようにする設定です。

以上でAnaconda PowerShell側での設定は終了です。

2. VScodeのインストールと設定

VScodeのインストール

公式サイトからVScodeを
ダウンロード > インストール
します。

Pythonのインストール

⑪左側のアイコンを選択し
検索欄に「Python」と入力。
「Python」の「Install」ボタンを押します。

これでVScode側でPythonに関する
設定ができるようになります。

AnacondaへのPath設定

⑫ 左下の歯車マーク >
「Settings」を押します。

⑬検索欄に「Python Default」と入力します。
Python : Default Interpreter Path
の欄に、
Anacondaのbase環境のPathを設定します。

Pathを確認するには
Anaconda PowerShellを開き、
以下のコードを実行します

conda info -e

上図の例では、

C : \Users\(xxxxx)\anaconda3

をPython Default Interpreter Pathに入力します。

(xxxxx)には各自のユーザ名が入ります。
バックスラッシュ(\)または(¥マーク)は
スラッシュ(/)に変えてください。

Windows PowerShellからAnaconda PowerShellを使う設定

VScodeのデフォルトのターミナルは
Windows PowerShellなので、
Windows PowerShellから
Anaconda PowerShellを使えるようにします。

⑭ Windowsスタートメニューの検索欄に
「powershell」と入力

⑮ Windows PowerShellを
右クリック > 管理者として実行

⑯ 以下のコードを実行します。

Set-ExecutionPolicy RemoteSigned

そのあと実行ポリシーの変更を
「y」
と入力してEnterを押します。

これでWindows PowerShellを
Anaconda PowerShellから利用
できるようになりました。

VScodeでAnaconda PowerShellの確認

⑰ VScodeの
「File」タブ >
「New Window」を選択

⑱ 新しいウインドウの下の方の
青線の部分でマウスカーソルが
矢印に変わったら上方向にドラッグして
ターミナルを確認する

⑲設定が成功していればターミナルで
Anaconda PowerShellが起動しているのが
確認できます。

3. Google Chromeを用いたスクレイピング

ここからは、
上記までで作成した「py_test」仮想環境で
Google Chromeを用いたスクレイピングプログラム
「scraping.py」を作成したいと思います。

⑳作業フォルダを作成します。
画像の例では、
デスクトップに「py_scraping」という
作業フォルダを作りました。

作業フォルダはどこに作成しても問題ありません。

Google Chromeに対応するchromedriver.exeのダウンロード

Google Chromeを使って
スクレイピングするためには、
以下の準備をします。

1. Google Chromeのバージョンを確認

㉑ Google Chromeを起動し、
右上の三点マーク
> ヘルプ > Google Chromeについて
を押します。

㉒ Chromeのバージョンを確認します。
画像の例では、バージョン 113.x.xxxx.xx
であることがわかります。

2. Chromeのバージョンに対応したドライバの設置

次にChromeのバージョンに対応したドライバ
「chromedriver.exe」をダウンロードして、
作業フォルダ「py_scraping」に設置します。

こちらのページから「chromedriver.exe」
をダウンロードします。

画像の例では、バージョン113に対応する
windows用のドライバをダウンロードします。

㉔ ダウンロードしたzipファイルを
作業フォルダ「py_scraping」に設置し、
右クリック > 「すべて展開」
をして、「py_scraping」の中に展開します。

chromedriver.exeを使ったスクレイピングのテスト

テストとして、
仮想通貨の時価総額をまとめたサイト
CoinMarketCapの情報取得を
行いたいと思います。

ここでは、
各トークンの価格を取得したいと思います。

VScodeのエディタでscraping.pyを
作成したいと思います。

㉕ VScodeの
「File」タブ > 「Open Folder」を選択
「py_scraping」作業フォルダを選択します。

これによって、ターミナルのカレントディレクトリが
「py_scraping」作業フォルダに移動します。

㉖ 新規ドキュメント作成アイコンを押し、
「scraping.py」という名前を付けます。

㉗以下のコードをコピー&ペーストして
Ctrl+Sで保存します。

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

#chromeでアクセス
options = webdriver.ChromeOptions()

###########################################################################################################################################
# chromedriver.exeの絶対パスを指定
service = webdriver.chrome.service.Service(executable_path = 'C:\\Users\\xxxxx\\Desktop\\py_scraping\\chromedriver.exe')
###########################################################################################################################################

driver = webdriver.Chrome(service=service, options=options)
# ページ全体の要素を取得
driver.get('https://coinmarketcap.com/ja/')
time.sleep(5)

# テーブル全体の要素を取得
# Copy Xpathの結果
# //*[@id="__next"]/div/div[1]/div[2]/div/div[1]/div[4]/table
main_container = driver.find_element(By.XPATH, '//*[@id="__next"]/div/div[1]/div[2]/div/div[1]/div[4]/table')

# 各トークンの価格をまとめたリストを取得
# Copy elementの結果
# <div class="sc-cadad039-0 clgqXO"><a href="/ja/currencies/bitcoin/markets/" class="cmc-link"><span>¥3,947,999.24</span></a></div>
all_Token_elements = main_container.find_elements(By.XPATH, './/*[contains(@class,"sc-cadad039-0 clgqXO")]')

# 各トークンの価格をテキスト表示
for Token_element in all_Token_elements:
    print(Token_element.text)

㉘ターミナルで仮想環境をactivateして
scraping.pyを実行します。

conda activate py_test
python scraping.py

㉙上記のコマンドを実行すると、
Google Chromeが立ち上がり、
CoinMarketCapのページが表示されます。
ページ読み込みのため5秒待機した後、ターミナルに
各トークンの数値情報が表示されます。

実行時にUSBデバイスに関する
エラーが出ても問題はありません。

スクレイピングプログラムの解説

executable_path という引数には、
chromedriver.exe の絶対パスを入力します。
chromedriver.exeの上でShiftキーを押しながら
右クリック > パスをコピー
で取得できるものをペーストします。

# chromedriver.exeの絶対パスを指定
service = webdriver.chrome.service.Service(executable_path = 'C:\\Users\\xxxxx\\Desktop\\py_scraping\\chromedriver.exe')

まず以下のコードで
ページ全体の要素を読み込みます。

# ページ全体の要素を取得
driver.get('https://coinmarketcap.com/ja/')

次に以下のコードで
テーブル全体の要素を取得します。

# テーブル全体の要素を取得
# Copy Xpathの結果
# //*[@id="__next"]/div/div[1]/div[2]/div/div[1]/div[4]/table
main_container = driver.find_element(By.XPATH, '//*[@id="__next"]/div/div[1]/div[2]/div/div[1]/div[4]/table')

driverというオブジェクトには
「find_element」というメソッドがあります。
「find_element」の引数に
XPathを渡してテーブル全体の要素を取得して
main_containerというオブジェクトに渡します。
ここで、XPathはHTML中における
要素の位置を示すものです。
XPathを取得するために、
CoinMarketCapのページで
「Ctrl + Shift + C」で
Chromeのインスペクター機能を起動します。

まずテーブル全体の要素が何かを調べるために、
class = “sc-xxxxxxxx_cmc-table”にあたる要素が
テーブル全体を指し示すことがわかります。
実際、このクラスの上にマウスを置くと
テーブル部分が青くハイライトされます。

そこで、このクラスの上で
右クリック > Copy > Copy XPath
をクリックしてください。

そして、By .XPathの後のstr引数にCtrl + Vでペーストします。

# Copy Xpathの結果
# //*[@id="__next"]/div/div[1]/div[2]/div/div[1]/div[4]/table

テーブル全体の要素のXPathは、
//*[@id=”__next”]/div/div[1]/div[2]’
であることがわかります。
この情報を「find_element」メソッドの
By.XPathに続く引数に渡します。

次にテーブルから
各トークンの価格をまとめたリストを取得します。

# 各トークンの価格をまとめたリストを取得
# Copy elementの結果
# <div class="sc-cadad039-0 clgqXO"><a href="/ja/currencies/bitcoin/markets/" class="cmc-link"><span>¥3,947,999.24</span></a></div>
all_Token_elements = main_container.find_elements(By.XPATH, './/*[contains(@class,"sc-cadad039-0 clgqXO")]')

main_containerというオブジェクトは、
driverオブジェクトと同じく、
「find_elements」というメソッドを持っています。
複数形のsがついていますので注意。

これは第2引数に「contains」を含めることで、
class名に指定した文字列を含む要素を複数抽出し
「all_Token_elements」という
リスト型変数に格納します。

抽出したい各トークンの価格情報の
クラス名の確認方法は以下の通りです。

先ほどの”cmc-table”の配下には、
<tr>…</tr>と書かれた行が
いくつもあるのがわかります。
そしてこれら1行1行が各トークンの
行に対応していることが確認できました。
これらを「find_elements」メソッドの
「contains」によりclass名のパターン抽出で
まとめて取得します。

Bitcoinの行の値段に
カーソルを置きクリックすると、
「div.sc-cadad039-0.clgqXO」
とクラス名が表示され、
右側のHTMLも対応する要素がハイライトされます。

Ethereum等の他の行も
同様のクラス名になっているのが
確認できました。

よって、各トークンの値段を指し示すclass名は、
「sc-cadad039-0.clgqXO」
であることがわかりました。

XPathと同様、クラス名をコピーします。

HTML要素の上で
「右クリック > Copy > Copy Element」を押し、
VScodeの適当な場所にCtrl + Vでペーストします。
ペーストした行の先頭には # をつけて
コメントアウトします。

# Copy elementの結果
# <div class="sc-cadad039-0 clgqXO"><a href="/ja/currencies/bitcoin/markets/" class="cmc-link"><span>¥3,947,999.24</span></a></div>

このようにして確認したclass名を、
find_elementsのcontains()の
()の中にペーストします。

以上により、「all_Token_elements」という、
各トークンの値段の要素をもつ
リスト型変数を作成しました。

次に各トークンの価格をテキスト表示します。

# 各トークンの価格をテキスト表示
for Token_element in all_Token_elements:
    print(Token_element.text)

Pythonではリストの中身を一つずつ取り出して
処理をするためにはfor文をつかいます。
「Token_element」というループ変数には、
「all_Token_elements」リストの
要素が一つずつ渡されます。

「Token_element」は「selenium」ライブラリの
「WebElement」というオブジェクトであり、
「.text」を指定することで
中身を確認することができます。

この実行結果が以下の様になります。

各トークンの価格を取得出来ています。

他の要素もこのような要領で取得できますので、
ページ内の様々な情報を取得してみてください。

活用して頂けたら嬉しいです

スクレイピングを使えるようになると、
ログ取得等の定期作業を自動化したり、
Webページの情報を整理して取得できたりして
データ分析の幅が広がります。

ぜひ活用して頂けたら嬉しいです。

「やってみたけど動かなかった」
「内容が間違っている」
等でも良いので、
コメントがあればぜひお願いします!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA