プロが教える店舗&オフィスのセキュリティ対策術

A1から横にキーワードが並べていて、
その各キーワードの"Google検索結果の10位の下に出てくる関連キーワード"。
これを取得して、検索したキーワードの下に縦に並べていきたいです。

検索したり取得したりで難しそうですが、これはマクロでできるでしょうか?
できるとしたら、どのようなマクロの記述でできますでしょうか?

EXCEL2016を使っています。
よろしくお願いいたします。

A 回答 (3件)

こんばんは


IEで良いかな?持ち合わせの改造ですが
要、事前バンティング
Microsoft Internet Controls
Microsoft HTML Object Library

Option Explicit
Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
Sub GoogleSearch_Get_RelatedKeyword()
Dim objIE As New InternetExplorer 'IEのインスタンス
Dim datWait As Date, i As Long, n As Long
Dim keyword As String
For i = 1 To Cells(1, Columns.Count).End(xlToLeft).Column
If Cells(1, i).Value <> "" Then '検索キーワード
objIE.navigate "https://www.google.co.jp/search?q=" & Cells(1, i).Value
datWait = Now() + TimeValue("00:00:10") '10秒後の時間を格納
Do
If datWait < Now() Then End '10秒以上経過したら強制終了
Call Sleep(50) '0.05秒中断
Loop Until objIE.Busy = False And objIE.readyState = READYSTATE_COMPLETE
objIE.Visible = False 'IE非表示
Dim htmlCls As IHTMLElementCollection
Set htmlCls = objIE.Document.getElementsByClassName("BNeawe s3v9rd AP7Wnd lRVwie")
For n = 1 To htmlCls.Length 'コレクション数でループ
Cells(n + 1, i) = htmlCls(n - 1).innerText
Next
End If
Next
Set objIE = Nothing
End Sub

1行目にキーワードがある時、2行目以下に関連キーワードを出力
(スクレイピングは対象に依存しますのでコードを理解する事が必要です)
    • good
    • 0
この回答へのお礼

回答ありがとうございます!

早速、マクロを記入して使ってみようと思いましたが、
マクロの実行の欄に、設定したマクロが見当たらないです。

おそらく、Sub 〇〇()と設定したないからだと思いますが、
実行はどこからするのでしょうか?

また、IEがサポート終了している。とのことですが、
それでもこちらのマクロは、使い続けられるのでしょうか?

そして、関連キーワードを取得する検索キーワードの数が300を軽く超えます。
それだけの量をマクロを使って取得しても問題ないでしょうか?

よろしくお願いいたします。

お礼日時:2021/12/04 10:11

#1です


>マクロの実行の欄に、設定したマクロが見当たらないです。
状況がよくわかりませんが、参考程度ですが、導入方法です。

その前に
確かにIEがサポート終了していますので今後問題なく使用できるかは、解りません。
また、現状では使用できる(使用してます)と思いますが、奨めるべきではないかも知れません。

APIはともかくとして、SeleniumBasicなどを案内するべきだったと思います。
技術屋さんの日記帳
SeleniumBasicをインストールしてExcel(VBA)からWebスクレイピングを行うまでのチュートリアル
https://lil.la/archives/3436

SeleniumBasicを使用してChromeを操作する事でIE同様に操作する事が出来ます。

#1のExcelVBAでIEを使用してWEBスクレーピングのコードですが
テストをする場合、新規ブックを作成し
①使用するExcelでVBEを(Alt+F11で)開きます
②参照設定をツールから開きます(Alt+T、R)
項目から
Microsoft Internet Controls を探してチェックボックスにチェックを入れる
Microsoft HTML Object Library を探してチェックボックスにチェックを入れる
③標準モジュールを挿入します。(Alt+I、M)
④③で作成したモジュールのカーソルのある位置に
#1のコード Option Explicit 以下を全てをコピーぺします
(Microsoft Internet Controls、Microsoft HTML Object Library、は不要
Option Explicitが重複する場合はOption Explicitも不要)
*Option Explicitは無くても良い

表示されているシートの1行目にキーワードを書き
Sub GoogleSearch_Get_RelatedKeyword() を実行します。
トリガーはボタン登録でも Alt+F8キーでダイアログから選んで
実行でも良いと思います。VBEからであれば対象プロシージャにカーソルを置きF5キーや▷ボタンからでも良いです。
スタックや不具合を想定してコピペが終わったら一度名前を付けて保存するのが良いと思います。

>それだけの量をマクロを使って取得しても問題ないでしょうか?
InternetExplorerインスタンスとObject解放がループの外なので
スタックの可能性があるかも知れません。
スタックするようであれば、上記をループ内に入れてみてください。
取り敢えず、処理時間もそれなりにかかると思いますので
少量で試してみてください。
    • good
    • 0
この回答へのお礼

マクロ選択になかったのは、マクロをちゃんと設定できてなかったみたいです。
GoogleSearch_Get_RelatedKeywordを選ぶことで取得することができました!
どうもありがとうございます!

お礼日時:2021/12/06 04:25

こんにちは



通常の検索結果を得るのなら、googleがAPIを公開していますけれど・・・
https://developers.google.com/custom-search/v1/o …

>Google検索結果の10位の下に出てくる関連キーワード
「10位の下」というのが何を意味しているのかわかりませんが(10位の下には11位が表示される)、表示ページの一番下に示されている「他のキーワード」のことと解釈しました。
もしもこれの意味であるなら、(確認してはいませんが)APIでは返されない情報と思いますので、実際にブラウザで検索を行って、その結果から抜き取るしかないように思われます。

>EXCEL2016を使っています。
とのことなので、まだIEが利用可能かもしれませんが、IEのサポートは終わっているように思いますので、Seleniumを利用したスクレイピングになるのではないかと思います。
https://note.com/teihen_escape/n/n40e672b1c97f
https://www.google.com/search?q=VBA+Selenium+%E3 …
(使える様であれば、IE経由の方がお手軽かも知れません。ネットにもまだ情報は沢山あります。)

検索結果の表示ページで「他のキーワード」の部分は、<div class="EIaa9b"></div>内に記述されているようですので、そこから抜き出すことになろうかと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!