• ベストアンサー

HTMLソースからURLだけを抜き出す方法を教えてください!

hersheの回答

  • hershe
  • ベストアンサー率55% (5/9)
回答No.3

こんにちわ。hersheというものです。 タグの検索ですが"<a href="で検索しただけでは、 "<a"と"href"の間に"TARGET="など他の設定が入った場合、検索できなくなってしまいます。 ですので、まずは"<a"のタグを">"まで検索した後に"href"以降のURLを抜き取る必要があります。 "A"タグを抽出する関数を作ってみましたので記載します。 '--------+---------+---------+---------+---------+---------+ ' "A"タグ抽出関数 '--------+---------+---------+---------+---------+---------+ Private Function GetATag(pstrLineBuf As String) As String   Dim lngPosSt As Long   Dim lngPosEnd As Long   Dim strATag As String      GetATag = ""      '文字が大文字か小文字か分からないためStrConv関数で小文字に変換した後、比較します。   lngPosSt = InStr(StrConv(pstrLineBuf, vbLowerCase), "<a")   '"<A"が見つかった場合、">"を検索します。   If lngPosSt > 0 Then     lngPosEnd = InStr(Mid(pstrLineBuf, lngPosSt), ">")          '">"が見つかった場合、"<A"~">"を抜き出し戻り値として返します。     If lngPosEnd > 0 Then       strATag = Mid(pstrLineBuf, lngPosSt, lngPosEnd)       GetATag = strATag     End If   End If    End Function '--------+---------+---------+---------+---------+---------+ この関数は"A"タグが見つかった場合、返値に"<A"~">"が返ってきます。見つからない場合は空白("")です。 >line input #1,aa の後に '--------+---------+---------+---------+---------+---------+   strRet = GetATag(aa)   If strRet <> "" Then     MsgBox strRet   End If '--------+---------+---------+---------+---------+---------+ と記述して試してみてください。 あとは抽出した"<A"~">"の中から"HREF"を検索し、URLを抜き出すだけです。 また、問題点を挙げておきます。 ・HTMLのタグは複数行に渡って記述することができるため、1行の中に終了文字">"が見つからないことがあります。 ・HTMLソースの記述が間違っている場合は、正常に動作しません。 以上です。参考になるでしょうか?

fujiyama2002
質問者

お礼

ご回答ありがとうございます! 二回も詳細に書いていただき恐縮です。 VBについてはまだまだ勉強中でして、検索とか置き換え というところは最も苦手なところなんです。 でもこれだけ詳しく書いていただいたので、調べつつ ぜひ試させていただきます。 ありがとうございます!!!

関連するQ&A

  • フォームの内容でリンク先URLの作成

    テキストボックスに文字列を入力してもらい送信ボタンを押すと、 あらかじめ決まっているURLにその文字列をつないだリンク先に移動する ということがしたいのですが、 <input name="test" type="text" value="" > <input type="submit" value="送信" onClick="location.href='決まったURL='"> で飛べません。 「決まったURL」に入力された文字列を指定する方法がわかりません。 どなたか教えてください。

  • PHP URL→HTML→取得→RSS出力

    PHP URL指定→HTMLソース→指定タグ要素取得(複数)→RSS(.xml)出力について URLからHTMLソースを取得し、要素を取得しRSSファイルを作りたいと思っています。 例えば、http://shopping.yahoo.co.jp/ranking/のURLのHTMLソース内から <p class="elPhoto"> <a href="○○○.html"> <img src="【取得したい文字列1】" width="200" height="200" alt="○○○"> </a> </p> <h4 class="elTitle"> <a href="【取得したい文字列2】">【取得したい文字列3】</a> </h4> <h4 class="elPrice"> <span>【取得したい文字列4】</span>円 </h4> <p class="elSellStatus"></p> <h4 class="elStore"> ストア:<a href="【取得したい文字列5】">【取得したい文字列6】</a> </h4> など指定する各要素を全件取得し、 <item> <title>【取得したい文字列3】</title> <link>【取得したい文字列2】</link> <description> 【取得したい文字列1】<br> 【取得したい文字列4】<br> 【取得したい文字列6】<br> 【取得したい文字列5】 </description> </item> などとRSSで全件出力し、xmlファイルを作成したいです。 アドバイス、ご指導お願いします。

    • 締切済み
    • PHP
  • URLについて

    URLを入れるときに、 httpの前に view-source: といれるとソースが見れますよね。 こういうURLに直接打ち込む文字列に関する情報で、なんらかの文字列をURLのどこかに入れたら、それ以前のURLは無視され、 その文字列以降のページが開かれる文字列(コマンド)みたいなのはないでしょうか? また、ほかの文字列でこうなるよ。というのがあれば教えていただけないでしょうか。よろしくお願いします。m(_ _)m

  • 文字列検索で

    よろしくお願いします。 文字列検索instr関数で、特定文字(スペース)でない文字を検索したいのですが、どのようにしたらいいですか? instr関数では、できないのでしょうか? たとえば、 文字列" osietegoo "  →  3 文字列"    situmon"  →  7 スペースでない文字が出現する位置を知りたいです。 instr(文字列,"o")ではなく、" "ではない、、、としたいのですが、できますか?

  • VBAを使ってHTMLソースから特定の文字列を抽出したいと思っています

    VBAを使ってHTMLソースから特定の文字列を抽出したいと思っています。 正規表現を利用してタグに挟まれた文字を抽出したいのですがうまくいきません。 タグごと抽出する方法でも構わないので教えてください。 例えば <a href="www.yahoo.com△">○○○</a>   ・・・<1> ※△は(www.yahoo.com)+(半角数字1文字) ※○○○は1文字以上の全角文字 このようなパターンの文字列(<1>を丸ごと)を抜き出すには どのような正規表現を書けばよいでしょうか? 単に<a href ではじまって </a>  で終わる文字列であれば <a href.*</a> で良いと思うのですが、もう少し範囲を絞れば目的の文字列だけを抽出できるので ぜひ実現させたいと思っています。宜しくお願いします。

  • VBAでソースから全てのURLを取得したい

    VBAでソースに書いてある全てのURLを取得したいのですが、現状では一部しか取得できません。 文字数制限にでも引っかかっているのでしょうか? どうすれば全てのURLを取得できるのか・・添削して頂けると or ヒントを教えて頂けると助かります。 よろしくお願いします。 (Excel2003を使用) Sub test() Dim objIE As Object Dim objTAG As Object Dim source As String Dim url As String Dim url_start As String Dim url_end As String Dim y As Long url_end = 1 y = 1 Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = False objIE.Navigate "http://dir.yahoo.co.jp/" Do While objIE.Busy = True DoEvents Loop Application.Wait Time:=Now + TimeValue("00:00:03") source = objIE.Document.All(1).Innerhtml Do While y < 10000 url_start = InStr(url_end, source, "<a href=", vbTextCompare) If url_start = 0 Then y = 10000 Else url_end = InStr(url_start, source, ">", vbTextCompare) url = Mid(source, url_start + 9, url_end - url_start - 10) Cells(y, 1).Value = url y = y + 1 End If Loop End Sub

  • urlのソースを自動で読み込み、ある文字列を検索する方法、またはツール

    urlのソースを自動で読み込み、ある文字列を検索する方法、またはツールを探しています。 URLが1万件ほどあります。このURLの中から、特定の文字列を含むURLのみをピックアップして一覧にしたいです。 たとえば、ブログURLが3つあったとして http://manitame.blog115.fc2.com/blog-entry-2469.html http://yourockmyworld829.blog88.fc2.com/blog-entry-1067.html http://moviehunt.blog58.fc2.com/blog-entry-1323.html 上記からyoutubeを貼っているブログ記事をピックアップする…などです。 "object width"などのタグが検索できれば可能なのではと安直に思っているのですが… htmlタグはその都度指定できる形だと幸いです VBAも検討したのですが、プログラム言語がかけないため、理解するのに時間がかかってしまいそうです…。 どなたかお得意な方、ソースも含めご教授いただけませんでしょうか。 またはそのようなツールをご存知の方いらっしゃいましたらご教授頂けますと幸いです。 よろしくお願い致します。

  • HTMLのソースをエクセルに貼り付ける方法

    HTMLのソースを、そのまま(メモ帳表示データのまま)Excelに貼り付ける方法はありますか。 メモ帳でソースの表示をして、全て選択→コピー→Excelに型式を選択して貼り付け→テキスト で貼り付けてみましたが、変なフォーマットで表示されます。 セルの書式を文字列にしても同じです。 目的はExcelの文字列操作で特定の文字だけ拾い出して加工しようと考えています。 OS:Win95、Excel2000です。

  • HTMLソース

      よろしくお願いします。 下記のソースを使用可能な状態にしたいのですが、   HTMLソース間にあるジャバスクリプトの、プログラムの部分を(ソース選択)というボタンをクリックさせ、ジャバスクリプトの部分だけをコピー出来るように青色に反転させたいのですが、(ソース選択)ボタンが機能しません。よろしくご指導ください。 <h2 align="center">他サイトのフレーム内にリンクされるのを防止します</h2> 自動的にフレームを解除してトップページを表示します<br> <input type="button" value="ソース選択" onclick="highlight(0)"> <form name="s1"> <textarea cols="80" rows="5" readonly> <script language="javascript"> <!-- if (parent.frames.length > 0) top.location.href = "自サイトのトップページURL"; //--> </script>

  • エクセルVBAで特定文字列の個数を高速に調べたい

    文字列の入っている変数内で特定の文字列(今回はvbCrLf)が何個発生しているかを、高速に調べたいのですが、どのような方法があるでしょうか? 現在以下のことをやっています。 数千件のテキストファイルから特定文字列を検索しています。 検索を高速化するために、テキストファイルをバイナリーモードで1つの変数に読み込み、instr関数で検索しています。 見つかった場合、その位置から前にあるvbCrLfをInStrRev関数で、後ろにあるvbCrLfをinstr関数で位置を調べ、元の変数からmid関数で該当ラインを取り出しています。 検索はこれで可能ですが、特定文字列を調べたinstr関数の戻り値がテキストファイルの先頭からの位置(何桁目)なので、検索した文字列が何行目にあるか分かりません。 変数の検索文字が見つかった位置までの部分でvbCrLfが何個発生しているかが分かれば行数が判定できます。 vbCrLfを調べるinstr関数を何回も繰り返せば行数の判定は可能ですが、もっと高速に(一つの関数・命令で)調べることはできないでしょうか? また他に行数を特定する良い方法があったら教えてください。 よろしくお願い申し上げます。