0

重複の可能性:
PHPでHTMLを解析および処理する方法は?

PHPと正規表現を使用して、外部ページからすべてのハイパーリンクを取得しようとしています。私がスクレイピングに関心のあるリンクは、次のように構成されています。

<li class="magic"><a href="http://blah.com">TargetText1</a></li>
<li class="magic"><a href="http://blah.com">TargetText2</a></li>

URLではなくアンカーテキストを取得しようとしていることに注意してください。以下のコードは機能していますが、ページ上のすべてのリンクをスクレイプするだけです。上記のliクラスでのみラップされたリンクをスクレイプしようとしています。

 $url = "http://www.example.com"; 
 $input = @file_get_contents($url) or die("Could not access file: $url"); 

 $regexp = "<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>";

 if(preg_match_all("/$regexp/siU", $input, $matches)) { 
  print_r($matches);
 }
4

1 に答える 1

3
<?php

    $dom = new domDocument;
    $dom->loadHTML($html);
    $dom->preserveWhiteSpace = false;
    $lis = $dom->getElementsByTagName('li');
    foreach($lis  as $li){
        if($li->getAttribute('class')=='magic'){
            $links = $li->getElementsByTagName('a');
            if($links->length){
                echo $links->item(0)->nodeValue;
            }
        }
    }

?>
于 2012-09-06T23:11:49.340 に答える