Xpath的Dom分析真的比自己写正则去匹配Dom要高效很多,而要使用php的XpathDom,这里我使用的是Wamp,要打开php配置的extensions的openSSL,否则在获取网页的Dom时会报错,然后我们所需的某个元素的Xpath可以通过浏览器,例如谷歌浏览器和火狐浏览器按F12调出网页的element控制台,(这里学过前端的都会的),然后右键自己想要获得的元素,Copy Xpath复制这个元素的Xpath
现在我们已经获取了元素的Xpath了,示例我们获取的Xpath为:
//*[@id='mainBox']/main/div[2]/div[2]/h4/a
这里我们是要获取一个列表,所以改为//*[@id='mainBox']/main/div[2]/div/h4/a
<?php
for($j=1 ;$j<=2;$j++){
$content= file_get_contents('https://blog.csdn.net/SIRENloazhang/article/list/'.$j.'?');
$document = new DOMDocument();
$document->strictErrorChecking = false;
/* $tidy = new tidy;
$content = $tidy->repairString($content);
$content = mb_convert_encoding($content, 'UTF-8'); *//*这里就不用Tidy了*/
@$document->loadhtml($content); /*@是一定要给的*/
$xpath = new DOMXPAth($document);
$num = 0;
$elements= $xpath->query("//*[@id='mainBox']/main/div[2]/div/h4/a");
if($elements->length!=0){
for ($i = 0; $i < $elements->length; $i++) {
$element = $elements->item($i);
$url = $element->getAttribute('href');
print_r($url.'<br/>');
$num++;
}
}else{
echo "读取完毕!!!";
}
}
?>
运行结果: