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执行linux系统命令的常用函数使用说明
Apr 27 PHP
PHP实现对站点内容外部链接的过滤方法
Sep 10 PHP
PHP使用xmllint命令处理xml与html的方法
Dec 15 PHP
PHP中的替代语法介绍
Jan 09 PHP
PHP网站开发中常用的8个小技巧
Feb 13 PHP
php使用ZipArchive函数实现文件的压缩与解压缩
Oct 27 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
Aug 19 PHP
Paypal实现循环扣款(订阅)功能
Mar 23 PHP
php简单生成一组与多组随机字符串的方法
May 09 PHP
在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解
Aug 07 PHP
PHP面向对象程序设计继承用法简单示例
Dec 28 PHP
gearman中任务的优先级和返回状态实例分析
Feb 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异步调用socket实现代码
2012/01/12 PHP
php使用sql数据库 获取字段问题介绍
2013/08/12 PHP
php中instanceof 与 is_a()区别分析
2015/03/03 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
2016/11/15 PHP
php实现给二维数组中所有一维数组添加值的方法
2017/02/04 PHP
PHP自定义函数实现数组比较功能示例
2017/10/19 PHP
PHP7变量处理机制修改
2021/03/09 PHP
关于__defineGetter__ 和__defineSetter__的说明
2007/05/12 Javascript
EasySlider 基于jQuery功能强大简单易用的滑动门插件
2010/06/11 Javascript
javascript定义函数的方法
2010/12/06 Javascript
jQuery图片的展开和收缩实现代码
2013/04/16 Javascript
jQuery中after的两种用法实例
2013/07/03 Javascript
form表单action提交的js部分与html部分
2014/01/07 Javascript
直接在JS里创建JSON数据然后遍历使用
2014/07/25 Javascript
jQuery选择器之基本选择器与层次选择器
2015/03/03 Javascript
Node.js中npm常用命令大全
2016/06/09 Javascript
Node.js Addons翻译(C/C++扩展)
2016/06/12 Javascript
探究Vue.js 2.0新增的虚拟DOM
2016/10/20 Javascript
基于JavaScript实现的折半查找算法示例
2017/04/14 Javascript
解决淘宝cnpm 安装后cnpm不是内部或外部命令的问题
2018/05/17 Javascript
使用JavaScript中的lodash编写双色球效果
2018/06/24 Javascript
vue如何安装使用Quill富文本编辑器
2018/09/21 Javascript
Vue插槽原理与用法详解
2019/03/05 Javascript
Python+django实现文件下载
2016/01/17 Python
Python之Web框架Django项目搭建全过程
2017/05/02 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
2017/05/19 Python
Django1.11自带分页器paginator的使用方法
2019/10/31 Python
python 画函数曲线示例
2019/12/04 Python
python 字段拆分详解
2019/12/17 Python
Python递归函数特点及原理解析
2020/03/04 Python
python语言实现贪吃蛇游戏
2020/11/13 Python
Farfetch香港官网:汇集全球时尚奢侈品购物平台
2017/11/26 全球购物
经营场所使用证明
2015/06/19 职场文书
银行安全保卫工作总结
2015/08/10 职场文书
团支部组织委员竞选稿
2015/11/21 职场文书
vue如何在data中引入图片的正确路径
2022/06/05 Vue.js