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实现的遍历文件夹下所有文件,编辑删除
Jan 05 PHP
php入门学习知识点二 PHP简单的分页过程与原理
Jul 14 PHP
Laravel中使用自己编写类库的3种方法
Feb 10 PHP
PHP时间和日期函数详解
May 08 PHP
PHP使用pear自带的mail类库发邮件的方法
Jul 08 PHP
解读PHP中的垃圾回收机制
Aug 10 PHP
学习php设计模式 php实现抽象工厂模式
Dec 07 PHP
PHP实现小偷程序实例
Oct 31 PHP
[原创]php token使用与验证示例【测试可用】
Aug 30 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
Apr 08 PHP
php 使用expat方式解析xml文件操作示例
Nov 26 PHP
Laravel 集成微信用户登录和绑定的实现
Dec 27 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 强制下载文件代码
2010/10/24 PHP
php获取通过http协议post提交过来xml数据及解析xml
2012/12/16 PHP
php中get_headers函数的作用及用法的详细介绍
2013/04/27 PHP
php+mysql数据库实现无限分类的方法
2014/12/12 PHP
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
jQuery实现鼠标滑向当前图片高亮显示并且其它图片变灰的方法
2015/07/27 Javascript
jquery中val()方法是从最后一个选项往前读取的
2015/09/06 Javascript
超精准的javascript验证身份证号的具体实现方法
2015/11/18 Javascript
js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)
2016/01/27 Javascript
JavaScript简单实现弹出拖拽窗口(一)
2016/06/17 Javascript
简单实现jQuery手风琴效果
2017/08/18 jQuery
element-ui中的select下拉列表设置默认值方法
2018/08/24 Javascript
小程序组件之仿微信通讯录的实现代码
2018/09/12 Javascript
js实现计时器秒表功能
2019/12/16 Javascript
记一次用ts+vuecli4重构项目的实现
2020/05/21 Javascript
Vue实现背景更换颜色操作
2020/07/17 Javascript
vue组件添加事件@click.native操作
2020/10/30 Javascript
Python随手笔记之标准类型内建函数
2015/12/02 Python
Mac 上切换Python多版本
2017/06/17 Python
Windows环境下python环境安装使用图文教程
2018/03/13 Python
Python第三方库h5py_读取mat文件并显示值的方法
2019/02/08 Python
python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法
2019/06/26 Python
Tensorflow模型实现预测或识别单张图片
2019/07/19 Python
Python+OpenCv制作证件图片生成器的操作方法
2019/08/21 Python
python多进程(加入进程池)操作常见案例
2019/10/21 Python
Python操作列表常用方法实例小结【创建、遍历、统计、切片等】
2019/10/25 Python
Pytorch 神经网络—自定义数据集上实现教程
2020/01/07 Python
python在linux环境下安装skimage的示例代码
2020/10/14 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
2020/11/02 Python
用canvas实现图片滤镜效果附演示
2013/11/05 HTML / CSS
统计每一学生的平均成绩
2014/06/06 面试题
如何用Java实现列出某个目录下的所有子目录
2015/07/20 面试题
电大自我鉴定
2013/10/27 职场文书
物流管理专业毕业生自荐信
2014/03/04 职场文书
2014年纳税评估工作总结
2014/12/23 职场文书
销售经理岗位职责范本
2015/04/02 职场文书