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中10个不常见却非常有用的函数
Mar 21 PHP
php压缩多个CSS为一个css的代码并缓存
Apr 21 PHP
php中随机显示图片的函数代码
Jun 23 PHP
php安全开发 添加随机字符串验证,防止伪造跨站请求
Feb 14 PHP
探讨:array2xml和xml2array以及xml与array的互相转化
Jun 24 PHP
PHP批量生成静态HTML的简单原理和方法
Apr 20 PHP
php实现求相对时间函数
Jun 15 PHP
总结对比php中的多种序列化
Aug 28 PHP
PHP长连接实现与使用方法详解
Feb 11 PHP
PHP封装的完整分页类示例
Aug 21 PHP
php输出反斜杠的实例方法
Sep 19 PHP
PHP 99乘法表的几种实现代码
Oct 13 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使用MySQL保存session会话的方法
2015/06/26 PHP
举例讲解PHP面对对象编程的多态
2015/08/12 PHP
Laravel-admin之修改操作日志的方法
2019/09/30 PHP
JAVASCRIPT style 中visibility和display之间的区别
2010/01/22 Javascript
js实现全屏漂浮广告移入光标停止移动
2013/12/02 Javascript
一个html5播放视频的video控件只支持android的默认格式mp4和3gp
2014/05/08 Javascript
jQuery 判断元素整理汇总
2017/02/28 Javascript
JavaScript订单操作小程序完整版
2017/06/23 Javascript
微信浏览器禁止页面下拉查看网址实例详解
2017/06/28 Javascript
jquery获取元素到屏幕四周可视距离的方法
2018/09/05 jQuery
angularjs使用div模拟textarea文本框的方法
2018/10/02 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】
2018/12/13 Javascript
tweenjs缓动算法的使用实例分析
2019/08/26 Javascript
javascript实现滚动条效果
2020/03/24 Javascript
jQuery 移除事件的方法
2020/06/20 jQuery
跟老齐学Python之类的细节
2014/10/13 Python
Python使用SocketServer模块编写基本服务器程序的教程
2016/07/12 Python
python下setuptools的安装详解及No module named setuptools的解决方法
2017/07/06 Python
python使用pandas实现数据分割实例代码
2018/01/25 Python
PyQt5 QSerialPort子线程操作的实现
2018/04/21 Python
详解python编译器和解释器的区别
2019/06/24 Python
python运用sklearn实现KNN分类算法
2019/10/16 Python
解决Python3下map函数的显示问题
2019/12/04 Python
美体小铺波兰官方网站:The Body Shop波兰
2019/09/03 全球购物
The North Face北面法国官网:美国著名户外品牌
2019/11/01 全球购物
康拓普公司Java笔面试
2016/09/23 面试题
SQL语言面试题
2013/08/27 面试题
新学期国旗下演讲稿
2014/05/08 职场文书
六年级小学生评语
2014/12/26 职场文书
安全生产警示教育活动总结
2015/05/09 职场文书
2016中考冲刺决心书
2015/09/22 职场文书
作文之亲情600字
2019/09/23 职场文书
浅谈JS的二进制家族
2021/05/09 Javascript
JavaWeb Servlet实现网页登录功能
2021/07/04 Java/Android
新手初学Java网络编程
2021/07/07 Java/Android
NoSQL优缺点与MongoDB数据库简介
2022/06/05 MongoDB