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.ini 中文版
Oct 28 PHP
PHP 字符串操作入门教程
Dec 06 PHP
PHP随机数生成代码与使用实例分析
Apr 08 PHP
Apache中php.ini的设置方法
Feb 28 PHP
一个简洁的PHP可逆加密函数(分享)
Jun 06 PHP
解析php中获取系统信息的方法
Jun 25 PHP
php 启动报错如何解决
Jan 17 PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
Dec 18 PHP
Zend Framework入门教程之Zend_Registry组件用法详解
Dec 09 PHP
PHP实现动态压缩js与css文件的方法
May 02 PHP
phpMyAdmin通过密码漏洞留后门文件
Nov 20 PHP
详解php中curl返回false的解决办法
Mar 18 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教程-第一天
2007/03/18 PHP
php读取30天之内的根据算法排序的代码
2008/04/06 PHP
PHP中的MYSQL常用函数(php下操作数据库必备)
2010/09/12 PHP
apache mysql php 源码编译使用方法
2012/05/03 PHP
在Linux系统的服务器上隐藏PHP版本号的方法
2015/06/06 PHP
详解PHP数据压缩、加解密(pack, unpack)
2016/12/17 PHP
php获取excel文件数据
2017/04/21 PHP
Django 中 cookie的使用
2017/08/17 PHP
利用 fsockopen() 函数开放端口扫描器的实例
2017/08/19 PHP
laravel多条件查询方法(and,or嵌套查询)
2019/10/09 PHP
PHP的垃圾回收机制代码实例讲解
2021/02/27 PHP
js DOM的学习笔记
2011/12/22 Javascript
jQuery处理xml格式的返回数据(实例解析)
2013/11/28 Javascript
div浮层,滚动条移动,位置保持不变的4种方法汇总
2013/12/11 Javascript
js老生常谈之this,constructor ,prototype全面解析
2016/04/05 Javascript
微信小程序 Record API详解及实例代码
2016/09/30 Javascript
JS中用try catch对代码运行的性能影响分析
2016/12/26 Javascript
页面间固定参数,通过cookie传值的实现方法
2017/05/31 Javascript
Ionic学习日记实现验证码倒计时
2018/02/08 Javascript
vue实现路由懒加载及组件懒加载的方式
2019/06/11 Javascript
通过javascript实现扫雷游戏代码实例
2020/02/09 Javascript
JavaScript原生数组函数实例汇总
2020/10/14 Javascript
python 开发的三种运行模式详细介绍
2017/01/18 Python
mvc框架打造笔记之wsgi协议的优缺点以及接口实现
2018/08/01 Python
Python编程图形库之Pillow使用方法讲解
2018/12/28 Python
django框架自定义模板标签(template tag)操作示例
2019/06/24 Python
python SVM 线性分类模型的实现
2019/07/19 Python
Java的五个基础面试题
2016/02/26 面试题
C#如何调用Windows程序打开一个文档
2014/12/26 面试题
成功经营餐厅的创业计划书范文
2013/12/26 职场文书
宠物店的创业计划书范文
2014/01/11 职场文书
大学生社团活动总结
2014/04/26 职场文书
关于爱国的演讲稿
2014/05/07 职场文书
店铺转让协议书
2015/01/29 职场文书
总经理致辞
2015/07/29 职场文书
使用Python解决图表与画布的间距问题
2022/04/11 Python