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(''); $node=$dom->getElementsByTagName('div')->item(0); $outerHTML=$node->ownerDocument->saveHTML($node); $innerHTML=''; foreach($node->childNodesas$childNode){ $innerHTML.=$childNode->ownerDocument->saveHTML($childNode); } echo'p1
p2
outerHTML:
'; echohtmlspecialchars($outerHTML); echo'innerHTML:
'; echohtmlspecialchars($innerHTML); ?>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。