EXCEL VBAでYahoo検索結果からリンクの抽出をしたいです。
未読分:8件
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。
Message#8 2015年6月29日(月)20時52分 From: Carib | 返事 削除 変更 |
記入する欄を間違えました。申し訳ありません。 |
Message#7 2015年3月11日(水)10時12分 From: 管理人 | 返事 削除 変更 |
> ソースコードは管理人さんと全く同じコードを使用しています。 > 試しに友人のWin7(32bit)+EXCEL2010+IEの環境で動かしてみたところ > 問題なく動作しました。 環境による問題の可能性が高い気がしますね。 なぜ Yahooのトップページのdocumentのままなのかは分かりませんが、読み込み 完了処理の部分を一般的な下記で処理してみたらどうですか? '完全にページが表示されるまで待機する Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop もしくは、Sleepを利用せずにwaitを利用してみてください。 Application.wait Now + TimeValue("00:00:05") |
Message#6 2015年3月9日(月)16時47分 From: hana | 返事 削除 変更 |
失礼しました。 ソースコードは管理人さんと全く同じコードを使用しています。 試しに友人のWin7(32bit)+EXCEL2010+IEの環境で動かしてみたところ 問題なく動作しました。 先ほど、管理人さんから提供いただいたコードを起動してみたところ int2 = InStr(int1, objTag.outerHTML, "<b>") のところで プロシージャの呼び出し、または引数が不正ですというエラーで 処理がとまってしまいました。 objTag.outerHTMLの内容を見てみると 中身は検索後の検索結果ページのものではなく、検索結果遷移前の Yahooのトップページのh3タグの内容を参照していました。 Call ieNavi(objIE, "http://www.yahoo.co.jp") Call formText(objIE, "p", Cells(i, 1)) Call tagClick(objIE, "input", "検索") の処理の間にsleep関数を入れ処理の間を空けてみても 同じように遷移前のYahooトップページの内容になってしまいます。 また、シンプルに下記コードで実行した場合、 実行時エラー '-2147467259(80004005)' オートメーションエラーです。 エラーを特定できません が出力され ieCheckのobjIE.Refreshで エラーとなり処理が止まってしまいます。 なぜだかわかりませんがこのオートメーションエラーについては ieNaviの処理のobjIE.Navigate urlNameの上下に objIE.Visible = FalseとobjIE.Visible = Trueを挟むことで エラーはおきなくなりました。 やはり環境によるものなのでしょうか。 当方、win8.1+ofice2013+IE11の環境しかないためなんとか 実現したいのですが、何か回避策等ございますでしょうか ご教授よろしくお願いいたします。 --------------------------------------------- Sub sample() Dim objIE As InternetExplorer Sheets("Sheet1").Select Call ieView(objIE, "http://www.yahoo.co.jp") x = 1 For i = 1 To 30 Call ieNavi(objIE, "http://www.yahoo.co.jp") Call formText(objIE, "p", Cells(i, 1)) Call tagClick(objIE, "input", "検索") Next i objIE.Quit End Sub |
Message#5 2015年3月8日(日)23時21分 From: メランコリー | 返事 削除 変更 |
管理人さんと同じコードをしようしたらうまくいきますね。 環境のせいじゃないですか? 64bit版はSleep関数がきかないとかどうかってどっかのページに書いてあったような気がします。 あと具体的にソースがないとアドバイスしずらいと思いますけど。。。 |
Message#4 2015年3月7日(土)23時34分 From: hana | 返事 削除 変更 |
たびたびすいません。 もうひとつあるのですが、検索結果後のリンクを抽出したいのですが どうしても検索する前、つまりyaooトップページ内のリンクを抽出 してしまいます。 sleep関数を使用してみたりいろいろしてみたのですが まったく解決しなくてご教授お願いします。 私の環境は WIN8.1(64bit)+EXCEL2013+IE11 です |
Message#3 2015年3月7日(土)13時12分 From: hana | 返事 削除 変更 |
いつも貴重な情報ありがとうございます。 VBAは初心者でいつも勉強させていただいています。 下記コードでVBAでyahoo検索を実行してみたのですが オートメーションエラーで1つ目の検索以降処理がとまってしまいました。 何が原因か全くわかりませんでしたので URLを抜き出す処理をコメントアウトして 検索だけを繰り返す処理のみを実行しましたが 同様の事象が発生しました。 どこが原因なのでしょうか また、オートメーションエラー時に確認すべきことってありますか? 初心者でお手数おかけしますがよろしくお願いします。 |
Message#2 2014年11月7日(金)08時40分 From: 管理人 | 返事 削除 変更 |
Yahooリスティング広告のURLを確認すると「rd.listing.yahoo.co.jp」というURLが付いていますので、こちらの場合は除外する処理を加えます。 以下は参考プログラムですので、一度ご確認ください。 ※以下はサブルーチンになりますのでそれぞれご確認ください。 ieView ieNavi formText tagClick Sub sample() Dim objIE As InternetExplorer Sheets("Sheet1").Select Call ieView(objIE, "http://www.yahoo.co.jp") x = 1 For i = 1 To 30 Call ieNavi(objIE, "http://www.yahoo.co.jp") Call formText(objIE, "p", Cells(i, 1)) Call tagClick(objIE, "input", "検索") For Each objTag In objIE.document.getElementsByTagName("h3") If InStr(objTag.outerHTML, "rd.listing.yahoo.co.jp") = 0 Then int1 = InStr(objTag.outerHTML, "href") int2 = InStr(int1, objTag.outerHTML, "<b>") URL = Mid(objTag.outerHTML, int1 + 6, int2 - int1 - 9) Sheets("Sheet2").Cells(x, 1) = URL x = x + 1 End If Next Next i objIE.Quit End Sub |
Message#1 2014年11月7日(金)07時58分 From: bnr4 | 返事 削除 変更 |
EXCEL VBAでYahoo検索結果からリンクの抽出をしたいです。 Google検索についてはググると出てきたのですが、 Yahoo検索に関しては、ピンポイントの答えが出てこないため途方に暮れております。 要件: ・EXCEL VBAを使用 ・IEにてYahoo検索し、検索結果のリンクのURLをEXCEL出力するまでを自動化したい。 仕様: @シート「Sheet1」のセルA1〜A30に検索したいキーを手入力 A@で設定したキーをYahooにてすべて検索 B検索結果画面で表示されたリンクのURLを、シート「Sheet2」に取得 ※広告リンクは除く Aまではできているのですが、 Bの検索結果のリンクを取得することができずに困っております。 ご教授いただければと思います。 |
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降