php不用正则表达式获取文章A标签链接的方法
php不用正则表达式获取文章A标签链接的方法
DOM获取链接
不要使用正则表达式解析的HTML
也许最大的错误时,人们作出尝试从一个网页的网址或链接文字中试图做到这一点使用正则表达式。这项工作可以做正则表达式,但是,有一个拥有整个文件妊娠多次循环的高开销。正确的方法和速度更快,无限冷却器方法是使用DOM。
通过使用getLinks职能的DOM,可以简单地创建一个包含所有环节上的键网页,并链接作为值名称。此数组然后可以在循环数组一样创建一个列表,在任何需要的方式操纵或。
请注意,抑制错误时使用加载HTML。这是为了抑制有关无效的HTML在DOCTYPE没有定义实体的警告。当然,在生产环境中,错误报告将被禁用错误报告设置为无。
1 <?php 2 function getLinks($link) 3 { 4 /*** return array ***/ 5 $ret = array(); 6 7 /*** a new dom object ***/ 8 $dom = new domDocument; 9 10 /*** get the HTML (suppress errors) ***/ 11 @$dom->loadHTML(file_get_contents($link)); 12 13 /*** remove silly white space ***/ 14 $dom->preserveWhiteSpace = false; 15 16 /*** get the links from the HTML ***/ 17 $links = $dom->getElementsByTagName('a'); 18 19 /*** loop over the links ***/ 20 foreach ($links as $tag) 21 { 22 $ret[$tag->getAttribute('href')] = $tag->childNodes->item(0)->nodeValue; 23 } 24 25 return $ret; 26 } 27 ?>
类似的方法可以是使用XPath将达到同样的结果。无论哪种方式,使用DOM将会证明远远超过一般运算效率。
实例
1 <?php 2 /*** a link to search ***/ 3 $link = ""; 4 5 /*** get the links ***/ 6 $urls = getLinks($link); 7 8 /*** check for results ***/ 9 if(sizeof($urls) > 0) 10 { 11 foreach($urls as $key=>$value) 12 { 13 echo $key . ' - '. $value . '<br >'; 14 } 15 } 16 else 17 { 18 echo "No links found at $link"; 19 } 20 ?>