- ベストアンサー
EXCELVBAでYAHOOの検索結果をスクレイピングしたい
特定のキーワードでyahoo検索を実行し 検索結果から、TITLE・description・URLを抜き取りたいのですが もし、可能であれば、サンプルコードを記載頂けると幸いです。 宜しくお願いします。
- fuyuhiko
- お礼率36% (4/11)
- その他MS Office製品
- 回答数5
- ありがとう数1
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
基本的には IE を使うとか、createDocumentFromUrl などを使って HtmlDocument を取得し、Html ソースのタグ、ID名、クラス名など を手がかりとして解析することになると思います。 ですから、まずは目的ページの Html ソースをじっくり見ること ですねー。 この方法での注意点は、汎用的なプログラムを書けないことです。 つまり、Web サイトで仕様変更(クラス名の変更等)がなされると、 プログラムも修正が必要になってしまうということですね。 Description の意味するところは、こういうこと? って想像で書いたので意図通りでない場合はスルーして下さい。 検索結果を上位100件セルに書き出します。あまり考えず勢いだけで 書いてしまいましたので、必要なら適当に修正して下さい。 # ところで...なぜ Yahoo なのでしょう? Google の方が # 簡単な気がしますよ。 Sub sample() Const ERR_DOCUMENT_EMPTY As Long = 1000 Dim sKeyword As String Dim sQuery As String ' 検索キーワード問い合わせ&検索URLを作成 sKeyword = InputBox("検索キーワードを入力") If Len(sKeyword) = 0 Then Exit Sub Else ' Yahoo には 検索キーワードを URL エンコードして ' 送る必要があるみたい sQuery = "http://search.yahoo.co.jp/search?" sQuery = sQuery & "ei=UTF-8&" sQuery = sQuery & "n=100&" ' 検索数の設定 sQuery = sQuery & "p=" & UrlEncode(sKeyword) sQuery = StrConv(sQuery, vbNarrow) End If On Error GoTo Err_ ' URL から HTMLDocument を作成する Dim doc1 As MSHTML.HTMLDocument Dim doc2 As MSHTML.HTMLDocument Set doc1 = New MSHTML.HTMLDocument Set doc2 = doc1.createDocumentFromUrl(sQuery, vbNullString) ' ページの読み込み待機ほか While LCase$(doc2.ReadyState) <> "complete" DoEvents Wend If Len(doc2.body.innerText) = 0 Then Err.Raise ERR_DOCUMENT_EMPTY, , "ページの読み込みに失敗" & vbNewLine & sQuery End If ' 出力シート初期化 Application.ScreenUpdating = False Dim sh As Worksheet Set sh = ActiveSheet sh.Cells.Delete sh.Range("A1:B1").Value = Array("Title", "Summary") sh.Range("A:B").WrapText = True sh.Range("A:A").ColumnWidth = 30 sh.Range("B:B").ColumnWidth = 50 ' HtmlDocument の解析とセルへ出力 Dim div1 As MSHTML.HTMLDivElement Dim div2 As MSHTML.HTMLDivElement Dim div3 As MSHTML.HTMLDivElement Dim sTitle As String Dim sSummary As String Dim sUrl As String Dim nRow As Long nRow = 2 For Each div1 In doc2.getElementsByTagName("DIV") If div1.className Like "web" Then sTitle = "" sUrl = "" sSummary = "" For Each div2 In div1.getElementsByTagName("DIV") Select Case div2.className Case "hd" With div2.getElementsByTagName("H3")(0) sTitle = .innerText sUrl = .getElementsByTagName("A")(0).href sUrl = Mid$(sUrl, InStrRev(sUrl, "*-") + 2) sUrl = Replace$(sUrl, "%3A", ":") End With Case "bd" For Each div3 In div2.getElementsByTagName("DIV") If div3.className = "abs" Then sSummary = div3.innerText End If Next End Select Next sh.Hyperlinks.Add Anchor:=sh.Cells(nRow, 1), _ Address:=sUrl, _ TextToDisplay:=sTitle sh.Cells(nRow, 2).Value = sSummary nRow = nRow + 1 End If Next sh.Cells.EntireRow.AutoFit Bye_: Set doc2 = Nothing Set doc1 = Nothing Set sh = Nothing Exit Sub Err_: MsgBox Err.Description, vbCritical Resume Bye_ End Sub ' // URL エンコード ' Public Function UrlEncode(ByVal srcText As String) As String If Len(srcText) Then With CreateObject("ScriptControl") .Language = "JScript" UrlEncode = .CodeObject.encodeURI(srcText) End With End If End Function
その他の回答 (4)
- KenKen_SP
- ベストアンサー率62% (785/1258)
...なぜか悪者にされてる気がしますが。 #2 は回答が無い時点で書いたものですから、レスの流れまで考慮 してません。 Yahoo は Html ソースに文法的な誤りが多いので、どのような手法 でも100%確実な結果を得るのは難しいかもしれませんね。
- Wendy02
- ベストアンサー率57% (3570/6232)
. しょうがないですね。他の解答が出てしまっては、書かざるを得ないです。 #1のコードでは、description は、こう取ります。 Dim sCont As Strimg '------------------------------------------- 'Cells(i + 1, 3).Value = arBuf1(0) の次の行の辺りに k = InStr(1, v, "<DIV class=abs", 1) m = InStr(k, v, "</DIV", 1) sCont = Mid(v, k + 15, m - k - 15) sCont = Replace(sCont, "<B>", "") '強調コード削除 sCont = Replace(sCont, "</B>", "") '強調コード削除 Cells(i + 1, 6).Value = sCont 'セルの書式の配置--全体を折り返し表示するをオフにします。
- KenKen_SP
- ベストアンサー率62% (785/1258)
ふと思い出した書き忘れ(´A `;) もし #2 のソースをお試しになる場合は、VBE で Microsoft HTML Object Library を参照設定して 下さい。 では。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >特定のキーワードでyahoo検索を実行し >検索結果から、TITLE・description・URLを抜き取りたいのですが あくまでも、サンプルですから、description は、取りません。IEが重いようでしたら、Sleep で調整してください。ここまで取れれば、十分だと思います。後は、ログを取って、ご自分で開発してください。 丸投げ質問は禁止ではなくなりましたが、コードを書いてください、とだけではなく、ご自分で考えて、その過程を示してから質問するようにしてください。 '------------------------------------------- 'Option Explicit Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long) Sub SampleTest1() Dim objIE As Object Dim srchTxt As String Dim HttpLog As String '検索語 srchTxt = "VBA" Set objIE = CreateObject("InternetExplorer.Application") With objIE 'Yahooアクセス .Navigate "http://www.yahoo.co.jp/" .Visible = True Do While .Busy = True DoEvents Loop Do Until .ReadyState = 4 DoEvents Loop '検索ボックスへ入力 .Document.getElementById("srchtxt").Value = srchTxt Sleep 1000 '待ち 1秒 '検索ボタンクリック .Document.forms(0).submit Sleep 5000 '待ち 5秒 HttpLog = .Document.body.innerHTML .Quit End With Set objIE = Nothing Call LogCutter(HttpLog) End Sub Sub LogCutter(ByVal HttpLog As String) Dim buf As String Dim arBuf As Variant Dim v As Variant Dim i As Long Dim j As Long, k As Long, m As Long Dim sepBuf As String Dim arBuf1 As Variant 'セル幅を広げる Columns("A").EntireColumn.ColumnWidth = 40 On Error GoTo Errhandler j = InStr(1, HttpLog, "<DIV class=web>", vbTextCompare) If j = 0 Then MsgBox "ログが取れません。", vbExclamation Exit Sub End If buf = Mid(HttpLog, j) arBuf = Split(buf, "<DIV class=web>") '切り分け For i = LBound(arBuf) To UBound(arBuf) v = arBuf(i) '前方 k = InStr(1, v, "http%3A", vbTextCompare) '後方 If k > 0 Then m = InStr(k, v, "</A", vbTextCompare) sepBuf = Mid$(v, k, m - k) sepBuf = Replace(sepBuf, "%3A", "") sepBuf = Replace(sepBuf, "<B>", "") '強調コード削除 sepBuf = Replace(sepBuf, "</B>", "") '強調コード削除 arBuf1 = Split(sepBuf, """>") Cells(i + 1, 1).Value = arBuf1(1) Cells(i + 1, 3).Value = arBuf1(0) End If v = "": sepBuf = "" Next i Errhandler: If Err.Number > 0 Then MsgBox Err.Number & " : " & Err.Description End If End Sub
関連するQ&A
- YAHOOの検索結果に出なくなってしまった
HPを運営して4年ほどになります。 YAHOOの検索結果順位はちょくちょく変動するので細かい順位は気にしていないのですが、10ページ目くらいまで探しても全然出なくなってしまいました。 期待するキーワードで検索すると、1年ほど前は2位か3位くらいに出ていましたが、現在は10ページまで探しても出てこなくなり、しかもトップページ(○○○○.com/index.html)が出てくる前に、6ページ目くらいに2階層目のいくつかのページ(○○○○.com/××××.html)が先に出てきました。 トップページ内にキーワードをすごくたくさん盛り込んであり、サイトタイトル、meta keywords、meta descriptionにも記載しています。 スパムと判断されそうなこと(背景と同色のテキストなど)は一切やっていないつもりです。 ちなみにgoogleでは、3位に私のトップページが出てきます。 相互リンクは300~400程度やっていますが、相互リンクが多すぎるとスパムとみなされることはあるのでしょうか? 詳しい方がいらっしゃいましたらお教えいただけると幸いです。 よろしくお願い申し上げます。
- 締切済み
- HTML
- yahoo検索結果に表示されなくなった
あるキーワード(サイトのタイトル)で検索すると今までyahooでは5番目くらいに検索結果として表示されていたのですが、数日前から突然表示されなくなってしまいました。 検索結果の順位が下がったのではなくなくなつてしまったのです。 次ページで追っていっても表示されません。 googleには5番目くらいで表示されています。 原因は何でしょぅか? 検索されたいキーワード(ホームページのタイトル)は<title>に記載しています。 やはり本文にも検索されたいキーワードをテキストとして記述しなければいけないのでしょぅか? 詳しい方教えていただければ助かります。 よろしくお願いします。
- ベストアンサー
- その他([技術者向] コンピューター)
- Yahooの検索結果に表示されなくなりました…
私は父の店のHPを運営しているのですが、YahooでHPタイトルや主なキーワードで検索すると、いつも検索結果にちゃんと表示されていました。 ところが、今日、検索してみたら一向に出てこなくなってしまいました。 Googleや、その他の検索サイトでは今までと同じく、ちゃんと表示されます。 Yahooで検索して訪問してくれるお客さんが多かったので、今後、どうすれば良いのか悩んでいます。 対策方法をご存知の方がおられましたら、何かアドバイス頂ければ幸いです。 宜しくお願い致します。
- ベストアンサー
- レンタルサーバ・ASP
- PHPで検索エンジン
入力フォームで「URLのみ」を送信し、「タイトル」と「descriptionの一部」を画面に表示させ、 検索フォームでは「タイトル、description、metaキーワードの3項目」を「検索対象」とすることはできますでしょうか。 ネットで調べてはいるのですが、どれが最善がわからず困っております。 参考になるサンプルがどこからに掲載されていましたらぜひお教えください。
- ベストアンサー
- PHP
- 検索結果のタイトルについて(ヤフー)
○○保育園というキーワード検索してもヤフーの検索結果のタイトルが○○保育園になりません。ソースには<title>○○保育園</title>となっているのですがどうしてでしょうか?ちなみに○○保育園というキーワードが特別多いわけでもありません。もっと詳しく申し上げますと、○○保育園と検索すると当サイトは「ホームページ」というタイトルになってしまいます。何週間か待ってみましたが、今度は「保育園、幼稚園、託児所」というビジネスエキスプレスのカテゴリーがそのままタイトルになっている現状です。また、しばらくまっていると「ホームページ」にまた戻ってしまいました。この状態が1年近く続いているせいで、当然、SEO的にも不利になってしまっている現状です。ヤフーに問い合わせても、コンピュータが自動的に決めるので・・・との回答しかもらえませんでした。詳しい方、宜しくお願いいたします。
- 締切済み
- 経営情報システム
- グーグルやヤフーの検索結果について教えてください。
グーグルやヤフーで検索した時の検索結果について教えてください。 同じキーワードでもパソコンによって検索結果が違ったりするのは その人のそのキーワードでの検索頻度などが影響しているんでしょうか? それはクッキーで判別しているのでしょうか? また、グーグルとヤフーは提携により、検索結果は基本的に同じと考えて良いでしょうか? 教えてください。宜しくお願い致します。
- ベストアンサー
- その他(インターネット・Webサービス)
- Yahooでの検索結果で
いつも参考にさせて頂いています。 カテゴリがわからなかったので こちらで質問させて頂きました。 Yahooで、あるキーワードで検索を行った場合、 検索結果の順位がPCによって違うのは なぜなのでしょうか? お分かりになる方がいらっしゃいましたら 教えて下さい。 宜しくお願いいたします。
- 締切済み
- Windows系OS
- Yahooの検索結果に表示されなくなりました
Yahooの検索結果に昨日まで表示されていサイトが、 今日同じキーワードで検索すると、表示されません。 昨日まで 「A」というキーワードだと8番目に 「A+B」というキーワードだと6番目に そのサイトは表示されていた 今日は 「A」というキーワードだと200番目まで見たが表示されない。 「A+B」というキーワードだと6番目に表示される。 更新は昨日、 問い合わせ先のメールアドレスを記載しただけです。 どういった原因が考えられるのでしょうか?
- 締切済み
- レンタルサーバ・ASP
- YST(Yahoo)で検索結果に出なくなった
WEBサイトをいくつか運営しております。 ある日を境にYahooでのみ特定キーワードで特定サイトが検索されなくなりました。 スパム判定されたかと不安になりましたが、インデックスが削除された訳ではなく、タイトルをそのまま入力すると検索にひっかかります。 ただ、任意のキーワードで上位に表示されていたのに、ある日を境に急に上位100位にも入らない事があるのでしょうか。 GoogleやMSNでは相変わらず上位に表示されています。 原因があるのであれば、すっきりしますし納得もできます。 憶測でも構いません。ご意見いただけると助かります。
- ベストアンサー
- インターネットビジネス
- Googleの検索結果について
すみません、初心者なのですが教えて下さい。 Googleである特定の単語を検索するといくら探しても自分のサイトが見つかりません。半年前まではあったのですが。。。 他の単語ではサイトは見つかります。試しにGoogleチェッカーで探してみましたが、該当ないそうです。困りました。一番大切な単語で引っ掛からないとは。。。 昔はh1とか使い検索結果を上げようとしてましたが、今はそういうことはしてません。友人に聞きましたらタグが多いのでは?ということです。 keyword 44文字 10単語 description" content 86文字 title 28文字 となります。 検索結果に出ない単語の繰り返しはありません。もちろん隠し文字とかそういった不正も現在してません。 考えられる原因とはどういったものでしょうか?
- ベストアンサー
- HTML