【エクセルVBA】スクレイピング

VBA

※本サイトはアフィリエイト広告を利用しています。

以前こちらの記事でスクレイピングの準備の説明をしたのですが、今回はその続き、要素の取得編になります。
前回はサイトを開くところまでやりましたので、今回はボタンクリックなど、実際の動作を自動化してみましょう!
説明するのは「検索窓に文字を入力する」と「『検索』ボタンをクリックする」の2点です。

要素の指定

  • 検索窓に文字を入力する
  • 検索ボタンをクリックする

について説明するのですが、皆さん検索窓に入力するときにどうやって検索窓の場所を探してますか?
「検索」のボタンがどこにあるかどうやって判断してますか?
もちろん目で見てですよね^^;
検索窓がどこにあるかわからないのはVBAも同じなので、検索窓の場所を教えてあげる必要があります。ファイルを開くときに、「どのフォルダに入っている何て言う名前のファイルだよ~」ってVBAに懇切丁寧に説明しないといけないとファイルが開けないのと同じですね。

というわけでまず、要素の指定の仕方を説明します!
※「WEBページ上のどの部分だよ」っていう情報を”要素”と呼んでいます。

要素の取得

まずは指定をするために要素を取得します。Stepは下記の5つです。

  • F12キーを押す → ブラウザの右側にページの中身が書かれたウインドウが開く
  • 矢印のついたアイコンをクリック
  • 検索窓(など要素を取得したいもの)をクリック
  • 右側のウインドウの中で、選択された部分を右クリック
  • 要素をコピー

文字で見てもわかりづらいので、動画で手順を紹介しています。40秒の動画なので、チラッと見てイメージをつかんでもらえばと^^

動作デモ

Copyのところでどれをコピーしたらいいの?って思うと思います。

これだけ種類があるので悩みますよね^^;
結論、どれでもお好きなものをコピーしてもらってOKです。このあとで説明するのですが、要素の指定の仕方がいくつかあって、指定の仕方にあったものをコピーしてくればよい、ということになります。

要素の指定

それでは、要素の指定の仕方について説明していきます。

人間は目で検索窓の位置を探しますが、VBAは指示された要素をWEBサイトの情報の中から探してきます。その時に使うのがdriver.FindElementBy○○というものです。○○のところがいくつかパターンがあって、主なものは次の通り。

  • FindElementById:id属性を使用して要素を特定
  • FindElementByName:name属性を使用して要素を特定
  • FindElementByXPath:XPathを使用して要素を特定
  • FindElementByTagName:タグ名を使用して要素を特定
  • FindElementByClassName:class属性を使用して要素を特定
  • FindElementByCss:CSSセレクタを使用して要素を特定

WEBサイトの作りによってどの要素が設定されているかが異なってくるので、取得できるものとできないものがあります(設定されていないものは取得のしようがないためです)。
私はXPathが使いやすいかなと思っていますが、どれを使っても大丈夫です!2,3こ覚えておいて、どれかが使えたらいいな、くらいの感じで選んでOK!

コードはこんな感じになります。

driver.FindElementByXPath(“Full Xpathのコピーを貼りつけ“)

動作の指定

では、要素の取得と指定の仕方がわかったので次は「要素に対して何をするか」を指定していきます。

主に使う動作としては

  • SendKeys:テキストボックスに値を設定する(今回の「検索窓に文字を入力する」がこれに当たります)
  • Click:ボタン/リンクなどをクリックする(今回の「検索ボタンをクリックする」がこれに当たります)
  • Attribute(“src”):画像を取得(srcは画像のURLなので、画像のURLが取得できます)

だいたいこの3つを覚えておけば大丈夫です。一番よく使うのはClickですね。リンクやボタンをクリックして、ページの遷移をして情報を得たいページにたどり着く必要があるので。

サンプルコード

それでは、これらを踏まえて実際のコードを見てみましょう。

Sub sample()

    Dim Driver As New ChromeDriver
     
    'ページを開く
    Driver.Get "https://www.yahoo.co.jp/"
    
    Driver.Wait 1000
    
    '検索窓に文字を入力
    Driver.FindElementByXPath("/html/body/div/div/header/section[1]/div/form/fieldset/span/input").SendKeys ("テスト")
    
    '検索ボタンをクリック
    Driver.FindElementByXPath("/html/body/div/div/header/section[1]/div/form/fieldset/span/button").Click
    
    Driver.Close
    
    Set Driver = Nothing
  
End Sub

最初に要素を指定して、そのあとに動作を指定するsendkeyclickを付け足す書き方になります。シンプルでわかりやすいですね^^

ちなみにDriver.がついているコードがたくさんあるので、 With Driver でくくってもOKです。
くくるとこうなります。

Sub sample()

    Dim Driver As New ChromeDriver
     
    With Driver
    
        'ページを開く
        .Get "https://www.yahoo.co.jp/"
        
        .Wait 1000
        
        '検索窓に文字を入力
        .FindElementByXPath("/html/body/div/div/header/section[1]/div/form/fieldset/span/input").SendKeys ("テスト")
        
        '検索ボタンをクリック
        .FindElementByXPath("/html/body/div/div/header/section[1]/div/form/fieldset/span/button").Click
        
        .Close
    
    End With
    
    Set Driver = Nothing
  
End Sub

解説動画

動画にて解説をしております。実際の画面を見ながらの方がわかりやすいと思いますので、ぜひこちらも見てみてください。

【エクセルVBA】ウェブスクレイピング

まとめ

今回はスクレイピングの第一歩として「要素の取得」と「動作の指定」の仕方を解説しました。

これを使えばIDやパスワードを入力してログインなどもできますし、ボタンなども押せますのでデータファイルのダウンロードもできるようになります。

毎月同じような作業が発生する場合に使ってみるとかなり時短になると思います。
この記事がどなたかの参考になれば嬉しいです!


お問い合わせ、お仕事のご依頼などがありましたら下記のお問い合わせフォームからご連絡ください。
お問い合わせフォーム
VBAの作成であれば3万円ほどから、自分で使うVBAの書き方で詰まっている方のお手伝いであれば5,000円ほどから承ります。

お問い合わせ、お仕事のご依頼などがありましたら下記のお問い合わせフォームからご連絡ください。
お問い合わせフォーム
VBAの作成であれば50,000円ほどから、自分で使うVBAの書き方で詰まっている方のお手伝いであれば10,000円ほどから承ります。

VBA
スポンサーリンク
スポンサーリンク
りこをフォローする
エクセルVBAの寺子屋

コメント

タイトルとURLをコピーしました