こんにちは!kiyokoです。
VBAを使ってのWEBスクレイピング関連の記事はこれまで二つ書きました。
そのシリーズです。
私の記事は、
①プログラミングなんてやったことない人
②どういう動きをしているかなんて詳細はどーでもいいからなるべくコピペで動かしたい人
向けです。特に①に当てはまる人は【エクセルVBA】WEBスクレイピングは簡単だから自力でできるよ【IE操作】もご覧になってくださいね。
クラウドワークス・ランサーズなどのクラウドソーシングサイトで、WEBスクレイピングの仕事依頼は多数あります。
それで、その大体が、Amazonやヤフオクやメルカリなど、ECサイトの商品データ抽出ツール作成依頼だったりします。
Amazon MWSのアカウントやその他ECサイトのアカウントを持っていないので、どんなサイトか知らないんですけれども、データ抽出と言えば検索ボックスから検索すればできるんじゃないのかな?ということで、WEBスクレイピング第三段。『検索』を今回書こうと思います。
スポンサーリンク
検索ボックスってなんでしょう。
検索ボックスっていうのは、このサイトでいえばメニューバーの一番上にあるやつですね。
Monorateなんていうアマゾンの商品ランキングと価格推移を表示するサイトにも一番上にありますね。検索ボックス。
スポンサーリンク
エクセルVBAで検索ボックスから検索するソースだよ。
とりあえずソース。どーん!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
Sub TestSERCH() 'objIEという箱を準備 Dim objIE As InternetExplorer 'IEオブジェクトを作成してobjIEにセット Set objIE = CreateObject("Internetexplorer.Application") 'IEを表示 objIE.Visible = True 'URLを開く objIE.navigate "https://kiyocode.com" '←URLは開きたいURLに書き換えて! Call wait(objIE) 'HTMLドキュメントの箱を準備 Dim htmlDoc As HTMLDocument 'objIEで開いているページのHTMLドキュメントを、htmlDocにセット Set htmlDoc = objIE.document htmlDoc.getElementById("s").Value = "WEBスクレイピング" '←""の中を書き換えて! 'フォームの内容を送信 htmlDoc.getElementById("searchform").submit '←""の中を書き換えて! Call wait(objIE) End Sub '**************************************** '**********IE表示待機メソッド************ '**************************************** Public Function wait(objIE As InternetExplorer) Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE DoEvents Loop End Function |
ログイン編を読んでいただいた人は、ほぼほぼソース一緒やん!と思ったと思います。
ええ。ほぼほぼ一緒です。
要はformの中にテキストを入れてsubmitするというだけなので、ログインとほとんど一緒なのです。
10行目のURLと、18行目の検索ボックス、20行目のSubmitボタン この3行を書き換えるだけでいけるなー♪とわかったと思います。
エクセルVBAで検索ボックスから検索する方法
ここからの手順は以下のとおりです。
- 開発者ツールを起動する
- タグの要素を確認してみる
- 検索ボックスに値を設定する
- 検索ボタンを押す
開発者ツールを起動する
WEBページのタグを確認するために開発者ツールを起動します。
開発者ツールの詳しい起動方法はログイン編で画像つきで説明していますので、今回はあっさりと説明します。
IEの場合
IEで、スクレイピングしたいページ(検索ボックスがあるページ)を開き、「F12」ボタンを押します。
開発者ツールが開かれるので、左上の矢印のようなマークを押します。
その状態で、検索ボックスをクリックすると、そこに該当するHTMLドキュメントが青くなります。
Chromeの場合
Chromeで、スクレイピングしたいページ(検索ボックスがあるページ)を開き、「Ctrl」+「Shift」+「i」を押します。
右半分に開発者ツールが開かれるので、左上の矢印のようなマークを押します。
その状態で、、検索ボックスをクリックすると、そこに該当するHTMLドキュメントがグレイになります。
タグの要素を確認してみる
検索ボックスには、検索したいテキストを入力する欄と、『検索』や『GO』などと書いてある、ボタンがたいていありますよね。
それらのタグの要素を、上記で書いたにIEでもChromeでもどちらでもよいので開発者ツールを開き、確認します。
該当するHTMLドキュメントを右クリックし、「Copy」→「Copy outerHtml」をクリックします。
テキストエディタに貼り付けしてみると、
1 2 3 4 5 6 |
<form role="search" method="get" id="searchform" class="searchform" action="https://kiyocode.com"> <div class="search-box"> <input class="search-text" type="text" value="" name="s" id="s" placeholder="サイト内検索"> <input class="search-submit lsf accent_color hover_back_color" type="submit" id="searchsubmit" value="search"> </div> </form> |
こうなっていました。
1行目にform全体のことが書かれていますねー。
3行目が検索ボックスのテキスト入力欄。4行目がボタンですね。
検索ボックスに値を設定する
テキスト入力欄です。idが設定されていますね!(id=”○○”という部分がある)
勝ったも同然です。
上に載せたサンプルコードにあるように、
htmlDoc.getElementById(“○○”).Value = “XX”
の○○の部分にidの値を入れます。XXは検索ボックスに入れる値(検索したい文字列)を入れます。
検索ボックスにはidがおそらく大体のサイトは設定されていると思いますが、入っていない場合は、他の方法があります。
ログイン編の入力欄に値を設定する を確認してみてください。
そこに載っているいづれかの方法で行けるはずです。
検索ボタンを押す
ログイン編のログインボタン押下のように、検索ボタンを直接クリックでもいいんですが、今回はformタグに注目してください。
1行目ですね。
formタグにもidが付いてるんですよ!id=”searchform”って!
その場合は、formごとどーんと送れます。
htmlDoc.getElementById(“○○”).submit
○○の部分にformのidを入れます。kiyocodeの場合はsearchformを入れる形です。
これでいけます。すごい簡単。
formタグにidが付いていなかった場合は、ログイン編のログインボタンを押す を確認してみてください。他の方法が載っています!
検索できた?
最初に載せたソースの10行目のURLと、18行目の検索ボックス、20行目のSubmitボタンをログインしたいページのそれに書き換えましたか?
それでは実行してみてください。
検索できましたか♪
まとめ
今回はエクセルVBAでのWEBスクレイピング 第三回目として検索の方法をお話ししました。
ただ、実際は、プログラムに直で検索したい文字列を打ち込むとかありえないと思います。笑
エクセル上に一覧化しているコードをバンバン検索していくとかそういう感じですよね。(AmazonのACINコードをエクセルのA列に一覧化しているので、B列にその最安値を書いていくとか)
ですので次回は、そんな感じの、エクセルの内容を、WEB上に表示する的なやつをやろうかなと思います。
こちらもどうぞ
【エクセルVBA】WEBスクレイピングは簡単だから自力でできるよ【IE操作】
【エクセルVBA】WEBスクレイピングでログインは簡単にできるよ【IE操作】
【エクセルVBA】WEBスクレイピングで検索は簡単にできるよ【IE操作】
コメント
コメントはありません。