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反弹shell实现代码
Apr 22 PHP
php判断文件上传类型及过滤不安全数据的方法
Dec 17 PHP
php+mysql数据库查询实例
Jan 21 PHP
php简单统计在线人数的方法
May 10 PHP
基于Swoole实现PHP与websocket聊天室
Aug 03 PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 PHP
PHP实现求连续子数组最大和问题2种解决方法
Dec 26 PHP
在PHP中输出JS语句以及乱码问题的解决方案
Feb 13 PHP
PHP中PCRE正则解析代码详解
Apr 26 PHP
PHP观察者模式实例分析【对比JS观察者模式】
May 22 PHP
PHP使用HTML5 FormData对象提交表单操作示例
Jul 02 PHP
php定期拉取数据对比方法实例
Sep 22 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 allow_url_include的应用和解释
2010/04/22 PHP
PHP统计目录下的文件总数及代码行数(去除注释及空行)
2011/01/17 PHP
destoon官方标签大全
2014/06/20 PHP
Codeigniter检测表单post数据的方法
2015/03/21 PHP
php使用MySQL保存session会话的方法
2015/06/18 PHP
curl和libcurl的区别简介
2015/07/01 PHP
thinkphp实现163、QQ邮箱收发邮件的方法
2015/12/18 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
jquery和ajax的关系详细介绍
2013/11/29 Javascript
js实现类似菜单风格的TAB选项卡效果代码
2015/08/28 Javascript
原生JS实现旋转木马式图片轮播插件
2016/04/25 Javascript
表单中单选框添加选项和移除选项
2016/07/04 Javascript
JS实现控制文本框的内容
2016/07/10 Javascript
nodejs和C语言插入mysql数据库乱码问题的解决方法
2017/04/14 NodeJs
JS引用传递与值传递的区别与用法分析
2018/06/01 Javascript
nodejs实现用户登录路由功能
2019/05/22 NodeJs
uniapp实现可以左右滑动导航栏
2020/10/21 Javascript
python中字典dict常用操作方法实例总结
2015/04/04 Python
python实现从字典中删除元素的方法
2015/05/04 Python
Python中协程用法代码详解
2018/02/10 Python
Python使用itertools模块实现排列组合功能示例
2018/07/02 Python
Python2比较当前图片跟图库哪个图片相似的方法示例
2019/09/28 Python
pip install 使用国内镜像的方法示例
2020/04/03 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
2020/05/22 Python
python实现感知机模型的示例
2020/09/30 Python
HTML5事件方法全部汇总
2016/05/12 HTML / CSS
印度服装购物网站:Limeroad
2018/09/26 全球购物
大专计算机个人求职的自我评价
2013/10/21 职场文书
《桃花心木》教学反思
2014/02/17 职场文书
《月亮湾》教学反思
2014/04/14 职场文书
2014年团支部工作总结
2014/11/17 职场文书
小学班主任评语
2014/12/29 职场文书
《活见鬼》教学反思
2016/02/24 职场文书
2019年幼儿园家长接送责任书
2019/10/29 职场文书
Win11如何设置右键单击显示所有选项?Win11右键单击显示所有选项设置教程
2022/04/08 数码科技
Win11无法安装更新补丁KB3045316怎么办 附KB3045316补丁修复教程
2022/08/14 数码科技