PHP xpath提取网页数据内容代码解析
想要使用xpath来解析html内容,PHP自带两个对象
DOMDocument,DOMXpath,其中初始化loadHtml一般都会报很多警告,但是并不影响使用,用@屏蔽错误。
/**
*初始化DOMXpath对象
*
*@param[type]$content网页内容
*@param[array]$pathinfo匹配信息
*
*@returnvoid
*/
privatefunction_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('Parsehtmlfail',['content'=>$content]);
}
}
其中$node为DOMElement对象。
/**
*获取Xpath解析值
*
*@param[type]$pat匹配模式
*
*@returnstring
*/
privatefunction_getXpathField($pat)
{
$objs=$this->xpathObj->query($pat);
if($objs->length>0){
$node=$objs->item(0);
$outerHTML=$node->ownerDocument->saveHTML($node);
returntrim($outerHTML);
#作为示例输出innerhtml
//$innerHTML='';
//foreach($node->childNodesas$childNode){
//$innerHTML.=$childNode->ownerDocument->saveHTML($childNode);
//}
//return$innerHTML;
#作为示例输出文本不含标签
//return$node->textContent;//$node->nodeValue;
}
return'';
}
示例
loadHTML('p1
p2
');
$node=$dom->getElementsByTagName('div')->item(0);
$outerHTML=$node->ownerDocument->saveHTML($node);
$innerHTML='';
foreach($node->childNodesas$childNode){
$innerHTML.=$childNode->ownerDocument->saveHTML($childNode);
}
echo'outerHTML:
';
echohtmlspecialchars($outerHTML);
echo'innerHTML:
';
echohtmlspecialchars($innerHTML);
?>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。