xpath在PHP中的应用,采集爬取HTML代码并匹配节点内容

阅读47 评论0
xpath非常好用,爬虫采集太轻松了。通常我们在采集源地址后,得到的是页面的HTML代码,有时候抓过来的源码是又多又乱。。接下来我们就开始正则匹配需要的内容了,这时候就会遇到不会正则表达式的困扰(估计很多人都不太会正则),再遇到节点复杂的,直接就懵逼了。1、先来看看xpath是啥?xpath 是一门在 XML 文档中查找信息的语言,XPath 可用...

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 位网友评论:

欢迎 来评论

请填写验证码