商品ページからボタン一つで情報を取り込むVBAプログラムの作り方(Amazon編①)


商品転売をされている方は、「商品名」や「商品価格」、「商品画像」といった商品データを普段どうやって取得していますか?

自ら手動で?

それともスタッフを雇って1件○円とかで集めてもらっていますか?

率直に言ってどちらの方法も時間お金の無駄ですね!

とりあえず商品販売は数日お休みにして、このページを見つつプログラムを作り上げてみませんか?今まで数万円掛けて外注していた仕事が、自動化することで全て一人でできる様になるかもしれませんよ?

ということで、今回は商品ページ上から「商品情報を取得するためのプログラム」の作り方をご紹介したいと思います。
※完全な初心者向けでは無いので所々説明は省いている場面があります。予めご了承下さい。

とは言ってもどんなページにも万能に対応できるものなんて作れませんので、今回は「Amazon」の商品ページを対象としたものを作ってみたいと思います。


スポンサーリンク

最初に準備するもの

まずは操作対象となる商品ページを開いておく必要があります。

とりあえずこの辺の適当な商品で構いませんので、InternetExplorer上で開いておいて下さい。


【Nintendo Switch対応】マイクロSDカード32GB for Nintendo Switch

次にVBAを利用するためのエクセルファイルを準備して下さい。

ファイルが用意できたら、早速エディタを起動して以下の様に処理を記述していきましょう。

'-----------------------------------------------------------------
'現在IEで開いているAmazonの商品ページの情報を、シート状に取得する
'-----------------------------------------------------------------
Sub main()
    Dim objIE As InternetExplorer       'Amazonの商品ページを格納
    Dim sProductName As String          '商品名
    Dim sProductPrice As String         '商品価格
    Dim sProductExplain As String       '商品説明
     
End Sub

※もちろん宣言はこれだけじゃ足りません。必要になった時点で随時追加していきます。

さて、環境設定が何も済んでいない状態ですと「Dim objIE As InternetExplorer」と記述しても恐らくエラーになると思います。

環境設定については以下の記事をご確認下さい。

VBAでブラウザを操作して作業を自動化してみよう -ウェブスクレイピングツール編①-

objIEに商品のページを格納する

準備ができたら、次はAmazonのページをプログラム上で操作できる様にしましょう。

具体的には、最初に宣言した「objIE」の変数にAmazonのページを格納する処理を追加します。

'-----------------------------------------------------------------
'現在IEで開いているAmazonの商品ページの情報を、シート状に取得する
'-----------------------------------------------------------------
Sub main()
    Dim objIE As InternetExplorer       'Amazonの商品ページを格納
    Dim sProductName As String          '商品名
    Dim sProductPrice As String         '商品価格
    Dim sProductExplain As String       '商品説明
    
    'IE取得関連
    Dim objShell As Object              'shellオブジェクト格納
    Dim objWindow As Object             'ウィンドウを格納
     
    '---------Amazonのページを取得する処理---------
    Set objShell = CreateObject("Shell.Application")

    For Each objWindow In objShell.Windows
        'IEウィンドウの判定
        If InStr(LCase(objWindow.FullName), "iexplore.exe") > 0 Then
            'タイトルにAmazon.co.jpが含まれていれば商品ページと判定
            If InStr(objWindow.document.title, "Amazon") > 0 Then
                Set objIE = objWindow
                Exit For
            End If
        End If
    Next
    
    'Amazonのページが見つからなかった場合の処理
    If objIE Is Nothing Then
        MsgBox "商品ページの取得ができませんでした。"
        End
    End If
    '----------------------------------------------
    MsgBox objIE.document.title
End Sub

新たに「objShell」と「objWindow」の宣言を追加しました。

まず「objShell」に「CreateObject(“Shell.Application”)」というものを格納しています。

「Shell.Application」というのは簡単に言うと、パソコン内部の事を全て知っているいわゆる”中の人”です。この人を呼び出して、一時的に「objShell」として呼ばせてもらいますよって感じです。
※シェルに関する詳しい解説はwiki等を参照して下さい。

この状態になった「objShell」は、現在そのパソコン上で起動している全てのアプリケーションの状況を掌握しています。

ただし、直接「InternetExplorerで開いているAmazonのページが欲しい」という命令は出せません。

ではどうれすば良いかというのが、その下に記述している「For Each」の部分になります。

For Each objWindow In objShell.Windows

と記述することで、現在開かれているウィンドウを一つずつobjWindowの中に格納しながらループを繰り返すことができます。

こうやって全てのウィンドウを一つずつチェックしていきながら、目的のAmazonのページかどうかの判定を行う訳ですね。

冒頭のAmazonのページを開いている状態で上記プログラムを実行させると、

「Amazon.co.jp: 【Nintendo Switch対応】マイクロSDカード32GB for Nintendo Switch: ゲーム」

というメッセージボックスが表示されるはずですので、試してみて下さい。

メッセージボックスは正しく表示されましたか?

これで自動操作処理の下準備は完了です。

次からはいよいよ商品データの取得処理を記述していきます。

【次の記事】

商品ページからボタン一つで情報を取り込むVBAプログラムの作り方(Amazon編②)

関連記事と広告

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメント

  1. 佐藤 より:

    はじめまして。

    最近VBAに興味を持ちはじめましてブログを拝見させて頂きました。

    上記コードをコピペしてプログラムを実行しても”商品ページを取得できませんでした”の表示しか出ないのでなんでだろ~と悩んでいたら
    If InStr(objWindow.document.title, “Amazon.co.jp”) > 0 Then
    この部分のAmazon.co.jpをAmazonに変更したらOKでした。

    Amazonのタイトル表記の仕方が以前と変わったということでしょうか?

    ちなみに、作ってみたいと考えているプログラムは
    ExcelのA列セルにJANコードをズラズラと並べてVBAでB列以降に
    商品タイトル・ランキング・価格・ASINを自動取得し保存。
    次回は追加したJANの行からデータをストックしていくようなものを考えています。
    これを実装するのは結構ハードル高いですかね。

    • 藤美れいん より:

      閲覧頂きありがとうございます!

      そうですねー、一応掲載前には動作確認を行っているはずなので仕様が変わったのかもしれません。
      記事の方も修正させて頂きました。ご指摘ありがとうございます。

      一応このシリーズを1~4まで全て見て頂ければ、
      「商品名、価格、ASIN」までは取得できる様に作成しているつもりです。
      それぞれの内容を理解できていればランキングの値も取れると思いますよ!

      ハードルが高いかと言われれば、初心者にはとっては『かなり高い』です。
      もちろん他の言語経験やhtml等に精通していれば問題は無いと思いますが・・・

      行き詰まったら遠慮なく質問して下さい。

      ちなみに更にハードルが上がりますが、こんなのも掲載していますので参考までに。
      http://rabbitfoot.xyz/vba-programming-amazonapi1/

      • 佐藤 より:

        回答ありがとうございます。
        シリーズ1~4まではなんとか理解できたと思います。

        情報取得の仕方は分かりましたが、現状の課題としては
        ・Amazonの該当ページを開いていないと情報が取得できない
        ・メッセージボックスでの表示だとデータ活用ができない

        Excelシートに記載したJANコードから
        https://www.amazon.co.jp/s/ref=nb_sb_noss?field-keywords=JANコード
        こちらのURLを自動的に開いて情報を取得し、
        取得した情報データをB列以降に記載していく。

        このような流れを考えています。

        ググってみても、VBAで情報を取得する方法はイロイロ解説してあるけど
        取得したデータをExcelに書きだしたり、
        その後の活用方法について書いてあるサイトって意外とないんですよね。

        • 藤美れいん より:

          確かにこの内容だけだと既に開かれているページのみ対象となっているので、連続で処理したい場合が分からないですね。
          それでしたら以下の記事の内容が参考になるはずです。

          【VBAでブラウザを操作して作業を自動化してみよう -Amazon検索編 ①-】
          http://rabbitfoot.xyz/vba-automation-amazonsearch1/
          ※Amazonを起動して商品検索する所などを解説しています。

          【VBAでブラウザを操作して作業を自動化してみよう -ウェブスクレイピングツール編①- 】
          http://rabbitfoot.xyz/vba-automation-ws1/
          ※サイトからデータを取得して、エクセルに貼り付ける処理を解説しています。シートに書き出す処理はこちらが参考になると思います。

          他にも色々応用系の記事がありますので、
          「プログラミング」カテゴリーからご確認下さい。