PHP正则表达式 - 使用指定的类从所有链接获取文本

时间:2012-09-06 23:04:29

标签: php

  

可能重复:
  How to parse and process HTML with PHP?

我正在尝试使用PHP和正则表达式从外部页面获取所有超链接。我关心抓取的链接结构如下:

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

请记住,我正在尝试获取锚文本而不是网址。我有下面的代码工作,但它只是擦除页面上的所有链接。我正在尝试用上面列出的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);
 }

1 个答案:

答案 0 :(得分: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;
            }
        }
    }

?>