【簡単】VBAとIEでページ内の商品情報(div)を順番にすべて取り出す方法

IE関係
この記事は約5分で読めます。
スポンサーリンク
スポンサーリンク

【簡単】VBAとIEでページ内の商品情報(div)を順番にすべて取り出す方法

VBAを用いてIEを動かし、HTMLの情報を持ってくることに慣れてくると、

Div

の内容を書き出したいという要望が出てくると思います。

というのも、「DIV」とは、単体では特に意味を持たないタグですが、
<div>で囲った部分をブロックレベル要素としてグループ化することができるタグになっています。

グループ化することで、
・水平方向の位置をまとめて指定したり、
・指定した範囲にスタイルシートを適用したりすることができる
ため、商品の情報などは、divタブに囲まれていることが多々あります。

例えば、楽天の商品ですが、下記のように、
div でグループ化されており、
class=”dui-card searchresultitem”が紐づけられています。

ですので、商品情報を持ってきたい場合、
classnameが、”dui-card searchresultitem”のdivの内容順番に取り出すて行くことで、
表示されているページの、商品情報の一覧を得ることができます。

コードサンプル

コードのサンプルとして、
「ふるなび」のあるページの商品情報を持ってくるコードを書いてみました。

ふるなびの場合、”product-info”がクラスネームになっておりますので、

・If A.className = “product-info” Then (product-infoだった場合、)
・For Each B In A.ALL  (div内の要素を取りだし)
・YOUSO(i + 1, J) = B.INNERTEXT (innertextを配列に格納)

最後にエクセル内に書き出すことで、商品情報一覧を書き出しています。

Sub IEoutput2()
  
 Application.ScreenUpdating = False
   
'IEの起動
Dim objIE As Object
   
Set objIE = GetObject("", "InternetExplorer.Application")
   
objIE.Visible = True
       
       
    objIE.Navigate "https://furunavi.jp/Product/Search?subcategoryid=164,165,166,167,168&categoryid=17&order=3&layout_toggle=2&pagesize=100"  ' このURLを任意に変更
       
    ' ページの表示完了待ち。
    While objIE.ReadyState <> 4 Or objIE.Busy = True
        DoEvents
    Wend
   
    On Error Resume Next      '値がないとエラーが出るので、エラー回避用
  
    i = 1  '開始行を指定
    J = objIE.document.ALL.Length  '要素の数を知る
      
     
     Dim A As Object
     
        Application.Wait Now() + TimeValue("00:00:03")
     
       
    Dim YOUSO(10000, 0 To 14) As String
    J = 0
        
    For Each A In objIE.document.getElementsbytagname("*")
    
    If A.className = "product-info" Then

        For Each B In A.ALL
         YOUSO(i + 1, J) = B.INNERTEXT
         J = J + 1
         
        Next

        J = 0
        i = i + 1
           
       
    End If
                    

        
    Next
      
    Range(Cells(2, 2), Cells(i, 15)) = YOUSO
 
     Cells.WrapText = False
  
  
 Application.ScreenUpdating = True
 Application.StatusBar = False
  
   
End Sub

重要な要素を簡単に説明

特に難しいところはないと思いますが、特定のページを立ち上げた後、

まずは、

For Each A In objIE.document.getElementsbytagname(“*”)

で、HTMLのすべての要素を検索しに行っています。

その中で、classnameが特定の値であった場合、分岐させて、

For Each B In A.ALL

で次はdivの中身を検索しに行っています。
中身の情報は、
divごとに行を分け、
列方向に、情報を書き出していっています。

まとめ

このコードを覚えることで、
様々なサイトの商品情報などを簡単にまとめることができます。

ぜひ一度試してみてください。

その他、VBAでIEを動かすために必要な情報をまとめています!!

コメント欄

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