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打造的tab选项卡效果代码(不用js)
Dec 29 PHP
php处理斐波那契数列非递归方法
Feb 04 PHP
php读取txt文件组成SQL并插入数据库的代码(原创自Zjmainstay)
Jul 31 PHP
php实现根据url自动生成缩略图的方法
Sep 23 PHP
php实现用于验证所有类型的信用卡类
Mar 24 PHP
php排序算法实例分析
Oct 17 PHP
php中strtotime函数性能分析
Nov 20 PHP
thinkPHP实现签到功能的方法
Mar 15 PHP
PHP基于接口技术实现简单的多态应用完整实例
Apr 26 PHP
php数值转换时间及时间转换数值用法示例
May 18 PHP
在php的yii2框架中整合hbase库的方法
Sep 20 PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
Oct 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 无限分类 树形数据格式化代码
2016/10/11 PHP
PHP接口继承及接口多继承原理与实现方法详解
2017/10/18 PHP
Web开发之JavaScript
2012/03/29 Javascript
使用jQuery动态加载js脚本文件的方法
2014/04/03 Javascript
jQuery应用之jQuery链用法实例
2015/01/19 Javascript
js实现下拉框选择要显示图片的方法
2015/02/16 Javascript
理解JavaScript的变量的入门教程
2015/07/07 Javascript
easyui Draggable组件实现拖动效果
2015/08/19 Javascript
js实现(全选)多选按钮的方法【附实例】
2016/03/30 Javascript
checkbox 选中一个另一个checkbox也会选中的实现代码
2016/07/09 Javascript
微信小程序开发探究
2016/12/27 Javascript
jQuery中DOM节点删除之empty与remove
2017/01/20 Javascript
ES6新特性之变量和字符串用法示例
2017/04/01 Javascript
Vue+SpringBoot开发V部落博客管理平台
2017/12/27 Javascript
python之yield表达式学习
2014/09/02 Python
在Python的Django框架中用流响应生成CSV文件的教程
2015/05/02 Python
python的scipy实现插值的示例代码
2019/11/12 Python
Eclipse配置python默认头过程图解
2020/04/26 Python
python实现感知机模型的示例
2020/09/30 Python
美国廉价机票预订网站:Cheapfaremart
2018/04/28 全球购物
美国台面电器和厨具品牌:KitchenAid
2019/04/12 全球购物
早晨薰衣草在线女性精品店:Morning Lavender
2021/01/04 全球购物
简述安装Slackware Linux系统的过程
2012/05/08 面试题
超市促销实习自我鉴定
2013/09/23 职场文书
中式餐厅创业计划书范文
2014/01/23 职场文书
上班离岗检讨书
2014/01/27 职场文书
颂军魂爱军营演讲稿
2014/09/13 职场文书
党的群众路线教育实践活动心得体会(企业)
2014/11/03 职场文书
导师对论文的学术评语
2015/01/04 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
关于幸福的感言
2015/08/03 职场文书
高三物理教学反思
2016/02/20 职场文书
PyQt5实现多张图片显示并滚动
2021/06/11 Python
深入理解以DEBUG方式线程的底层运行原理
2021/06/21 Java/Android
python文件与路径操作神器 pathlib
2022/04/01 Python
Mysql 如何合理地统计一个数据库里的所有表的数据量
2022/04/18 MySQL