テーブル要素から データを抜き出したい
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でのネット記事は少なく困っている方も多いと思います。
弊社で代行開発も可能ですので、お気軽にご用命ください。
コメント