xpath在PHP中的应用,采集爬取HTML代码并匹配节点内容
xpath非常好用,爬虫采集太轻松了。
通常我们在采集源地址后,得到的是页面的HTML代码,有时候抓过来的源码是又多又乱。。
接下来我们就开始正则匹配需要的内容了,这时候就会遇到不会正则表达式的困扰(估计很多人都不太会正则),再遇到节点复杂的,直接就懵逼了。
1、先来看看xpath是啥?
xpath 是一门在 XML 文档中查找信息的语言,XPath 可用来在 XML 文档中对元素和属性进行遍历。
有没有点似懂非懂的,说白了,用xpath对XML/HTML节点索引非常的方便。
2、来看一个简单的DEMO
比如一段HTML代码:
<html> <head> <title>xpath demo</title> </head> <body> <h1>xpath</h1> <p>第一个P节点</p> <p>第二个P节点</p> <div class="item"> <p>嵌套P节点1</p> </div> <div class="item"> <p>嵌套P节点2</p> </div> </body> </html>
用xpath获取P节点。
需要注意的是,xpath是对XML文档索引的,直接用HTML代码是不可以的。需要用DOMDocument转换成DOM对象,然后用DOMXPath转换成xpath对象进行操作。
$htmlDom = new DOMDocument(); $htmlDom->loadHTML($html); //载入HTML $htmlDom->normalize(); //将HTML规范化,避免那些不规范的HTML造成获取节点困难 $xpath = new DOMXPath($htmlDom); $list= $xpath->evaluate("/html/body//p");
到这一步我们就获取到了body下面的所有P元素节点了,接下来获取内容
foreach($list as $item){ $text[]=$item->textContent }
最后,打印$text数组看看内容
array( 0=>'第一个P节点', 1=>'第二个P节点', 2=>'嵌套P节点1', 3=>'嵌套P节点2', )
是不是很方便哈。
有 0 位网友评论: