- ベストアンサー
URLのソース読み込みと文字列検索の方法・ツールについて
- URLのソースを自動で読み込み、特定の文字列を検索する方法やツールを探しています。URLが1万件ある場合に、特定の文字列を含むURLだけをピックアップして一覧にしたいです。
- 特定の文字列を含むURLだけをピックアップするためには、「object width」などのタグを検索できる方法が必要です。VBAなどのプログラム言語が苦手なので、簡単に理解できる方法やツールを教えていただきたいです。
- URLのソース読み込みと特定の文字列の検索方法について教えていただけるか、もしくは関連するツールをご存知の方がいらっしゃいましたら、ご教授いただけると助かります。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
別件で、 http://okwave.jp/qa/q6122446.html の方に回答していて、とてもステキな方法を発見いたしました。 上記の #1 Wendy02 さんがお書きのURL http://okwave.jp/qa/q5657350.html にある、WinHttp ライブラリ です。 前回答と比較してみて圧倒的にスピーディーですので、こちらでお試しになってみてください。 #Wendy02 さん、無断借用お赦しくださいね。 <(_ _)> Sub KeyWord_Search() Dim objHTTP As Object Dim i As Long Const strKW As String = "blog" Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1") With objHTTP For i = 1 To Range("A1").End(xlDown).Row .Open "GET", Cells(i, 1).Value, False .Send If .Status = 200 Then If InStr(1, .ResponseText, strKW, 1) > 0 Then Cells(i, 2).Value = "*" Next End With Set objHTTP = Nothing End Sub
その他の回答 (3)
- DOUGLAS_
- ベストアンサー率74% (397/534)
訂正です。 Const strKW As String = "blog" ではなくて、 Const strKW As String = "任意の文字列" でした。 ここに「任意の文字列」を入れてください。
- DOUGLAS_
- ベストアンサー率74% (397/534)
>任意の文字列をピックアップしたい場合だと、いかがでしょうか。 そうくるか、とは予め思っておりましたので、あえて、前回答のような コード にしてみたのですが、html ソース から文字列を拾う方法はいくつも用意されておりますので、「任意の文字列」がどういう文字列かによって効率のよい方法もあろうかと存じます。 If .document.embeds.Length > 0 Then For j = 1 To .document.embeds.Length If InStr(.document.embeds.Item(j - 1).src, "http://www.youtube.com") > 0 Then Cells(i, 2).Value = "*" Exit For End If Next End If の部分を弄ってみましょう。 --------------------------------------------- 1)htmlタグ を拾いたい場合 例えば、「<table>」という htmlタグを拾う場合は、 If .document.getElementsByTagName("table").Length > 0 Then Cells(i, 2).Value = "*" End If だけでOKです。 --------------------------------------------- 2)一般的な文字列の場合 objIE.document.all.Length = 0 はあり得ませんので、一番外側の「If ~ End If」は外します。 For j = 1 To .document.all.Length If InStr(.document.all(j - 1).outerText, "任意の文字列") > 0 Then Cells(i, 2).Value = "*" Exit For End If Next のようになります。 --------------------------------------------- 【(2)の説明】 例えば、この ページ の「補足」のところを、Internet Explorer の [表示(V)] - [ソース(C)] で見てみると、 <h4 class="ThaSup_ttl"><strong>補足</strong></h4> となっていますが、これを拾うのに、。 objIE.document.all(j - 1).~~ という形で、「~~」のところに下記の プロパティ を入れてやればOKです。 「.innerText」や「.outerText」の場合は「補足」を、「.innerHTML」や「.outerHTML」の場合は「<H4 class=ThaSup_ttl><STRONG>補足</STRONG></H4>」を拾ってきます。 ダブルコーテーション の有無にも気を付けなければならないかも知れません。 「.innerText」と「.outerText」と、あるいは「.innerHTML」と「.outerHTML」とは、必ずしも同じ内容にはなりません。 最近の WEBページ は、この ページ の「回答履歴」の コーナー などのように、htmlソース が <!--↓回答履歴 Begin--> <div id="history_answers" class="ok_resultlist_bor bor_l bor_r bor_b"> </div><!-- /--> <!--↑回答履歴 End--> だけの場合もあり、必ずしも意図する キーワード を拾ってこれない場合もあります。
- DOUGLAS_
- ベストアンサー率74% (397/534)
1)エクセル の シート の A列 に「1万件」の「URL」を コピペ しておきます。 2)下記 VBA を実行します。 3)「urlのソース」に「embed src="http://www.youtube.com」が含まれる場合、当該URL の右の B列に「*」印を付けます。 >上記からyoutubeを貼っているブログ記事をピックアップする…などです。 >"object width"などのタグが検索できれば可能なのではと安直に思っているのですが… YouTube の動画を他の サイト に埋め込むときには、YouTube の 当該ページ に「動画の埋込みコードを取得」という ボタン があり、それを クリック すると 埋込みコード が得られます。 この中から YouTube に特化された コード を抜くとすれば、「embed src="http://www.youtube.com」のあたりかなと存じます。 ただし、お示しの URL の内2番目の http://yourockmyworld829.blog88.fc2.com/blog-entry-1067.html のページには、YouTube の動画は埋め込まれていませんが、同じ ブログ の http://yourockmyworld829.blog88.fc2.com/blog-entry-3.html には埋め込まれています。 このような分については、いちいち拾いにいきませんので、悪しからず。 また、インターネット キャッシュ を途中で クリア しないと動作が遅くなるようなこともあるのかも知れませんが、それに対する処置はしておりません。 Sub YouTube_Search() Dim objIE As Object Dim i As Long Dim j As Long Set objIE = CreateObject("InternetExplorer.Application") With objIE For i = 1 To Range("A1").End(xlDown).Row .navigate Cells(i, 1).Value While .Busy Or .ReadyState <> 4: DoEvents: Wend If .document.embeds.Length > 0 Then For j = 1 To .document.embeds.Length If InStr(.document.embeds.Item(j - 1).src, "http://www.youtube.com") > 0 Then Cells(i, 2).Value = "*" Exit For End If Next End If Next End With objIE.Quit Set objIE = Nothing End Sub
補足
ありがとうございます! youtubeブログをピックアップできることに深く感動いたしました…。 もう一つですが、任意の文字列をピックアップしたい場合だと、いかがでしょうか。 自分でプログラムをいじってみたものの、 While .Busy Or .ReadyState <> 4: DoEvents: Wend If .document.embeds.Length > 0 Then For j = 1 To .document.embeds.Length If InStr(.document.embeds.Item(j - 1).src, "http://www.youtube.com") > 0 Then このあたりかと思うのですが…解釈できずに悩んでしまっております。
お礼
何から何まで、ありがとうございます。 前のコードよりも早くなってさらに感動しました…。 一点だけ質問良いでしょうか。頂いたコードだと 40URLくらいで実行がとまってしまう傾向にあります。 実行時エラー The operation timed out の文字が デバックしてみると、 .Send に黄色いマークがしるされていました。 ちょっとよくわからないので、自分で調べてみようと思います。。 ひとまずはお礼をさせていただきたいと思い、ベストアンサーとさせていただきました。 ありがとうございます!