VBAでwebスクレイピング2~IEでAmazon商品を検索~

2019 10/14
VBAでwebスクレイピング2~IEでAmazon商品を検索~

VBAでWebスクレイピングする方法を前回2通り勉強しました。

今回は、もう少し実践的に、「Amazonでキーワードを検索して、1番に出てきた商品情報を取得する」をやってみました。

前回のやり方ではなく、今回はIE(InternetExplorer)を操作するやり方でやっています。

目次

DOMメソッドだとクラス名が取得できない

Webブラウザを使わずにHTMLを取得していくやり方を前回紹介しました。

これ↓はそのコードの一部です。

このやり方で、Amazonで商品を検索して、結果を取り出そうとしたところ、重要なことを後から知りました。

クラス名でHTMLを取り出せない

のです。

h1やh2といったタグ名でHTMLを取り出すことはできるのですが、クラス名で取り出すやり方がありません。

参考: https://docs.microsoft.com/en-us/previous-versions/aa926433(v=msdn.10)?redirectedfrom=MSDN

例:<h1>*****</h1>はタグ名「h1」で取り出せる
  <div class=”aa”>*****</div>はクラス名「aa」で取り出せない

タグ名だけだと、取り出したい情報を取り出せません。

というわけで、「MSXML2.XMLHTTP」を使うDOMメソッドは断念。

IEを操作するやり方

Webブラウザを使用するやり方としては、前回紹介したSeleniumを使用する方法があります。

が、今回はSeleniumを使用せず、IE(InternetExplorer)を直接操作するやり方でやってみることにしました。

ソースコード

IEを使用してAmazonの商品を検索して1番に出てきた商品情報を取得するソースコードを作ってみました。

参考サイト:【Webスクレイピング】VBAでAmazonの在庫ステータスを取得しよう

ちなみに、このソースコードの実行は以下の参照設定が必要です。

  • Microsoft HTML Object Library
  • Microsoft Internet Controls
VBA参照設定
「ツール」→「参照設定」で該当ライブラリをチェックする

ソースの処理の流れは

  1. IEを設定
  2. Amazonのページに遷移
  3. 検索窓にキーワードを設定
  4. 検索ボタンをクリック
  5. 商品一覧の一番左上の商品の商品名と価格、商品リンクを取得

となっています。

Amazonで検索して1番左上の商品の情報を取得する
検索して1番左上の商品の情報を取得する

ここで、ページを遷移したら、

Do While ie.Busy = True Or ie.readyState < 4
DoEvents
Loop

でページ遷移の処理を待つようにしています。

商品情報を取得するためのHTMLのクラス名はChromeのデベロッパーツールで調べました。

スポンサーリンク

エラー発生

上記のソースコードで実行してみると、41行目のところでエラーになります。

Amazon検索後に発生するエラー
検索後に発生するエラー

なんのこっちゃ??

ここで躓いてしまいました。

しばらくあれこれやってみたのですが、このページで解決しました。

参考サイト:https://teratail.com/questions/209560

IEの状態が完了となっても、javascriptがまだ処理中の場合にエラーになるようです。

確かに、Amazonの検索結果ページのHTMLを見てみると、javascriptがあります。

ということで、解決策として、単純に待つコードを挿入しました。

修正後ソースコード

修正後のコードはこちら。

1行目と42行目を追加しました。

1行目はSleep関数の定義で、42行目でページ遷移後に1秒待つようにしています。

修正したコードでエラー無く実行できました。

4つほどキーワードをアマゾン検索してみた結果がこちら。

VBA:Amazonで商品を検索した結果
Amazonで商品を検索した結果

リンクもきちんと取得できていました。


CrowdWorksとかで案件を探していると、「Amazonの情報取得ツールを作って」というような依頼が結構あります。

今回Amazonの検索を試しに作ってみたのは、こういったCrowdWorks等の依頼を受注できるようにするためでもあったりします。

webスクレイピングはHTMLの該当箇所を探すのに慣れちゃえば、結構面白いですね。

あなたもVBAでスクレイピングやってみてください!

んじゃ、また~

関連記事

応援よろしくお願いします☆

この記事を書いた人

理系夫婦の妻のほうです。
大学、大学院(修士)で物理を専攻。
2016年に長女を出産、2021年に長男を出産。
フルタイム勤務ワーママ→休職→専業主婦。

コメント

コメントする

目次
閉じる