テーブル要素から データを抜き出したい
Excel VBAでEdge/Chromeを操作する際、Web上の表(テーブル要素)からデータを抜き出す処理も多いです。
■テーブル要素を抜き出したい
・メルカリから、落札相場のデータを取得したい
・ラクマから、出品データの動向を探りたい
・株価の値上がり率や値下がり率上位のデータを取得したい
・特定の株の時系列の株かを取得したい
・メルカリから、落札相場のデータを取得したい
・ラクマから、出品データの動向を探りたい
・株価の値上がり率や値下がり率上位のデータを取得したい
・特定の株の時系列の株かを取得したい
テーブル要素から データを抜き出すサンプルコード
トヨタ自動車株式会社(証券コード7203)の時系列の株価を取得します。
サンプルでは時系列の一部しか取得しません。
aタグの次へボタンを押すことで、さらに過去のデータも取得可能です。
Public Sub sample()
'■chrome かEdgeどちらかを選択。
driver.Start "chrome"
' driver.Start "edge"
'■トヨタの株価にアクセス
driver.Get "https://info.finance.yahoo.co.jp/history/?code=7203.T"
Dim i As Long: i = 1
Dim j As Long: j = 1
'■テーブルデータを取得 trタグを取得
For Each tr In driver.FindElementsByTag("tr")
'■■thタグを取得(タイトル行)
For Each th In tr.FindElementsByTag("th")
Cells(i, j) = th.Attribute("innerText")
j = j + 1
Next th
'■■tdタグを取得(データ行)
For Each td In tr.FindElementsByTag("td")
Cells(i, j) = td.Attribute("innerText")
j = j + 1
Next td
'■■列(j)をリセットし、行(i)を+1する
i = i + 1
j = 1
Next tr
End Sub
注意点
- IE自動操作の場合は、上記の記載方法はなじみがありますが、SeleniumBasicには専用のメソッド(.AsTable)が用意されています。
- 今回の記事より、専用のメソッド(.AsTable)の方が簡単に取得できます。
- テーブルタグ( tr th td )はHTMLを少し理解する必要があります。
tr (Table Row)
表の横一行。trタグ内にth要素やtd要素が存在。
th(Table Header)
表の見出しセル。thタグ内に見出しテキストが存在。
td(Table Data)
表の値セル。tdタグ内に値のテキスト(もしくは数値)が存在。
表の横一行。trタグ内にth要素やtd要素が存在。
th(Table Header)
表の見出しセル。thタグ内に見出しテキストが存在。
td(Table Data)
表の値セル。tdタグ内に値のテキスト(もしくは数値)が存在。
SeleniumBasicについて
Internet Explorer11 のサポート期限が2022年6月までと、スクレイピング自体入れ替えていく必要があります。
今一番スムーズなのはSeleniumBasicを使用したスクレイピングと考えます。
但し、VBAでのネット記事は少なく困っている方も多いと思います。
弊社で代行開発も可能ですので、お気軽にご用命ください。
コメント