こんにちは、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全般を網羅した内容が書かれており、長く使用することができます。
コメント