【VBA】楽天ランキングページをWebスクレイピング①

VBAで実践するWeb操作 Excel

前回までに説明した内容をもとに、楽天のランキングページをWebスクレイピングしてみましょう。

前回記事はこちら

大まかな流れ

  1. 楽天ランキングページ(https://ranking.rakuten.co.jp/weekly/)にアクセスし、「ページ全体」を取得する。
  2. 「ページ全体」から、ランキングに掲載されている「商品」を1件ずつ取得する。
  3. 「商品」から、「値」(商品名、価格、URL)を取得する。
  4. 「値」を書きだす。
  5. 2~4を商品の数だけ繰り返す。

Webスクレイピングに必要な処理は毎回ほぼ同じ

こうして見ると、大まかな流れは前回の記事とほとんど変わらないことが分かります。
一度全体の流れが理解できれば、処理が異なる一部だけを対象ページ、データに合わせてアレンジすれば応用が可能です。

1.「ページ全体」を取得する

この部分は、前回と同じ方法が使えそうです。

2.「ページ全体」から、ランキングに掲載されている「商品」を1件ずつ取得する。

「商品」が取得したページのどの部分になるか、HTMLを見ながら検討が必要になりそうです。

3.「商品」から、「値」(商品名、価格、URL)を取得する。

2と同様、HTMLを見ながら検討が必要になりそうです。

4.「値」を書きだす。

取得した値を書きだします。
今回は「商品名」「価格」「商品詳細ページのURL」を対象とします。

5.2~4を商品の数だけ繰り返す

ランキングページには複数の商品が掲載されているので、商品の数だけ繰り返します。
今回のサンプルでは1位~3位の商品を出力します。

サンプルソース

実際のソースと実行結果は以下のようになります。

Option Explicit


Sub getElm()
    
    '■1.前処理
    'IEのオブジェクトを作成
    Dim ie As InternetExplorer
    Set ie = New InternetExplorer
    
    'IEが開かないように設定
    ie.Visible = False


    '■2.本処理
    '指定のURLを開く
    ie.Navigate ("https://ranking.rakuten.co.jp/weekly/")
        
    'ページの読み込みが完了するまで待つ
    Do While ie.readyState <> READYSTATE_COMPLETE
        'OSに制御を戻す
        DoEvents
    Loop
             
    
    Dim products As Object
    Dim product As Object
    Dim name As String
    Dim price As String
    Dim url As String
    Dim rank As Integer
    rank = 1
    
    Set products = ie.Document.getElementsByClassName("rnkRanking_top3box")
    For Each product In products
        
        name = product.getElementsByClassName("rnkRanking_itemName")(0).innerText
        price = product.getElementsByClassName("rnkRanking_price")(0).innerText
        url = product.getElementsByClassName("rnkRanking_itemName")(0).getElementsByTagName("a")(0).href
        Debug.Print "■第" & rank & "位"
        Debug.Print "商品名:" & name
        Debug.Print "価格:" & price
        Debug.Print "URL:" & url
        rank = rank + 1
    
    Next product
      
      
    '■3.後処理
    ie.Quit
    Set ie = Nothing
            
End Sub

次回の予定

次回以降、手順に沿って具体的な説明に入ります。

コメント

  1. 匿名 より:

    書かれているコードを実行すると、2回に1回はフリーズしてしまいます。。
    なぜでしょうか?

    • タナイ より:

      コメントありがとうございます!
      IEにプラグインをたくさん入れてしまっているですとか、スタートページが大量にあるなど、
      なんらかの要因でプログラムがIEを開く処理が重く、PC処理が詰まってしまっているかもしれません。
      ie.Visible = Trueにしてieが正常に立ち上がっているかを確認してみてください。

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