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中判断一个请求是ajax请求还是普通请求的方法
Jun 28 PHP
PHP冒泡排序算法代码详细解读
Jul 17 PHP
一个PHP验证码类代码分享(已封装成类)
Jul 17 PHP
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
Jun 25 PHP
php使用curl抓取qq空间的访客信息示例
Feb 28 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
Aug 08 PHP
PHP中使用正则表达式提取中文实现笔记
Jan 20 PHP
浅析iis7.5安装配置php环境
May 10 PHP
PHP register_shutdown_function()函数的使用示例
Jun 23 PHP
thinkPHP商城公告功能开发问题分析
Dec 01 PHP
微信公众平台开发教程⑥ 微信开发集成类的使用图文详解
Apr 10 PHP
PHP写API输出的时用echo的原因详解
Apr 28 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 curl批处理及多请求并发实现方法分析
2018/08/15 PHP
微信公众号之主动给用户发送消息功能
2019/06/22 PHP
javascript之更有效率的字符串替换
2008/08/02 Javascript
extJs 常用到的增,删,改,查操作代码
2009/12/28 Javascript
javascript 内存回收机制理解
2011/01/17 Javascript
基于jquery实现漂亮的动态信息提示效果
2011/08/02 Javascript
javascript实现炫酷的拖动分页
2015/05/11 Javascript
JQuery实现图片轮播效果
2015/09/15 Javascript
javascript轻量级库createjs使用Easel实现拖拽效果
2016/02/19 Javascript
Bootstrap和Angularjs配合自制弹框的实例代码
2016/08/24 Javascript
AngularJS动态加载模块和依赖的方法分析
2016/11/08 Javascript
jQuery倒计时代码(超简单)
2017/02/27 Javascript
在一般处理程序(ashx)中弹出js提示语
2017/08/16 Javascript
webpack file-loader和url-loader的区别
2019/01/15 Javascript
JS/jQuery实现获取时间的方法及常用类完整示例
2019/03/07 jQuery
使用Vue.js中的过滤器实现幂方求值的方法
2019/08/27 Javascript
使用Bootstrap做一个朝代历史表
2019/12/10 Javascript
jQuery擦除插件eraser使用方法详解
2020/01/11 jQuery
在vue中axios设置timeout超时的操作
2020/09/04 Javascript
小程序实现录音功能
2020/09/22 Javascript
[40:04]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
[01:39:04]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第二场 2月1日
2021/03/11 DOTA
python base64 decode incorrect padding错误解决方法
2015/01/08 Python
Python实现控制台输入密码的方法
2015/05/29 Python
对python requests的content和text方法的区别详解
2018/10/11 Python
Python求正态分布曲线下面积实例
2019/11/20 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
2020/01/16 Python
使用python求解二次规划的问题
2020/02/29 Python
基于Python实现视频的人脸融合功能
2020/06/12 Python
英国最大的网上药品商店:Chemist Direct
2017/12/16 全球购物
是什么让J2EE适合用来开发多层的分布式的应用
2015/01/16 面试题
小车司机岗位职责
2013/11/25 职场文书
新入职员工的自我介绍演讲稿
2014/01/02 职场文书
《美丽的黄昏》教学反思
2014/02/28 职场文书
《开国大典》教学反思
2016/02/16 职场文书
nginx 配置指令之location使用详解
2022/05/25 Servers