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缓存技术介绍
Nov 25 PHP
php环境配置 php5 MySQL5 apache2 phpmyadmin安装与配置图文教程
Mar 16 PHP
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
Apr 28 PHP
PHP中运用jQuery的Ajax跨域调用实现代码
Feb 21 PHP
控制PHP的输出:缓存并压缩动态页面
Jun 11 PHP
php+js实现图片的上传、裁剪、预览、提交示例
Aug 27 PHP
PHP实现加强版加密解密类实例
Jul 29 PHP
PHP正则表达式之捕获组与非捕获组
Nov 06 PHP
php 解决substr()截取中文字符乱码问题
Jul 18 PHP
yii插入数据库防并发的简单代码
May 27 PHP
php实现数字补零的方法总结
Sep 12 PHP
PHP加MySQL消息队列深入理解
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
为什么那些咖啡爱好者大多看不上连锁咖啡店?
2021/03/06 咖啡文化
php的一个登录的类 [推荐]
2007/03/16 PHP
PhpMyAdmin中无法导入sql文件的解决办法
2010/01/08 PHP
PHPwind整合最土系统用户同步登录实现方法
2010/12/08 PHP
基于php split()函数的用法详解
2013/06/05 PHP
php中使用key,value,current,next和prev函数遍历数组的方法
2015/03/17 PHP
深入浅出php socket编程
2015/05/13 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
2016/09/13 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
学习js所必须要知道的一些
2007/03/07 Javascript
jquery弹出框的用法示例(2)
2013/08/26 Javascript
js操纵dom生成下拉列表框的方法
2014/02/24 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
2014/05/28 Javascript
JS实现兼容各种浏览器的获取选择文本的方法【测试可用】
2016/06/21 Javascript
浅谈JavaScript中变量和函数声明的提升
2016/08/09 Javascript
基于JavaScript实现带数据验证和复选框的表单提交
2017/08/23 Javascript
JS将网址url转化为JSON格式的方法
2018/07/02 Javascript
详解三种方式在React中解决绑定this的作用域问题并传参
2020/08/18 Javascript
python xml.etree.ElementTree遍历xml所有节点实例详解
2016/12/04 Python
Python中循环引用(import)失败的解决方法
2018/04/22 Python
Python检测网络延迟的代码
2018/05/15 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
2019/06/12 Python
python批量图片处理简单示例
2019/08/06 Python
超全Python图像处理讲解(多模块实现)
2020/04/13 Python
pandas读取csv文件提示不存在的解决方法及原因分析
2020/04/21 Python
HTML5 video 视频标签使用介绍
2014/02/03 HTML / CSS
TUMI马来西亚官方网站:国际领先的高品质商旅箱包品牌
2018/04/26 全球购物
Tommy Hilfiger澳洲官网:美国高端休闲领导品牌
2020/12/16 全球购物
如何查询Oracle数据库中已经创建的索引
2013/10/11 面试题
饭店工作计划书
2014/01/10 职场文书
小学生安全演讲稿
2014/04/25 职场文书
应届大专生求职信
2014/06/26 职场文书
小学班主任研修日志
2015/11/13 职场文书
干部理论学习心得体会
2016/01/21 职场文书
用python自动生成日历
2021/04/24 Python
go结构体嵌套的切片数组操作
2021/04/28 Golang