• ベストアンサー

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

hersheの回答

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

こんにちわ。#4のhersheです。 補足の回答をいたします。 改行なしの場合もInStr関数の使い方を少し工夫するだけでタグの抽出を行うことができます。 >途中で改行されても続けて検索する方法、 この方法は少し複雑なコードになってしまいますので >改行がなく全文で一行の場合でも続けてURLを取得していきリストボックスに >追加していくような方法はないのでしょうか? こちらの方法で記述しますね。 fujiyama2002さんのコードを少しお借りします。 '--------+---------+---------+---------+---------+---------+   Open na For Input As #fileno   Do Until EOF(fileno)     Line Input #fileno, aa        GetATag = ""        lngPosSt = InStr(StrConv(aa, vbLowerCase), "<a href=")          '"<a href="が見つかったらループ     Do While lngPosSt > 0       GetATag = ""        '      If lngPosSt > 0 Then         lngPosEnd = InStr(Mid(aa, lngPosSt), ">")              If lngPosEnd > 0 Then           strATag = Mid(aa, lngPosSt, lngPosEnd)           GetATag = strATag         End If '      End If       if GetATag <> ""         List1.AddItem GetATag       End If              '検索開始位置を次の位置へ       lngPosSt = lngPosSt + lngPosEnd              '次の"<a href="を検索       lngPosSt = InStr(lngPosSt, StrConv(aa, vbLowerCase), "<a href=")     Loop   Loop   Close #fileno '--------+---------+---------+---------+---------+---------+ このように検索開始位置をずらしつつ検索を繰り返すことによって、全文で1行の場合でも抽出できるようになります。 また、"<a href="の部分を"<a "に変更することで、"TARGET="などが"<a"と"href"の間に入っている場合のものも抽出できるようになります。 あとはURLを抜き出すだけですね。 もうひと踏ん張りです。がんばりましょう。(^-^)

fujiyama2002
質問者

お礼

こんにちは。 詳細な回答をまたまたありがとうございます! コードをそのままコピーさせていただいて、部分的に変更しながら いろんなパターンを試してみました。 "<a"を"<a href"とか"http"に変えて試してみました。 結局下のコードできれいに抽出できました。 Open na For Input As #fileno Do Until EOF(fileno) Line Input #fileno, a getatag = "" lngposst = InStr(StrConv(aa, vbLowerCase), "<a") Do While lngposst > 0 getatag = "" '      If lngPosSt > 0 Then lngposend = InStr(Mid(aa, lngposst), ">") If lngposend > 0 Then stratag = Mid(aa, lngposst, lngposend) getatag = stratag End If '      End If If getatag <> "" Then yyyyy = StrConv(getatag, vbLowerCase) ooo = Replace(yyyyy, "<a href=", "") www = Replace(ooo, ">", "") saigo = Replace(www, """", "") List1.AddItem saigo End If lngposst = lngposst + lngposend lngposst = InStr(lngposst, StrConv(aa, vbLowerCase), "<a") Loop Loop Close #fileno これでどうやらきれいにリストボックスに追加されました。 途中に改行が入っているソースでも試しましたが、URLの途中に 改行が入っているものは案外とないようで、ちゃんと出力されて いましたので、ここのところはとりあえず無視してしまうことにしました。 あと、間に「target」が入っているものもたまたま見つからなかったので とりあえずReplaceには入れていませんが、これは教えていただいた 方法で位置を割り出してtargetからhttpの前までを削除してしまうことで 解決するかと思います。 次はgifなどの画像も取り込んでしまおうと思います。 これは、上の例で言うと、aaの中に.gifの文字列があったらその位置までを 抽出するという方法でどうにかなりそうだと、自分で勝手に思っています。 ほぼ100%が教えていただいた方法でどうにかなりそうな気がします。 ほんとにありがとうございました!

関連する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関数を何回も繰り返せば行数の判定は可能ですが、もっと高速に(一つの関数・命令で)調べることはできないでしょうか? また他に行数を特定する良い方法があったら教えてください。 よろしくお願い申し上げます。