⇒商品ページからボタン一つで情報を取り込むVBAプログラムの作り方(Amazon編1)⇒商品ページからボタン一つで情報を取り込むVBAプログラムの作り方(Amazon編2)前回までの内容で文字データまでの取得ができましたので、今回は商品画像を取得する処理を書いていきたいと思います。7.ここまでのコード4.商品画像を取得するまず商品ページを開いた際に表示されている商品画像がありますので、その画像のURLを探してみましょう。メイン画像のタグについては上図の箇所にあります。見つけられましたでしょうか?id値「landingImage」というimgタグに商品画像が設定されているのが分かりますね。このタグの「src」がそのまま商品画像のURLとなっています。※確認したい場合は、URL部分をコピーしてアドレスバーに貼り付けてみて下さい。この画像を取得するために幾つか処理を追加していきます。main()」の上に「URLDownloadToFile」という宣言を追加しました。これが画像をダウンロードするために使用する関数となります。元々は「Windowsに用意されている各種機能を利用するためのシステム関数」で、VBAの機能として最初から使える訳ではありません。”どこから呼び出すのか”という「場所」と「名前」を指定してあげることで、以降はVBA内で使える他の関数と同様に使用できる様になります。この手法を「API宣言」と言います。コメント以下5つの変数を定義します。使用する訳ではありませんが、後々使うのでここで定義しておいて下さい。最後に「URLDownloadToFile」を呼び出して画像をダウンロードする処理を行っています。URLDownloadToFileは2つ目の引数にダウンロード対象のURLを指定し、3つ目の引数に保存先のパス(設定したい画像ファイル名も含めたフルパス)を指定します。他の箇所は上記サンプルの様に「0」で構いません。今回は保存先に「Thisworkbook.Path」(実行したエクセルと同じ場所)を指定しています。前回の記事の最後にあるコードに、上記処理を追加してそのまま実行してみて下さい。すると、そのエクセルファイルと同じ場所に「switch_microsd.jpg」という名前で商品画像のファイルが保存されているはずです。これで画像の保存処理も完成!・・・とは言えませんよね。画像が一つしか設定されていない場合はこの処理で十分ですが、複数の画像が設定されていた場合は全ての画像を保存したいと思います。いう事で複数画像にも対応できる様に作り変えていきます。スポンサーリンク5.複数の画像に対応する商品ページに複数の画像が存在した時、通常ユーザーが画像を切り替えるためにはどの様にすれば良いでしょうか?・・・はい、メイン画像の横にあるサムネイルをクリックすれば切り替わりますよね。他の画像を見たいだけであればサムネイル画像の上にマウスポインタを置くだけで自動的に切り替わります。いったアクションを行うことで、裏でプログラムが動いて自動的に表示する画像を切り替えているという事です。それを踏まえて、先ほど見たメインに表示されている画像のソース部分をもう一度確認してみましょう。今度は「img」タグでは無く、もう少し広い範囲でタグをよく見て下さい。selected」という風になっていますよね。「itemNo0」って何か気になりませんか?「itemNo1」とかあるのかな?って思いますよね。その後ろにある「selected」というのも”何が選択されている”という意味なんでしょう。この「itemNo」というクラス名が付いているタグが、メインに表示されるimgタグが含まれている箇所になります。以下の画像を見て下さい。「itemNo0」は今選択されている1枚目の画像なので「selected」が付いています。下の方に見える「itemNo1」は2枚目の画像が含まれているliタグです。2枚目のサムネイル画像をクリックすると、「itemNo1」の方に「selected」が付いて、2枚目の画像が表示される仕組みとなっています。VBAの方に戻り、以下の条件をもとに処理を変えてみます。複数の画像があった場合に連番を設定する必要があるため、連番用の変数を用意してそれを初期化(0を格納)する。商品ページ内からliタグを抽出する。クラス名に「itemNo」を含むものがあれば、そのタグの子要素に含まれる「img」タグからsrcの値(画像のURL)を取得する。連番名を付けて画像を保存する。連番用の変数を増やす。全ての画像をダウンロードするため、ループ処理させる。Next「4.商品画像を取得する」で作った画像ダウンロード部分の処理を消して、上のソースをコピーした後実行してみて下さい。あ、実行する前にIEの商品ページは一度「更新」して下さいね。「picture_0.jpg」という名前で、商品画像の1枚目が保存されたと思います。・・・あれ?全ての画像を保存する様にしたはずなのになぜか1枚目の画像しか保存されていませんね。※ここから想像が入っています。違ってたら指摘して下さい。実は商品ページを開いてすぐの状態では、大きい画像は「1枚目の画像しか読み込まれていない」んです。(ページを開いた直後は2枚目の画像にあたる「itemNo1」のliタグが出現していないという事です。)恐らく少しでも早く商品ページを読み込ませるために「サムネイル画像」と「1枚目の大きい画像」のみ読み込ませておいて、他の画像を見たいという風に興味を持ってクリックしようとした場合にだけ、随時他の画像を読み込む。いう仕様にしているんじゃないかと思います。今回調べていて初めて分かったことだったのですが、細かい所で頑張ってるんだなーとAmazonの営業努力を感じました。・・・まぁAmazonの努力は置いといて、これだと一回手動でサムネイルにマウス乗せたりクリックしないと他の画像を取得できないという事になりますよね。それだとここまで自動化した意味がありません。何とかする手段は・・・もちろんあります。要はサムネイルをクリックして各画像を読み込ませれば良いんです。Each」処理の手前に以下の処理を追加します。item」というクラス名が付いているかどうかで判定可能です。見つかった場合は、その子要素に含まれる「input」タグをクリックすることで画像の読み込みを行っています。objIE.document.getElementsByTagName(“li”)」と同じ処理が記述されていますが、これは両方とも必要なので2つ目(保存する際のループ側の処理)を消さない様に注意しましょう。それでは早速、修正後の上記コードを実行してみて下さい。「picture_0.jpg」、「picture_1.jpg」という二つの画像ファイルが保存されているのが分かると思います。・・・ただ、サンプルとして用意した商品が悪かったせいで、全く同じSDの画像が保存されてしまったいるので分かりませんね。(笑)他の商品でもそのまま実行できると思いますので、ちゃんと全ての画像が保存されるかどうかを確認するために別の商品でも試してみて下さい。スポンサーリンク6.取得したデータを書き込む最後は今まで取得してきたデータを、エクセルシート上に書き込むだけですね。貼り付け方は好きなやり方で組んでもらって構いません。7.ここまでのコードここまでのVBAコードは以下の通りです。"商品ページの取得ができませんでした。Subこれで完成に見えますが、動かして見ると一つ問題が残っていることに気付くと思います。この処理のままでは画像のファイル名が「picture_○.jpg」固定になってしまっているので、実行する度に画像が上書きされてしまうんですね。次回はこの問題を解消するための処理を追加してみたいと思います。1(VBAプログラミング)今回はAmazonAPIを使った何かを作って見たいと思います。1-」の続きとなります。Amazonで商品を検索する処...記事を読むミニスーファミ発売!!早速転売状況を見てみる先日「ミニスーファミは転売出来るかどうかを考えてみる」という記事を書きましたが、とうとう本日9月16日に予約が開始されましたね。秋葉...記事を読むメルカリ出品管理ツールの改造記録メルカリ出品管理ツール()を公開してから一ヶ月程経ち、色々と改善点が見えてきたので一新してみる事にしました。前回は使用できるレスポンスグループの一覧を確認する所まででした。久しぶりに真面目な解説物を書いていきます。今回は「jQueryのchangeイベントをVBAのDOM操作で発火させる方法」という事で...記事を読むParserを使ってスクレイピングを行う際のコツ(GASライブラリ)前回GASライブラリのParserを使用して、GASからWebスクレイピングを行う方法について書きました。前回までの内容はこちら。今回は、パッと見て「この場合どうやるんだっけ・・・」となりがちな、配列や連想配列が入れ子構造になって...記事を読むConfuserExを使ってソースコードを難読化する.NETツールの難読化手順紹介3つ目。今回は「ConfuserEx」の使い方を解説していきます。ツールのダウンロ...記事を読むブラウザの待機処理がうまくいかない場合の対処方法VBAでIE操作を行う場合、ブラウザの読み込み待機処理はほぼ必須で使われていると思います。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。固定ページ内を検索プロフィール藤美れいん(ふじみれいん)プログラマとして入社後、数年の開発経験を経てフリーへ転職。せどり、ネットショップ運営、パチスロ期待値稼働、プログラム開発等々を経験し今に至る。現在は一時的に復職し、都内某所で活動中。過去に公開したツールなどは、サイト上部のメニューにある「TOOLS」をご覧下さい。プログラムに関する質問、その他ご相談はメールやTwitterからどうぞ。@raine_fujimi※返信は大体数日後になります。返信できない場合もありますので予めご了承下さい。