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


Posted in PHP onJuly 16, 2020

想要使用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);    
?>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php 变量定义方法
Jun 14 PHP
将一维或多维的数组连接成一个字符串的php代码
Aug 08 PHP
基于Linux调试工具strace与gdb的常用命令总结
Jun 03 PHP
从PHP $_SERVER相关参数判断是否支持Rewrite模块
Sep 26 PHP
PHP时间戳 strtotime()使用方法和技巧
Oct 29 PHP
php object转数组示例
Jan 15 PHP
php批量删除数据库下指定前缀的表以prefix_为例
Aug 24 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
Nov 03 PHP
PHP+redis实现添加处理投票的方法
Nov 14 PHP
thinkphp配置文件路径的实现方法
Aug 30 PHP
thinkphp5 加载静态资源路径与常量的方法
Dec 24 PHP
PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】
Sep 10 PHP
浅析PHP中json_encode与json_decode的区别
Jul 15 #PHP
PHP vsprintf()函数格式化字符串操作原理解析
Jul 14 #PHP
PHP number_format函数原理及实例解析
Jul 14 #PHP
PHP array_reverse() 函数原理及实例解析
Jul 14 #PHP
PHP基于array_unique实现二维数组去重
Jul 14 #PHP
关于Anemometer图形化显示MySQL慢日志的工具搭建及使用的详细介绍
Jul 13 #PHP
通过实例解析PHP数据类型转换方法
Jul 11 #PHP
You might like
PHP获取网站域名和地址的代码
2008/08/17 PHP
PHP Smarty生成EXCEL文档的代码
2008/08/23 PHP
PHP Google的translate API代码
2008/12/10 PHP
解析PHP工厂模式的好处
2013/06/18 PHP
php base64 编码与解码实例代码
2017/03/21 PHP
利用php-cli和任务计划实现订单同步功能的方法
2017/05/03 PHP
laravel 解决路由除了根目录其他都404的问题
2019/10/18 PHP
初试jQuery EasyUI 使用介绍
2010/04/01 Javascript
jquery tab标签页的制作
2010/05/10 Javascript
JS中三目运算符和if else的区别分析与示例
2014/11/21 Javascript
JS+CSS实现模仿浏览器网页字符查找功能的方法
2015/02/26 Javascript
jQuery使用drag效果实现自由拖拽div
2015/06/11 Javascript
jQuery实现类似老虎机滚动抽奖效果
2015/08/06 Javascript
Vue.js基础知识汇总
2016/04/27 Javascript
window.open不被拦截的简单实现代码(推荐)
2016/08/04 Javascript
Node.js学习入门
2017/01/03 Javascript
jQuery实现的事件绑定功能基本示例
2017/10/11 jQuery
基于vue实现图片验证码倒计时60s功能
2019/12/10 Javascript
浅谈Vue static 静态资源路径 和 style问题
2020/11/07 Javascript
[33:23]Secret vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
使用Python实现一个简单的项目监控
2015/03/31 Python
Python实现压缩文件夹与解压缩zip文件的方法
2018/09/01 Python
浅谈python新式类和旧式类区别
2019/04/26 Python
pyqt5 使用label控件实时显示时间的实例
2019/06/14 Python
Laravel框架表单验证格式化输出的方法
2019/09/25 Python
Python vtk读取并显示dicom文件示例
2020/01/13 Python
HTML5新特性之type=file文件上传功能
2018/02/02 HTML / CSS
Hotels.com台湾:饭店订房网
2017/09/06 全球购物
精选鞋类、服装和配饰的全球领先目的地:Bodega
2021/02/27 全球购物
怎样让char类型的东西转换成int类型
2013/12/09 面试题
成人毕业生自我鉴定
2013/10/18 职场文书
总经理岗位职责
2013/11/09 职场文书
机电一体化应届生求职信
2014/08/09 职场文书
德劲DE1105机评
2022/04/05 无线电
vue实现Toast组件轻提示
2022/04/10 Vue.js
MySQL sql模式设置引起的问题
2022/05/15 MySQL