【SeleniumBasic】スクレイピングで複数情報を取得するにはClassによる指定が便利

VBAスクレイピング

こんにちは、blueです。

スクレイピングをする際

  • CssSeletorによる取得以外の方法を知らない
  • 一度に多くの情報を取得したい

という方は多いんじゃないでしょうか?

そんな場合はClassによる取得方法を理解するのが良いです。
今回はこのClassによる取得方法について説明します。

VBAを使ったものではありませんが、Seleniumを勉強する為の基本的な書籍です。ブラウザやキー操作の基本的なコマンドは共通していますのでコードを書く際の参考になります。

VBAの書籍の中でSeleniumBasicを取り上げている数少ない書籍ですページ数としては20ページほどですがとてもわかりやすく書かれています。またVBA全般を網羅した内容が書かれており、長く使用することができます。

スポンサーリンク

Classとは

Classは、HTMLタグに書けるグループ分けの目印です。
classって何?CSSと組み合わせて使う方法を徹底解説

Classは通常HTML内で一意ではありません。その為特定の情報取得には向いていません。
しかしFindElementsメソッドでClassの要素をすべて取得する使い方ができます。

ちなみにClass名は以下の様に半角スペースを空けて記述されることがあります。

この場合は「class1 class2 class3」という名称ではなく、「class1」, 「class2」, 「class3」という名称であることに注意ください

Classでの要素の取得方法

Classでの要素の取得方法は以下になります。

つのClass名から要素を取得する際は以下の様にclass名を記載するだけです。

  • Driver..FindElementByClass(“class名”)

一方2つ以上のclass名から要素を取得する場合は以下の方法になります。

  • Driver..FindElementByCss(“.class名1. class名2”)

ClassをCssに変えて、class名の前に.(ドット)を付けてスペースを削除します

ちなみに同じClass名を持つ要素が複数ある場合は一番最初にある要素を取得します。

Classによる複数要素の取得方法

Classでの複数要素の取得方法は以下になります。

一つのClass名から複数の要素を取得する際はFindElementsByClassメソッドを使います。

  • Driver..FindElementsByClass(“class名”)

取得した複数要素から特定の順序にある要素を取得する場合は以下の様にインデックスで記述します

  • Driver..FindElementsByClass(“class名”)(インデックス番号)
  • Driver..FindElementsByClass(“class名”).Item(インデックス番号)

ちなみにFindElementsメソッドのインデックスは1始まりです。

取得した複数要素から一つ一つの情報を取得するにはFor Each~Nextを用います

  • For Each WebElement in WebElements
    ~必要な処理~
    Next

サンプルコード

Yahooのサイトから主要ニュース情報を取得する方法は以下になります。

Sub sample()
    Dim Driver As New Selenium.WebDriver
    
    Driver.Start "Chrome" 
    Driver.Get "https://www.yahoo.co.jp"
        
    '記事を一式取得する
    Dim elms記事 As WebElements
    Dim elm記事 As WebElement
    
    Set elms記事 = Driver.FindElementsByClass("_3S2Q2j3wAQxbug02Q7t3dO")

    For Each elm記事 In elms記事
        Debug.Print elm記事.Text
    Next

End Sub

class名にはliタグ内にある値を用いています。こうすることで複数の要素を同時に取得することができます。

クリックすると拡大します

結果としては以下になります。

クリックすると拡大します

.Text要素内にあるテキストをすべて取得するメソッドです。

ただこの場合だと「記事の名称」、「New」という表示、「コメント数」すべてを取得してしまいます。

それぞれについてうまく切り分ける方法は以下の記事で紹介していますのでご参考ください。

まとめ

今回はClassによる取得方法について説明しました。

  • Classでの要素の取得方法はFindElementByClassあるいはFindElementByCssを用いる
  • Classでの複数要素の取得はFindElementsByClassを用いる

となります。スクレイピングでの取得にはぜひClassを利用してください。

VBAを使ったものではありませんが、Seleniumを勉強する為の基本的な書籍です。ブラウザやキー操作の基本的なコマンドは共通していますのでコードを書く際の参考になります。

VBAの書籍の中でSeleniumBasicを取り上げている数少ない書籍ですページ数としては20ページほどですがとてもわかりやすく書かれています。またVBA全般を網羅した内容が書かれており、長く使用することができます。

コメント

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