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 相关文章推荐
数据库的日期格式转换
Oct 09 PHP
php数组总结篇(一)
Sep 30 PHP
php知道与问问的采集插件代码
Oct 12 PHP
php中随机显示图片的函数代码
Jun 23 PHP
php实现的SESSION类
Dec 02 PHP
php导出中文内容excel文件类实例
Jul 06 PHP
配置eAccelerator和XCache扩展来加速PHP程序的执行
Dec 22 PHP
php自动加载方式集合
Apr 04 PHP
php使用正则表达式去掉html中的注释方法
Nov 03 PHP
PHP新特性之字节码缓存和内置服务器
Aug 11 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
对laravel in 查询的使用方法详解
Oct 09 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开发文件系统实例讲解
2006/10/09 PHP
PHP setcookie() cannot modify header information 的解决方法
2009/01/09 PHP
PHP中防止SQL注入实现代码
2011/02/19 PHP
php+ajax实时刷新简单实例
2015/02/25 PHP
Zend Framework连接Mysql数据库实例分析
2016/03/19 PHP
基于PHP实现数据分页显示功能
2016/05/26 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
2016/11/05 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
php intval函数用法总结
2019/04/14 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
Js 获取HTML DOM节点元素的方法小结
2009/04/24 Javascript
异步动态加载JS并运行(示例代码)
2013/12/13 Javascript
浅谈javascript对象模型和function对象
2014/12/26 Javascript
原生js实现autocomplete插件
2016/04/14 Javascript
设置jQueryUI DatePicker默认语言为中文
2016/06/04 Javascript
H5上传本地图片并预览功能
2017/05/08 Javascript
js获取文件里面的所有文件名(实例)
2017/10/17 Javascript
react实现菜单权限控制的方法
2017/12/11 Javascript
vue中使用 pako.js 解密 gzip加密字符串的方法
2019/06/10 Javascript
vue动态禁用控件绑定disable的例子
2019/10/28 Javascript
JavaScript布尔运算符原理使用解析
2020/05/06 Javascript
浅谈vue中使用编辑器vue-quill-editor踩过的坑
2020/08/03 Javascript
Node.js文本文件BOM头的去除方法
2020/11/22 Javascript
[03:03]DOTA2校园争霸赛 济南城市决赛欢乐发奖活动
2013/10/21 DOTA
[01:01:25]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第三局
2016/02/27 DOTA
python正则表达式去掉数字中的逗号(python正则匹配逗号)
2013/12/25 Python
python实现连接mongodb的方法
2015/05/08 Python
python简单分割文件的方法
2015/07/30 Python
python中如何使用正则表达式的集合字符示例
2017/10/09 Python
Python实现的txt文件去重功能示例
2018/07/07 Python
python制作图片缩略图
2019/04/30 Python
python字符串查找函数的用法详解
2019/07/08 Python
家得宝加拿大家装网上商店:The Home Depot加拿大
2016/08/27 全球购物
介绍一下ICMP(Internet Control Message Protocol)Internet控制信息协议
2016/11/26 面试题
暑假家长评语大全
2014/04/17 职场文书
SQL IDENTITY_INSERT作用案例详解
2021/08/23 MySQL