0

PHP プログラムで html ファイルからすべての URL を抽出する必要があります。HTML ファイル内のすべての URL を抽出する C# プログラムを作成していたとき、次の正規表現を使用しました。次に、先頭に「http」部分を追加して、完全な URL リストを取得します。次のコードで使用した正規表現を PHP で使用する方法を教えてください。

        List<string> links = new List<string>();
        Regex regEx;
        Match matches;

        regEx = new Regex("href=\"http\\s*(?:\"(?<1>[^\"]*)\"|(?<1>\\S+))\"", RegexOptions.IgnoreCase | RegexOptions.Compiled);
        for (matches = regEx.Match(downloadString); matches.Success; matches = matches.NextMatch())
        {
            links.Add("http" + matches.Groups[1].ToString());
        } //Add all the URLs to a list and return the list

        return links;

例を示していただければ幸いです。


@julian 詳細な説明をありがとうございました。コードを少し変更して、次のように使用しました。

$html = file_get_contents('http://mysmallwebpage.com/');
$dom = new DOMDocument;
$dom->loadHTML($html);
$links = $dom->getElementsByTagName('a');

foreach ($links as $link)
{      
    $returnLink =  $link->getAttribute('href');
echo "<br />",$returnLink;
}

しかし、結果には正確な URL アドレスが表示されません。次のようなものを出力します。

/nmsd-gallery/
/home/?currentPage=3
javascript:noop();

URLアドレスだけを取得する方法があれば教えてください。そのような: http://mysmallwebpage.com/

4

2 に答える 2

1

DOM フレームワークで URL を抽出してみてください

    $html = file_get_contents($aktPage);
    $dom = new DOMDocument;
    $dom->loadHTML($html);
    $links = $dom->getElementsByTagName('a');

    foreach ($links as $link)
    {      
            $returnLinks[] =  $link->getAttribute('href');
    }
于 2013-03-28T13:15:18.583 に答える
1

うーん、これはページの内部リンクです。この場合、js-links (または画像などの他の不要なファイル) をフィルタリングし、HTTP_REFERER をプレフィックスとして追加する必要があります。

...

foreach ($links as $link)
{      
    $returnLink =  $link->getAttribute('href');
    if (stripos($returnLink,"javascript")!=false) // or other unwanted calls
    {
        if (stripos($returnLink,"http://") ==false)
        {
            $retunLink = $_SERVER['HTTP_REFERER'].$returnLink
        }
    } 
echo "<br />++",$returnLink;
}

チェックするケースはもっとたくさんあります..しかし、これはあなたに例を与えると思います...

于 2013-03-28T13:56:36.557 に答える