きむおばプロフィール画像

きむおばです。関東在住の40代の主婦です。 契約社員・派遣・フリーランスの3足のわらじ中。フリーランスでは、ファイナンシャルプランナーとしてライターやセミナー講師をしたり、サイト制作やプログラムを作ったりしています。
お金・子育て・趣味のこと…何でも気ままに書く雑記ブログです。
目標は、ライター・サイト制作・広告他の収入バランスを整えること。ブログ収入UPに今年も力を入れます。

Menu
主婦の働き方・稼ぎ方 

Excel VBAでChromeブラウザ内をWebスクレイピングする方法と注意点

Excelの活用でもっと事務処理を時短化

ExcelVBAからIEの操作はいろいろと試してきましたが、普段使用しているChromeブラウザから必要な情報を収集できる方法を探ってみました。

Excel VBAでChromeブラウザをスクレイピングするための下準備

Excel VBAでChromeブラウザ内をスクレイピングするためには、次の下準備が必要です。

  1. Selenium Basicのダウンロードとインストール
  2. Chrome Driverのダウンロード
  3. Selenium Type Libraryの参照設定

Selenium Basicのダウンロードとインストール

Selenium Basicとは、VBAからChromeを簡単に操作できるようになるライブラリ(追加機能がまとめられたファイル)です。

下のリンクから、Selenium Basicをダウンロードしてインストールをしておきましょう。

>>>SeleniumBasic Github

>>>seleniumBasicのダウンロード

Chrome Driverのダウンロード

ChromeDriverとseleniumBasicのバージョン違いエラー
Selenium Basic内のCromeドライバーと使用中のChromeのバージョンが異なると、エラーが発生してしまいます。

そのため、使用中のChromeのバージョンを「ヘルプ」→「Chromeについて」メニューで選択して確認しましょう。
Chromeのバージョン確認方法

確認できたChromeのバージョンに合うChrome Driverを下のリンクからダウンロードします。

>>>Chrome Driverのダウンロード

ダウンロードしたChrome DriverをインストールしたSelenium Basicフォルダ内へコピーをして、上書きしてしまえばOKです。

Selenium Type Libraryの参照設定

インストールしたSelenium BasicをVBAで使用できるように、Selenium Type Libraryの参照設定をしておきます。

「開発」メニュー→「VisualBasic」→「ツール」→「参照設定」で、Selenium Type Libraryを見つけてチェックを入れれば完了です。
ExcelVBA参照設定 Selenium

これで、Excel VBAの中から、簡単にChromeをスクレイピングできるようになりました。

ExcelからWebの情報を取得できるのはWEBSERVICE関数

WEBSERVICE関数を使えば、ExcelからWebデータを取得することが簡単にできます。

WEBSERVICE(“URL”)

WEBSERVICE関数の引数はURLのみ。データを取得したいURLを設定するだけです。

Excel VBAでSelenium.ChromeDriverを使えばChromeのスクレイピングが簡単

Selenium.ChromeDriverを変数宣言すると、使用できるようになります。

Selenium.ChromeDriverで便利なメソッド一覧

Get URL指定してブラウザ起動
Close ブラウザを閉じる
Actions Click,DoubleClick,Sendkey他アクション設定
FindElementByClass Class名で要素を検索
FindElementById Id名で要素を検索
TakeScreenshot スクリーンショット

Selenium.ChromeDriverを使えば、指定したURL内の必要な情報だけを取得してExcelシートに設定することが自動化できます。

サンプルコードを置いておきます。
とある1ページ内に画像が20ずつ公開されているサイトから、画像タイトルを抜き出してセルに自動入力していくプログラムです。

Sub btn_click()
    
    Dim driver As New Selenium.ChromeDriver
    Dim strValue As String
    
    Dim intCnt As Integer
    Dim intDataCnt As Integer
  Dim intimgCnt As Integer
        
    
    intDataCnt = Worksheets("sheet1").Range("A1").End(xlDown).Row
    
    For intCnt = 2 To intDataCnt
        driver.Get Worksheets("sheet1").Cells(intCnt, 7)        
        for intimgCnt = 0 to 19
            strValue = driver.FindElementByXPath("//*[@id="mainList"]/li[intimgCnt]/a/span").Text            
            Worksheets("sheet1").Cells(intCnt, intimgCnt).Value = strValue
        Next
    Next
    
    driver.Close
    Set driver = Nothing
    

End Sub

Webスクレイピング利用時の注意点

Webスクレイピングを使って、天気や株価、商品情報などを収集している方がいますね。

APIやサイトによっては、スクレイピングを禁止してたりしますし、あまりにも大量のデータや繰り返し行うと、IPブロックされてしまったりボット認定で拒否される可能性もあるので、万能ではないことを心得ながら利用してみてください。

最悪、異形業務妨害で逮捕されて20日間も拘留された例もあるんですよね…警察の無知ゆえの事件だったように思いますが。
>>マスコミ報道だけでは分からない岡崎図書館事件

データ解析ではPythonが主流かもしれませんが、ちょっとしたデータ収集であれば、日ごろ使い慣れたVBAでさっと作ってしまった方が時短できるかもしれません。

あくまでも、個人的で常識の範囲で使用しましょうね。相手のサーバーに負荷を掛け過ぎないよう気を付けましょう。

Excelの活用でもっと事務処理を時短化
Twitterで最新情報をお知らせ
記事がお役に立てたらシェアお願いします♪