网络编程
位置:首页>> 网络编程>> php编程>> PHP xpath提取网页数据内容代码解析

PHP xpath提取网页数据内容代码解析

作者:网络虫  发布时间:2024-06-05 15:39:35 

标签:PHP,xpath,提取,网页,数据

想要使用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 '';
 }

示例


<?php
   $dom = new DOMDocument('1.0','UTF-8');
   $dom->loadHTML('<html><body><div><p>p1</p><p>p2</p></div></body></html>');    
   $node = $dom->getElementsByTagName('div')->item(0);    
   $outerHTML = $node->ownerDocument->saveHTML($node);    
   $innerHTML = '';
   foreach ($node->childNodes as $childNode){
       $innerHTML .= $childNode->ownerDocument->saveHTML($childNode);
   }
   echo '<h2>outerHTML: </h2>';
   echo htmlspecialchars($outerHTML);
   echo '<h2>innerHTML: </h2>';
   echo htmlspecialchars($innerHTML);    
?>

来源:https://www.cnblogs.com/wangluochong/p/13222665.html

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com