PHP的html实现xpath解析,PHP xpath提取网页数据内容代码解析

87ac51ebd7191ea64b55ff91e2778773.png

想要使用xpath来解析html内容, PHP自带两个对象

DOMDocument,DOMXpath,其中初始化 loadHtml一般都会报很多警告,但是并不影响使用,用@屏蔽错误。

/**

* 初始化DOMXpath对象

*

* @param [type] $content 网页内容

* @param [array] $pathinfo 匹配信息

*

* @return void

*/

private function _createXpathObj($content, $patinfo)

{

// 如果没有xpath配置项,不初始化xpath

if (!$this->_existsXpathParse($patinfo)) {

return;

}

try {

$dom = new DOMDocument();

@$dom->loadHtml($content);

$dom->normalize();

$xpath = new DOMXpath($dom);

$this->xpathObj = $xpath;

} catch (Exception $e) {

getService("logger")->warning("Parse html fail", ["content" => $content]);

}

}

其中 $node 为 DOMElement 对象。

/**

* 获取Xpath解析值

*

* @param [type] $pat 匹配模式

*

* @return string

*/

private function _getXpathField($pat)

{

$objs = $this->xpathObj->query($pat);

if ($objs->length > 0) {

$node = $objs->item(0);

$outerHTML = $node->ownerDocument->saveHTML($node);

return trim($outerHTML);

# 作为示例 输出innerhtml

//$innerHTML = "";

//foreach ($node->childNodes as $childNode){

// $innerHTML .= $childNode->ownerDocument->saveHTML($childNode);

//}

//return $innerHTML;

# 作为示例 输出文本不含标签

//return $node->textContent; //$node->nodeValue;

}

return "";

}

示例

$dom = new DOMDocument("1.0","UTF-8");

$dom->loadHTML("

p1

p2

");

$node = $dom->getElementsByTagName("div")->item(0);

$outerHTML = $node->ownerDocument->saveHTML($node);

$innerHTML = "";

foreach ($node->childNodes as $childNode){

$innerHTML .= $childNode->ownerDocument->saveHTML($childNode);

}

echo "

outerHTML:

";

echo htmlspecialchars($outerHTML);

echo "

innerHTML:

";

echo htmlspecialchars($innerHTML);

?>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持云海天教程。

原文链接:https://www.cnblogs.com/wangluochong/p/13222665.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值