VBAこの記事ではWinHTTPでスクレイピングしてリンクのURL一覧を作ってみるコードコードの解説おわりに参考サイトこの記事ではWinHTTPの実践的な使い方の例としてリンクの一覧を取得するサンプルを作ります。HTMLの(最低限の)知識が必要です。シリーズものになります。適材適所WinHTTPでスクレイピングしてリンクのURL一覧を作ってみるその3ではWinHTTPを使うためのHTTPの説明をしました。今回からWinHTTPの実践的な使い方に入っていきたいと思います。スクレイピングの目的は色々ありますが、いくつかこんなことができるよ的なサンプルを作っていきたいと思います。その第一段として「WinHTTPを使って対象のページ上のリンク一覧をワークシートに書き出す」というものを作ってみようと思います(そんな需要はあるかわかりませんが・・・)。次のコードを実行すると、「url」変数に指定されたウェブページにあるリンクの文字列とリンク先URLをアクティブなシートに出力します。コード実行前に参照設定を行います。WinHttp.WinHttpRequestは「req」という変数名でオブジェクトを準備しています。参照設定を行っているので、データ型をそのまま指定できます。urlurlへのHTTP接続のための準備をするようなイメージでしょうか。1つ目は、HTTPの動詞です。POSTがメインとなることでしょうか。2つ目は、URLを指定します。3つ目は、開き方の指定です。「同期」or「非同期」のどちらかです。同期モードは、次の「Send」メソッド実行時にサーバからの応答を全部受信したら制御が戻ってきます。通信の状態をこちら側で管理する必要がなくなります。Falseが同期、Trueが非同期です。省略値はFalseの同期です。基本は省略値でいいと思います。req.Sendサーバに向けてリクエストを送信します。POSTメソッドでパスワード等を送信する際に指定することができます。Openのところで同期モードで設定したので、通信の制御は不要です。Ifレスポンスコードを調べます。レスポンスコードは正常の場合200です。200以外の場合は処理を終了します。req.ResponseTextHttpRequest#ResponseTextプロパティに、生のHTMLが入っています。今回は、これをHTMLDocumentにパースしてもらい、扱いやすくします。生のHTMLを正規表現で抽出した方が処理は速いので、どちらを選択するかは要求されるもの次第になります。HTMLDocumentの書き方はなぜこうなるのかはわからず・・・。aaタグのテキストとaタグのhref(リンク先)をシートに出力してます。getElementsByTagNameの使い方は下記記事で言及しています。www.tekizai.netおわりにWinHTTPでリンクの一覧を取得するサンプルを作ってみました。こんな感じでWinHTTPを使うことで、ブラウザに依存せずにスクレイピングをすることができます。要求をオープンして送る。返ってきたものを処理する。これがWinHTTPでスクレイピングする際の基本形になります。この基本さえ押さえてしまえば、あとはウェブページの動きを分析して処理を組み立てることができます。次回もWinHTTPを使ったサンプルを作ってみたいと思います。ここまでお読みいただき、ありがとうございました。VBAでHTMLの解析をしたいと思っています。はてなブログProシステム界隈の末端に生息しています。コンピュータに仕事をさせるのが好きです。このブログで紹介している内容は、多分に私見が含まれています。それでも、なるべく正確性を保つよう心がけていますが「それは違うんじゃない?」などのご意見がありましたらご連絡ください。このブログに掲載しているコードは利用規約の範囲で自由にお使いください。当ブログのプライバシーポリシーについてお問合せコードの利用規約にほんブログ村はてなブログをはじめよう!shinmai_papaさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。