質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

4370閲覧

グーグルで検索してURLをスクレイピングで取り出す

memomemo

総合スコア26

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

1クリップ

投稿2017/05/22 03:19

グーグル検索のスクレイピングに関してご質問です。
下記画像の赤枠のURLを抜き出したいです。
イメージ説明

現在下記のようなコードを書いているのですがうまく値を抜き出せません。
お忙しいところ恐縮ですがこちらに関してご教示いただけますと幸いです。

vba

1Sub listPost() 2 3Dim objIE As InternetExplorer 'IEオブジェクトを準備 4On Error Resume Next 5 6For i = 1 To 2 7 Set objIE = CreateObject("Internetexplorer.Application") '新しいIEオブジェクトを作成してセット 8 k = 0 + i * 10 9 10 'URLを取得 11 objIE.Visible = True 'IEを表示 12 objIE.navigate "https://www.google.co.jp/search?q=site%3Bhttps%3A%2F%2Fshachomeikan.jp&oq=site%3Bhttps%3A%2F%2Fshachomeikan.jp&aqs=chrome..69i57j5.4784j0j7&sourceid=chrome&ie=UTF-8#q=site:https://shachomeikan.jp/corporations/&start=" & k 'IEでURLを開く" 13 14 Do While objIE.Busy = True Or objIE.readyState <> READYSTATE_COMPLETE '読み込み待ち 15 16 DoEvents 17 18 Loop 19 20 Dim htmlDocURL As HTMLDocument 'HTMLドキュメントオブジェクトを準備 21 Set htmlDocURL = objIE.document 'objIEで読み込まれているHTMLドキュメントをセット 22 23 Dim elList As Object 24 Set elList = htmlDocURL.getElementsById("ires") 'class="buttonArea"のdiv要素を掴む 25 26 27 'ここから 28 29 30 Dim el As IHTMLElement 31 For Each el In elList 32 For t = 0 To 2 33 Worksheets("Sheet1").Range("A" & exlrow + 1).Value = el.getElementsByClassName("_NId")(0).getElementsByClassName("srg")(0).getElementsByClassName("g")(t).getElementsByClassName("rc")(0).getElementsByClassName("s")(0).getElementsByClassName("f kv _SWb")(0).innerText 34 35 Next t 36 Next el 37 38 'ここまで 39 40 objIE.Visible = False 41 objIE.Quit 42Next i 43 44End Sub 45

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Set elList = htmlDocURL.getElementsById("ires") 'class="buttonArea"のdiv要素を掴む

まず、この部分、コードとコメントが矛盾しています。
どちらが正しいのですか。

コードが正しいとすると、getElementsById は一つの要素しか返しません。htmlでは id は重複できないという仕様ですので。
ですので、

Dim el As IHTMLElement For Each el In elList '中略 Next el

というようにFor Each でループ処理はできません。
単純に下記のようにしてください。

Dim el As IHTMLElement Set el = htmlDocURL.getElementsById("ires") 'class="buttonArea"のdiv要素を掴む For t = 0 To 2 '中略 Next t

getElementsById についての詳細は下記を参照してください。

id属性要素を取得するGetElementById | IE操作の自動化
http://www.vba-ie.net/element/getelementbyid.html#a12

実際のURLでは確認してませんので、コードだけを見てのアドバイスです。

投稿2017/05/22 05:11

hatena19

総合スコア33699

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

memomemo

2017/05/22 06:26

ありがとうございます! idの取得などいまいちわからず大変参考になりました。 あとはinnerTextで取得する部分がうまくいってないので色々試してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問