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

このブログではアフィリエイト・アドセンス広告を利用しています

当ブログでは、アドセンス・アフィリエイト広告を掲載しています。
消費者庁が発表しているルールに沿って記事を作成していますが、問題のある表現を見つけた際にはご連絡ください。

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でさっと作ってしまった方が時短できるかもしれません。

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

    同じカテゴリの関連記事リスト