理系夫婦の方程式(りけいふうふのほうていしき)です。2019.10.14VBAでWebスクレイピングする方法を前回2通り勉強しました。あわせて読みたいVBAでwebスクレイピング~2通りの方法をお試し~VBAでWebスクレイピングする方法を勉強しました。SeleniumBasicを使用する方法、使用しない方法の2パターンを試してみました。Frameworkをインストールし再起動することで解消しています。今回は、もう少し実践的に、「Amazonでキーワードを検索して、1番に出てきた商品情報を取得する」をやってみました。前回のやり方ではなく、今回はIE(InternetExplorer)を操作するやり方でやっています。目次DOMメソッドだとクラス名が取得できないWebブラウザを使わずにHTMLを取得していくやり方を前回紹介しました。これ↓はそのコードの一部です。httpreq.responseText(略)このやり方で、Amazonで商品を検索して、結果を取り出そうとしたところ、重要なことを後から知りました。クラス名でHTMLを取り出せないのです。h1やh2といったタグ名でHTMLを取り出すことはできるのですが、クラス名で取り出すやり方がありません。class=”aa”>*****</div>はクラス名「aa」で取り出せないタグ名だけだと、取り出したい情報を取り出せません。いうわけで、「MSXML2.XMLHTTP」を使うDOMメソッドは断念。IEを操作するやり方Webブラウザを使用するやり方としては、前回紹介したSeleniumを使用する方法があります。今回はSeleniumを使用せず、IE(InternetExplorer)を直接操作するやり方でやってみることにしました。ソースコードIEを使用してAmazonの商品を検索して1番に出てきた商品情報を取得するソースコードを作ってみました。Subちなみに、このソースコードの実行は以下の参照設定が必要です。検索ボタンをクリック商品一覧の一番左上の商品の商品名と価格、商品リンクを取得となっています。4DoEventsLoopでページ遷移の処理を待つようにしています。商品情報を取得するためのHTMLのクラス名はChromeのデベロッパーツールで調べました。上記のソースコードで実行してみると、41行目のところでエラーになります。検索後に発生するエラーなんのこっちゃ??ここで躓いてしまいました。あれこれやってみたのですが、このページで解決しました。参考サイト:https://teratail.com/questions/209560IEの状態が完了となっても、javascriptがまだ処理中の場合にエラーになるようです。確かに、Amazonの検索結果ページのHTMLを見てみると、javascriptがあります。いうことで、解決策として、単純に待つコードを挿入しました。修正後ソースコード修正後のコードはこちら。Sub1行目と42行目を追加しました。1行目はSleep関数の定義で、42行目でページ遷移後に1秒待つようにしています。修正したコードでエラー無く実行できました。4つほどキーワードをアマゾン検索してみた結果がこちら。Amazonで商品を検索した結果リンクもきちんと取得できていました。CrowdWorksとかで案件を探していると、「Amazonの情報取得ツールを作って」というような依頼が結構あります。今回Amazonの検索を試しに作ってみたのは、こういったCrowdWorks等の依頼を受注できるようにするためでもあったりします。webスクレイピングはHTMLの該当箇所を探すのに慣れちゃえば、結構面白いですね。あなたもVBAでスクレイピングやってみてください!んじゃ、また~おススメのプログラミング独学方法をこちらの記事で紹介しています。あわせて読みたいプログラミングのおススメ独学方法は2パターン(あなたはどっち?)プログラミングを独習する場合、そのパターンは大きく2つに分かれます。網羅的に全体を学習したい場合と、作りたいものが明確な場合です。それぞれのパターンにおススメの勉強方法を、エンジニア歴7年の理系妻が紹介します。お願いします☆にほんブログ村ファミリーランキングこの記事を書いた人まゆみ理系夫婦の妻のほうです。大学、大学院(修士)で物理を専攻。2016年に長女を出産。フルタイム勤務ワーママ→休職中。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。SWELL.検索する。