注目キーワード
  1. Photoshop
  2. Python
  3. Raspberry Pi
  4. Arduino

Pythonスクレイピングを使ってGoogleChromeを操作をしてみる

  • 2020年9月11日
  • 2020年11月21日
  • Python

ここでは「Python」を使ったWebスクレイピングを自分の学習ログとして紹介していきます。

 

この記事を読むことで

GoogleChromeの自動制御

Chromeから特定要素を取り出す方法

などを学ぶことができます。

 

PythonでGoogleChromeを使ったWebスクレイピングを学びたい方に役立てて頂ければ幸いです。

それでは始めていきましょう。

Pythonでのパッケージをインストール

まずはPythonに使用するパッケージ等をインストールしていきます。

 

スクレイピングで使用するパッケージのDL

スクレイピングで使用するパッケージは

・「Selenium」と呼ばれる、WEBブラウザの起動を制御、ブラウザ上でのフォーム記入、マウスクリック等ができるパッケージ
・「BeautifulSoup」と呼ばれる、WEBページの記述コードであるHTMLを分析するパッケージ

を使用します。

 

これらはPythonの標準ライブラリに含まれていないので、各自インストールする必要があります。

インストールするためのコマンドはこちらです。

「Selenium」のインストール↓

pip install selenium

BeautifulSoupのインストール↓

pip install beautifulsoup4

 

インストールが完了したらPythonでインポートして使えるようになります。

 

seleniumモジュールについて

ここでSeleniumモジュールについて書籍や参考資料を一通り読み分かったことをまとめておきます。

 

SeleniumはRequests、BeautifulSoupよりも高度な方法でWEBページを制御することができる分、動作スピードが遅くなります。

そのため、簡単なWebスクレイピングではSeleniumよりRequestsを使った方が手間を省くことができます。

 

この辺りのさじ加減を知るにもWebスクレイピングをもっと勉強する必要がありそうです。

 

PythonでChromeDriverのパスをインポート

PythonでWEBブラウザ(ここではGoogleChrome)を使用するには「ChromeDriver」というドライバーをPythonで使えるように設定しなければなりません。

 

ChromeDriverを直接ダウンロードする方法もありますが、ファイルの場所やPATHの設定をしたくなかったので、pip installでChromeDriverをインストールしました。

 

ChromeDriverのpipインストールのコマンドは

(↓まだインストールコマンドを実行せず、先を読んで下さい)

pip install chromedriver-binary

でインストールでき、プログラム中で

import chromedriver_binary

インポートすることでパスが通ります。

この方法でChromeDriverを使用する場合、かならず上記のインポート記述が必要になるので覚えておきましょう。

 

使用しているGoogle Chromeのバージョン確認

続いて使用しているGoogleChromeのバージョンを確認していきます。

お使いのGoogle Chromeを開き画面右上の縦「…」から

ヘルプ(H)>Google Chromeについて(G)

へ進みます。

aboutGoogleChrome

 

僕が使用しているGoogle Chromeのバージョンは「85.0.4183.102」だと分かりました。

chromeversion

 

なぜバージョンを確認するかというと、先ほど上記で紹介した

pip install chromedriver-binary

を使ってChromeDriverを利用しようとすると下記のようなエラーが出てしまうからです。

chromeversion-error1

これは最新バージョンのChromeDriverしかサポートしていないという表示でした。

 

したがって上記で確認した「現在使用しているChromeDriverのバージョン」に対応したChromeDriverをインストールする必要があります。

僕が使用しているChromeDriverのバージョンは「85.0.4183.102」だったので

pip install chromedriver-binary==85.0.4183.102

とコマンドを入力しましたが

chromedriver-binaryverionlist

とバージョンが対応していませんと返されました。

もちろん、使用しているChromeがChromederiver-binaryと対応していれば、問題ありませんが、バージョンに対応していない場合もあります。(僕はバージョン対応していませんでした。)

 

このような場合は同じ「85」のバージョンで一番最新のものをインストールすれば問題ありません。

今回の場合は

pip install chromedriver-binary==85.0.4183.87.0

としてインストールすれば実行できるようになります。

 

chromedriverのバージョン違いによって生じるエラーは当サイトでも下記記事にて詳しく記載しているので、合わせてご覧ください。

ChromeDriver only supports Chrome version ※※の対処方法とseleniumとの組み合わせ

 

PythonでGoogleChromeを自動操作する

パッケージのインストールができたら実際にコードを記述してGoogleChromeの自動操作を行っていきます。

 

PythonでWEBサイトへアクセスする

PythonでWEBブラウザへアクセスするには

driver.get(‘URL’)

というget()メソッドを使用します。

 

実際にGoogleChromeを開くプログラムを下記のように記述して実行してみます。

# scraping.py

from selenium import webdriver
import time
import chromedriver_binary

driver=webdriver.Chrome()
driver.get('https://www.google.com/')
driver.implicitly_wait(1)
time.sleep(1)

 

「import chromedriver_binary 」は上記でも説明したとおり、ChromeDriverのPathを通す記述です。

 

また「implicitly_wait(1)」はget()メソッドで指定したサイトが見つかるまでの待ち時間を1秒与える記述です。

実行してみると

Chrome-automatictest

画面上で

Chromeは自動テスト ソフトウェアによって制御されています

と表示されていることがわかります。

 

検索条件を入力し結果を表示する

続いては、検索条件を入力して表示していきます。

検索は

search_bar = driver.find_element_by_name(“q”)

search_bar.send_keys(“Webスクレイピング”)

search_bar.submit()

と記述することで検索窓に条件を打ち込んで検索をかけることができます。

 

検索を入力するときにはページ要素を見つけるため、SeleniumのWebDriverメソッドを使用しています。

”Webスクレイピング”の部分を他の検索条件に変えることで、様々なキーワード検索をすることも可能です。

実行すると

Chrome-search-webscraping

のように自動テスト画面で「Webスクレイピング」の検索結果が表示されていることがわかります。

 

ちなみに要素検索をするSeleniumのWebDriverメソッドは他にも下記があります。

メソッド 内容
find_element_by_name(name) name属性の要素を検索
find_element_by_id(id) id属性の要素を検索
find_element_by_css_selector(selector) CSSセレクタにマッチする要素検索
find_element_by_link_text(text) textに全て一致する<a>要素検索
find_element_by_partial_link_text(text) textに一部一致する要素検索

これらを使いこなせると検索時に役立てます。

 

検索キーワードからタイトルを取得

では検索キーワードからタイトルを取得していきます。

Chrome-verification

空白部分で

右クリック>検証(I)

をクリックしてWebページのコードを表示します。

 

Chrome-search-h3

検証でコード記述一覧を開いたら、矢印が左上方向に向いているボタン

Select an element in the page to inspect it (Ctrl+Shift+C)

をクリックして選択箇所のコードを表示できるようにします。

 

この状態で「Webスクレイピング」で検索したページのタイトルへマウスを移動すると選択箇所のコードを表示することができます。

GoogleChromeではタイトルのタグは「h3」とわかります。

 

このことを使って

for elem_h3 in driver.find_elements_by_xpath(‘//a/h3’):

elem_a = elem_h3.find_element_by_xpath(‘..’)

print(elem_h3.text)

print(elem_a.get_attribute(‘href’))

と記述することで、現在のページのサイトタイトル名とURLを一覧で取得することができます。

 

Xpathについてはこの方の記事が非常に分かりやすいのでオススメです。

AI-interのPython3入門:図解!Xpathでスクレイピングを極めろ!

 

以上の内容を下記のコード記述としてまとめ

# scraping.py

from selenium import webdriver
import time
import chromedriver_binary

driver=webdriver.Chrome()
driver.get('https://www.google.com/')
driver.implicitly_wait(1)
time.sleep(1)

search_bar = driver.find_element_by_name("q")
search_bar.send_keys("Webスクレイピング")
search_bar.submit()

for elem_h3 in driver.find_elements_by_xpath('//a/h3'):
    elem_a = elem_h3.find_element_by_xpath('..')
    print(elem_h3.text)
    print(elem_a.get_attribute('href'))

 

Pythonファイルを実行してみると

scrapingpy-result

とタイトルとURLを表示することができました。

※トラブル防止のため、モザイク処理をしています

 

今回は基礎をベースにWEBページのタイトル、URLの取得を行いましたが、

プログラム内でTOP30記事のタイトルを分析して、どの語句が良く使われているか

を調べてタイトル決めの手助けとして使うのも面白そうだなと思いました。

 

今回、参考にしたサイト等はこちら

キノコードさん:「Pythonで面倒な「ブラウザ操作」や「データ収集」の作業を自動化しよう|Webスクレイピングのやり方をわかりやすく解説」

 

Qiita:Python+SeleniumでChromeの自動操作を一通り

 

Qiita:[selenium向け]ChromeDriverをpipでインストールする方法

 

AI-interのPython3入門:図解!PythonでSeleniumを使ったスクレイピングを徹底解説!

 

 

また当サイトでは、IBM Watsonを使ったPythonによる「画像分析」なども紹介しているので興味がある方は挑戦してみてください。

[Graspy:AI初心者向け講座感想]IBM WatsonとPythonによる画像分析

 

お疲れ様でした。

scraping-GoogleChrome1
学びに関する情報をチェック!