以下のような検索キー列がユニークであるテーブルからデータを取得したい(VLOOKUPみたいなイメージ)場合、処理回数が多いと WorksheetFanction.Vlookup
やFor文での線形探索では時間がかかり過ぎる。
そんなときに役立つのが連想配列(Dictionaryオブジェクト)。
配列のようにインデックス番号からデータを取り出すのではなくキーの完全一致で要素を取り出せるので、処理が理解しやすいかつ高速であることが最大の利点。
続きを読む
以下のような検索キー列がユニークであるテーブルからデータを取得したい(VLOOKUPみたいなイメージ)場合、処理回数が多いと WorksheetFanction.Vlookup
やFor文での線形探索では時間がかかり過ぎる。
そんなときに役立つのが連想配列(Dictionaryオブジェクト)。
配列のようにインデックス番号からデータを取り出すのではなくキーの完全一致で要素を取り出せるので、処理が理解しやすいかつ高速であることが最大の利点。
続きを読む
CSV形式でダウンロードしたデータの一部が文字化けしていて困ってるという相談を受けて、「読み込み時のエンコード指定の問題でしょw」と見てみると部分的にHTMLエンコードされている謎のCSV・・・。
これに対応すべく部分的なHTMLエンコード文字をデコードして置換するスクリプトを作ってみました。
いろいろ調べてもHTMLエンコードかと思いきやURLエンコードの記事だったりして目標にたどり着くのにちょっと時間がかかってしまいましたが以下を発見。
シンプルで分かりやすく、これだ!と思ったけどそのままでは使えなかったの修正して使わせていただきました。
テスト
のような数値文字参照のHTMLエンコードされた文字列をデコード続きを読む
第二回では1キーワードを検索してExcelシートにキーワード、検索順位、ページタイトルを入力するところまでできました。
今回やっていくのは以下の内容。ここまでできれば検索結果のスクレイピングとしては十分な機能かな。
この記事でできるようになること
ExcelVBAでWebページから情報を自動収集(スクレイピング)する時に超便利なメソッド querySelector
とquerySelectorAll
。
CSSセレクタがそのまま使えて超便利だが、何故かquerySelectorAllに対してFor Eachを使ってループ処理を行うと処理を終えるタイミングで謎のエラーが発生して切断される事象に頭を悩ませていました。
会社の人に相談しながらどうにか回避策を見つけたので共有したい。
続きを読む第一回ではGoogleを表示するところまででしたが、今回はスクレイピングの肝となるデータを抜き出す部分です。
もうちょっと間空けて投稿しようかと思ったけど勢いで公開。ここらへんまでやらないと面白くないもんね。
前回のプログラムの処理フローを再確認します。
これらの動きをVBAで書いたものが以下のプログラムです。
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub web_scraping() Dim oIE As InternetExplorer 'oIEという変数はInternet Explorerが入ると宣言 Set oIE = New InternetExplorer 'oIEに新しいIEを起動して定義 oIE.Visible = True 'IEを表示させる oIE.Navigate2 "https://www.google.co.jp/" 'URLにアクセス slepp 3000 '3秒待機 oIE.Quit 'IEを閉じる End Sub
これに「Googleでキーワードを検索する」「検索結果が表示されるのを待つ」「検索結果から情報を取得」「取得した情報をシートに書き込む」という処理を加えていきます。
続きを読む