今回WebブラウザとしてChromeでのWebスクレイピングを勉強しました。ただ理解には複数のサイト閲覧が必要だったのでその備忘録も含めてまとめて記載します。
結論としては最初のSelenium立ち上げのコードさえ覚えてしまえばあとは少しのメソッドの利用で誰でもテキストを取得できます(IEは取得などに色々なコードの勉強が必要なのですがこちらはすごく簡単です)
「ここだけ覚えておけばいい」という必要なところだけをまとめていますので参考になれば幸いです。
なお手っ取り早くスクレイピングを体験したいという方はこちらをどうぞ。Yahooメールを例としてサイトの取得からクリック、パスワードの入力といった基本操作について記載しています。
VBAを使ったものではありませんが、Seleniumを勉強する為の基本的な書籍です。各言語における基本的なメソッド一覧も記載されていますのでコードを書く際の参考になります。
VBAの書籍の中でSeleniumBasicを取り上げている数少ない書籍です。ページ数としては20ページほどですがとてもわかりやすく書かれています。またVBA全般を網羅した内容が書かれており、長く使用することができます。
事前準備
Excel VBAでSeleniumBasicを使用してGoogle Chromeを操作するためには、SeleniumBasicのインストール、Chromeドライバーのインストール、Excel VBAへの参照設定が必要となります。
これらの設定方法については以下の記事に詳しくまとめていますのでご確認ください。
この記事の構成
Webスクレイピングにおいては以下の3つが基本になります。
- ブラウザ操作
- 要素の取得
- 要素への入力
以下で詳しく説明します。
ブラウザ操作
以下ブラウザ操作に関するメソッドを集めています。
Chromeの起動(Startメソッド)
Seleniumを使用する為にはまず変数Driverが必要になります。ここだけはコピペがいいと思います。
Chromeの起動はDriverに対してStartメソッドを使います。
Dim Driver As New Selenium.WebDriver
Driver.Start "Chrome"
Webページへの遷移(Getメソッド)
指定のWebページへ遷移したい場合は、定義したDriverに対してGetメソッドを使用します。
'新規URLの立ち上げ
Driver.Get("URL")
新しいタブに移る(SwithToNextWindowメソッド)
Webページによっては途中新規タブが開く場合があります。
ただ制御は新規タブには移らない為エラーになってしまいます。それを解消するのがSwitchToNextWindowメソッドになります。
'新しいタブに移る
Driver.SwitchToNextWindow
新しいタブを開いて新規URLを開く(ExecuteScriptメソッド)
別のURLを新規タブとして開いて操作したい場合は、ExecuteScriptメソッドを利用します。
()内にJavaScriptのコードを記載します。
’新規タブを開いて新規URLを開く
Driver.ExecuteScript("window.open('URL')")
JavaScriptを用いたコードを勉強されたい方はこちらもどうぞ。
(Seleniumにまだ慣れられてない方は気にされなくて結構です)。
取得
以下取得に関するメソッドを集めています。
テキストの取得(FindElementByCssメソッド+Text)
Chromeにおける要素の取得は非常に簡単で、基本はDriverに対してFindElementByCssメソッド一択で問題ないです。
なお文字の取得にはTextプロパティを使用します。
’要素の取得(文字の場合)
Driver.FindElementByCss("cssコード").Text
なおcssコードの取得方法は以下になります。以下に図でも示していますので合わせて参照ください
1 Chromeの右上の「3点リーダー」をクリックする
2「その他のツール」をクリックする
3「デベロッパーツール」をクリックする
4「要素の取得」ボタンをクリックする
5 取得したい場所をマウスでクリックする
6「デベロッパーツール」の青く塗りつぶされた場所を右クリックする
7「Copy」→「Copy Selector」でcssを取得する
あとはFindElementByCssの引数にコピーすればOKです。文字列なので””で囲うことを忘れないようにしてください。
入力
以下入力に関するメソッドを集めています。
Webページ内のテキストフィールドに入力する(SendKeysメソッド)
テキスト入力は取得した要素に対してSendKeysメソッドを使用することで可能です。
’テキストフィールドに入力
Driver.FindElementByCss("cssコード").SendKeys "テキスト”
Webページ内をクリックする(Clickメソッド)
Submitボタンやラジオボタンやチェックリスト、リンクテキストなど押す操作に関しては取得した要素に対してClickメソッドを使用することですべて可能です。
’Clickする
Driver.FindElementByCss("cssコード").Click
Webページ内のドロップダウンリストの値を設定する(AsSelect.Selectby〇〇〇メソッド)
リストの選択に関しては取得した要素に対してAsSelect.Selectby〇〇〇メソッドを使用することですべて可能です。選択方法により3種類ありますが一番わかりやすいのはAsSelect.SelectbyTextメソッドです。
’ドロップダウンリストの選択
Driver.FindElementByCss("cssコード").AsSelect.SelectbyValue ("")'html内のValueでの選択
Driver.FindElementByCss("cssコード").AsSelect.SelectbyIndex("") '順番で選択 最初は0
Driver.FindElementByCss("cssコード").AsSelect.SelectbyText("") 'テキストで選択
ここでのまとめ
SeleniumでChromeを操作するのは非常に簡単です。Driverに対して少しのメソッドを利用するだけで多くのことができますのでぜひ利用してみてください。
VBAを使ったものではありませんが、Seleniumを勉強する為の基本的な書籍です。各言語における基本的なメソッド一覧も記載されていますのでコードを書く際の参考になります。
VBAの書籍の中でSeleniumBasicを取り上げている数少ない書籍です。ページ数としては20ページほどですがとてもわかりやすく書かれています。またVBA全般を網羅した内容が書かれており、長く使用することができます。
↓困ったときは以下が頼りになります。私も利用させてもらってます😊。
SeleniumBasicでのWebスクレイピングに関する記事はこちらをどうぞ
Web-APIを用いたデータ取得に関する記事はこちらをどうぞ
【VBA】Web APIを使ってデータを取得する(OpenWeatherMap)1
【VBA】Web APIを使って時間別天気予報を取得する(気象庁API)
【VBA】Web APIを使ってLINE通知を行う(LINE Notify)1
VBAの資格に興味を持たれた方はこちらがお勧めです。筆者自身の一からの体験を記事にしており、初めての方目線で読んでいただけるようになっています。
コメント
大変参考になる情報、ありがとうございます。
なお、記事最後の
「VBAでのスクレイピングに関しての記事は以下をどうぞ」からのリンクですが、
リンク切れとなっているように思います。
“.com”が付いていない?
コメントありがとうございます。またリンク切れご指摘ありがとうございました😊。
確かにcomがついていなかったです。多くの範囲にわたるのでご指摘ありがとうございました。
スクレイピングも随時更新していきますのでご覧いただければ幸いです!