WebサイトからデータをExcelに取得する方法④

みなさん、こんちには!

いよいよ取得したテキストから、必要な項目を切り分けていきましょう。
Internet Explorerを使う場合は、下記のようなメソッドが使えるのですが、

getElementById                id属性値で指定
getElementsByClassName  Class属性値で指定
getElementsByName         Name属性値で指定
getElementsByTagName    タグ名で指定

今回は、テキスト操作に今後も役立つ区切り文字で取得していきたいと思います。

下記は、区切り文字で切り出すためのコードになります。
私自身かなりの頻度で使っています。

Function SplitGet(strExpr As String, ByVal strSep As String) As String
    Dim p1 As Long, p2 As Long
 
    SplitGet = ""
    If strExpr = "" Or strSep = "" Then Exit Function
    For p1 = 1 To Len(strExpr) Step Len(strSep)
        If Mid$(strExpr, p1, Len(strSep)) <> strSep Then Exit For
    Next
    
    p2 = InStr(p1, strExpr, strSep)
    If p2 = 0 Then
        SplitGet = Mid(strExpr, p1)
        strExpr = ""
    Else
        SplitGet = Mid(strExpr, p1, p2 - p1)
        strExpr = Mid(strExpr, p2 + Len(strSep))
    End If
End Function
 
それでは、テスト的に商品名を取り出したいと思います。こちらのサイト「https://www.rakuten.co.jp/」から、もう少し実用的な商品一覧ページ「https://www.rakuten.co.jp/category/555086/?l-id=top_normal_gmenu_d_ladiesfashion_001」から切り分けていきます。

テキストを見ながら 商品一覧ページをブラウザで見てみると、
<div class=”dui-container searchresults”>
から、商品一覧が始まっていると思われるので、それまでの文字列をこのタグで区切って取り除いてみましょう。

 

Dim TmpStr As String
TmpStr = SplitGet(HTML_str, "<div class=" & Chr(34) & "dui-container searchresults" & Chr(34) & ">")
 

文字列の中に「”」を表示するとエラーになるので「” & Chr(34) & “」に置き換えています。

次に商品一覧が終わったと思われる下記までを タグで区切って取り除いてみましょう。
<div class=”dui-container pagination _centered”

Dim Shohin_str As String
Shohin_str = SplitGet(HTML_str, "<div class=" & Chr(34) & "dui-container pagination _centered")
 
Shohin_str 変数に商品一覧部分のテキストが代入されました。
それでは、商品名を取得してみましょう。
商品名は <a title= ・・・・・ > 商品名 </a> のようにタグで囲まれるので抽出してみましょう。しかし「 ・・・・・ 」の部分は、商品によって変わりますので、分割して取り除きます。
これをコードに表して見ましょう。
 
Dim TmpStr As String
Dim SyohinName As String
TmpStr = SplitGet(Shohin_str, "<a title=")
TmpStr = SplitGet(Shohin_str, ">")
SyohinName = SplitGet(Shohin_str, "</a>")
 
SyohinName 変数に商品名が代入されました。

次回は、総まとめで商品一覧の中の商品名全てをシートに抽出したいと思います。