当前位置:首页 > PHP教程 > php高级应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2022-03-18 10:24:17 浏览: 评论:0 

这篇文章主要介绍了PHP xpath提取网页数据内容代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下。

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

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

  1. /** 
  2.  * 初始化DOMXpath对象 
  3.  * 
  4.  * @param [type] $content 网页内容 
  5.  * @param [array] $pathinfo 匹配信息 
  6.  * 
  7.  * @return void 
  8.  */ 
  9. private function _createXpathObj($content$patinfo
  10.   // 如果没有xpath配置项,不初始化xpath 
  11.   if (!$this->_existsXpathParse($patinfo)) { 
  12.     return
  13.   } 
  14.   try { 
  15.     $dom = new \DOMDocument(); 
  16.     @$dom->loadHtml($content); 
  17.     $dom->normalize(); 
  18.     $xpath = new \DOMXpath($dom); 
  19.     $this->xpathObj = $xpath
  20.   } catch (\Exception $e) { 
  21.     getService('logger')->warning('Parse html fail', ['content' => $content]); 
  22.   } 

其中 $node 为 DOMElement 对象。

  1. /** 
  2.  * 获取Xpath解析值 
  3.  * 
  4.  * @param [type] $pat 匹配模式 
  5.  * 
  6.  * @return string 
  7.  */ 
  8. private function _getXpathField($pat
  9.   $objs = $this->xpathObj->query($pat); 
  10.   if ($objs->length > 0) { 
  11.     $node = $objs->item(0); 
  12.     $outerHTML = $node->ownerDocument->saveHTML($node); 
  13.     return trim($outerHTML); 
  14.     # 作为示例 输出innerhtml 
  15.     //$innerHTML = ''; 
  16.     //foreach ($node->childNodes as $childNode){ 
  17.     //   $innerHTML .= $childNode->ownerDocument->saveHTML($childNode); 
  18.     //} 
  19.     //return $innerHTML;  
  20.     # 作为示例 输出文本不含标签 
  21.     //return $node->textContent; //$node->nodeValue; 
  22.   } 
  23.   return ''

示例

  1. <?php 
  2.     $dom = new DOMDocument('1.0','UTF-8'); 
  3.     $dom->loadHTML('<html><body><div><p>p1</p><p>p2</p></div></body></html>');     
  4.     $node = $dom->getElementsByTagName('div')->item(0);     
  5.     $outerHTML = $node->ownerDocument->saveHTML($node);     
  6.     $innerHTML = ''
  7.     foreach ($node->childNodes as $childNode){ 
  8.         $innerHTML .= $childNode->ownerDocument->saveHTML($childNode); 
  9.     } 
  10.     echo '<h2>outerHTML: </h2>'
  11.     echo htmlspecialchars($outerHTML); 
  12.     echo '<h2>innerHTML: </h2>'
  13.     echo htmlspecialchars($innerHTML);     
  14. ?>

Tags: xpath PHP提取网页数据内容

分享到: