• ベストアンサー

ドキュメントからURLを抽出したい

指定したURLのドキュメントを変数に代入したんですが、 その変数に代入したドキュメントの中からURLのみを 抽出して、配列に代入することができません。 できれば、その配列に入っているURLで、重複するものは 1つにまとめるようにしたいです。 どなたか、上記のことを実現できる方法をご存知の方が いたらどうか教えて下さい。 どうぞよろしくお願いいたします。

  • Perl
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • Dpop
  • ベストアンサー率51% (279/544)
回答No.1

その変数に入っている内容を、 http URL の正規表現 http://www.din.or.jp/~ohzaki/perl.htm#httpURL を使って、見つかるだけ取り出す。と言う処理を行えば良いでしょう。 一番簡単な方法は、その変数のコピーを作り、URL 文字列を検索し、 検索できたら、それ以前を削除してしまい、再度検索を実行して、 URL文字列が見つからなくなるまで、処理を続ける。 と言うアルゴリズムにすれば良いと思います。 重複を避けるためには、取り出したURLをキーとした、連想配列を作り、 その連想配列の内容には、発見した順番を入れておきます。 全て検索が完了したら、連想配列の順番順に、取り出して、キー部分(URL文字列)を取り出してあげれば良いと思います。

関連するQ&A

  • VBAで有効なURLのみ抽出する方法

    無数あるURLリストをエクセルに張り付けし、 その中から応答のあるURL(つまりリンク切れしていないURL)のみを抽出することは可能でしょうか? リンクの有効判定をすることはマクロで実現可能でしょうか? 実現可能であれば、どういった記載方法になるでしょうか?

  • VBAでのクエリ抽出でURL指定の中で変数使用

    VBAでのクエリ抽出文(下記)で、URL指定文の中で変数を使用したいのですが""で囲まれているため使用できません。なにかよい方法はないでしょうか。 With ActiveSheet.QueryTables.Add(Connection:= _ "url;http://www.○○○.com/○○「変数」", _ Destination:=Range("A101")) .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = "1,2,3" .Refresh BackgroundQuery:=False End With 「変数」の部分で変数を使いたいのですが。

  • document.getElementById

    document.getElementByIdでURLを変数に代入したいのですが うまくリンクになりません。 どこが間違っているのでしょうか? どうしたらよいのでしょうか? ソースはこちらです <!DOCTYPE html> <html lang="ja"> <head> <script language="JavaScript" type="text/javascript"> var url = 'http://www.goo.ne.jp/'; var urlgoo = document.getElementById("urlgoo").src = url; </script> </head> <body> <a id="urlgoo" title="sample">Link</a> </body> </html>

  • 条件にあてはまる変数を抽出したい

    Perl初心者です。お願いいたします。 下記のような動きを実現したいのですが、どのような方法があるでしょうか。 できる限りすっきり書きたいのですが、自分で書きますと全パターンを記述していく・・等しか思いつきませんでした。お分かりになる方お教えいただけますと助かります。 $a1、$a2、$a3、$a4、$a5、$a6の6種類のデータがあり、いずれも「1」または「2」が代入されます。 その時に「1」が代入されたもののうち、aの後ろの数字が大きいほうの変数を抽出したいです。 たとえば、$a1、$a2、$a3、$a4、$a5、$a6 のデータが、1、2、2、1、1、2 であれば、「1」のうち数字が大きいのは$a5 なので $TOP = $a5; 、としたいです。 宜しくお願いします。

    • ベストアンサー
    • Perl
  • ブログ上のURLとタイトル抽出

    自分が管理しているMovableType(4.1)で作成したブログがあるのですが、今回アーカイブマッピングを変更しようと思っております。 アーカイブマッピングを変更するにあたり、旧アドレスから新アドレスへアドレス転送をしたいと考えているのですが、記事がかなり多いため、サイトのタイトルとURLを一気に抽出する方法がないか調べております。 抽出したあと、Rediretの設定を使用と考えているのですが、どなたかサイトのタイトルとURLを一気に抽出する方法をご存知のかたいませんか? また、旧アドレスから新アドレスへアドレス転送するのに、便利な方法はほかにありますでしょうか? よろしくお願いします。

  • エクセル内のURLからHPのタイトルを抽出したい

    エクセル内のA列にURLがあるのですが、B列にそのURLのHPのタイトルだけを抽出する方法はありますか? 色々調べて ------------------------------------------ Public Sub ReadTitle() Dim IE Dim url As Range Dim i As Integer Set url = Range("A2") Set IE = CreateObject("InternetExplorer.Application") i = 0 Do While (url.Offset(i, 0).Value <> "") IE.Navigate (url.Offset(i, 0).Value) While IE.busy: Wend While IE.Document.readyState <> "complete": Wend url.Offset(i, 1).Value = IE.Document.Title url.Offset(i, 3).Value = url.Offset(i, 2).Value '前回日付 url.Offset(i, 2).Value = IE.Document.LastModified i = i + 1 Loop End Sub このようなマクロで抽出は出来たのですが、URLは1万件以上あり、PCのスペックの低さのせいか、何時間もかかってしまいます。 もっと早く、タイトルだけを抽出する方法は無いでしょうか? よろしくお願いします。

  • VB.NETで正規表現を教えてください。URL文字を取得

    VB.NETなのですが、 htmlソースを変数に入れて、その中からURLを抽出して、 1つずつ保存していくという動作をさせたいのですが、 どうしてもURLを一つずつ取得することができません。 Dim r As Regex Dim m As Match Dim JpgFile As String r = New Regex("http://.+\.jpg") m = r.Match(html) If m.Success = False Then   Else JpgFile = m.Value ここで1つずつ保存 End If 現在、ここまで出来たのですが、 これだと、変数html内に複数のjpgのURLがあると 最初のURLの1文字目から、最後のURLの末尾までを一度に 取得してしまいます。 URLの文字列はhttp://で始まっていて、終わりは・・・.jpg" になっていたり、"がなかったりします。 >で閉じる前に同じタグ内にWidthなどサイズを指定している場合もあります。 また、上記のようにタグ内に書かれていなくて、クリッカブルリンクになっていないURLの場合もありそれも取得したいです。 一つずつ取得する方法や一度に配列に読み込む方法などがありましたら、 ご教示頂けると助かります。 よろしくお願い致します。

  • 配列にないデータのみを代入する方法

    シェルスクリプトで重複するデータのない配列を作りたいのですが、配列に含まれていないデータのみを代入する、もしくは、代入したとしても配列内のデータの重複を取り除く方法を教えてください。 よろしくお願いいたします。

  • mb_eregを使っての文字列検索、抽出について

    パターン="関数.+ます。" 上記パターンで、"関数"から"ます。"までを含む文字列を抽出する事は出来ました。が、 一番最初に出てくる"ます。"で検索をストップし、変数$matchに代入する事はできますか? (指定したキーワード"関数"以降の全ての"ます。"が変数に代入されてしまいます、最初に出てくる"ます。"まで抽出できれば充分なので。) キーワードやアドバイスがあればお教え下さい。 宜しくお願いします。 以下のプログラムで実行しました。 <?php //mb_eregについて $url="http://jp2.php.net/mb_ereg"; //アドレス指定 $result=file_get_contents($url);//取得 $text_contents=strip_tags($result);//タグを外す $sjis_text=mb_convert_encoding($text_contents,"SJIS","auto");//sjisに変換 echo("$sjis_text<br>");//本文出力 echo("----------------------------------------------<br>"); if(mb_ereg("関数.+ます。",$sjis_text,$match))//"関数"から"ます。"まで検索 echo("$match[0]<br>");//検索結果表示 ?>

    • ベストアンサー
    • PHP
  • EXCEL VBAでクエリーを使用した抽出方法

    EXCEL VBAでクエリーを使用しデータを抽出する命令で困っています。 原始データ:CSVファイル (カンマ区切り) 項目の中に日付の入った項目があり指定した1日だけの抽出はうまくいきますが、 期間を指定(複数日)した場合にエラーとなってしまいます。 1日だけを指定した場合の命令(うまくいく) 日付という項目には数値タイプのデータが入っている hizukeという変数にテキストボックスの値を代入する hizuke = TEXTBOX日付1.Value SELECT * FROM ファイル名 WHERE 日付 LIKE '%" & hizuke1 & "%' " ※ ここでワイルドカード(%)を使わないとエラーとなってしまいますが・・・ 期間指定をした場合の命令(エラーとなる) 日付という項目には数値タイプのデータが入っている hizuke1という変数にテキストボックスの値を代入する hizuke2という変数にテキストボックスの値を代入する hizuke1 = TEXTBOX日付1.Value hizuke2 = TEXTBOX日付2.Value SELECT * FROM ファイル名 WHERE 日付 BETWEEN LIKE '%" & hizuke1 & "%' AND LIKE '%" & hizuke2 & "%' " この命令が正しいとは思いませんが、要はワイルドカードと演算子(BETWEEN)を併用したい訳です。 この考え方以外で期間指定のデータ抽出ができるのであればその方法を教えて下さい。 以上、よろしくお願いします。

専門家に質問してみよう