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的特殊设置
Oct 09 PHP
攻克CakePHP系列一 连接MySQL数据库
Oct 22 PHP
php面向对象全攻略 (十一)__toString()用法 克隆对象 __call处理调用错误
Sep 30 PHP
php设计模式 Mediator (中介者模式)
Jun 26 PHP
关于UEditor编辑器远程图片上传失败的解决办法
Aug 31 PHP
php htmlspecialchars()与shtmlspecialchars()函数的深入分析
Jun 05 PHP
PHP实现的封装验证码类详解
Jun 18 PHP
php中count获取多维数组长度的方法
Nov 03 PHP
php格式输出文件var_export函数实例
Nov 15 PHP
PHP随手笔记整理之PHP脚本和JAVA连接mysql数据库
Nov 25 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
May 23 PHP
Laravel使用RabbitMQ的方法示例
Jun 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
discuz authcode 经典php加密解密函数解析
2020/07/12 PHP
php递归删除指定文件夹的方法小结
2015/04/20 PHP
PHP5.2下preg_replace函数的问题
2015/05/08 PHP
php运行报错Call to undefined function curl_init()的最新解决方法
2016/11/20 PHP
JS IE和FF兼容性问题汇总
2009/02/09 Javascript
javascript 打印内容方法小结
2009/11/04 Javascript
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
浅析javascript的间隔调用和延时调用
2014/11/12 Javascript
IE6/IE7中JavaScript json提示缺少标识符、字符串或数字问题处理
2014/12/16 Javascript
Node.js中使用socket创建私聊和公聊聊天室
2015/11/19 Javascript
AngularJS ng-bind-template 指令详解
2016/07/30 Javascript
jQuery实现产品对比功能附源码下载
2016/08/09 Javascript
详谈jQuery Ajax(load,post,get,ajax)的用法
2017/03/02 Javascript
jQuery实现字符串全部替换的方法【推荐】
2017/03/09 Javascript
老生常谈jacascript DOM节点获取
2017/04/17 Javascript
浅析Javascript中双等号(==)隐性转换机制
2017/10/27 Javascript
在vue中获取微信支付code及code被占用问题的解决方法
2019/04/16 Javascript
一文读懂ES7中的javascript修饰器
2019/05/06 Javascript
Vue SPA 初次进入加载动画实现代码
2019/11/14 Javascript
JavaScript简易计算器制作
2020/01/17 Javascript
[01:03:36]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第二场 1月26日
2021/03/11 DOTA
使用Python脚本和ADB命令实现卸载App
2017/02/10 Python
Python与人工神经网络:使用神经网络识别手写图像介绍
2017/12/19 Python
python命令行参数用法实例分析
2019/06/25 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
2020/03/11 Python
基于Python的OCR实现示例
2020/04/03 Python
Python csv文件记录流程代码解析
2020/07/16 Python
发现两个有趣的CSS3动画效果
2013/08/14 HTML / CSS
吃透移动端 Html5 响应式布局
2019/12/16 HTML / CSS
美国巧克力喷泉品牌:Sephra
2019/05/05 全球购物
汽车专业毕业生推荐信
2013/11/12 职场文书
创意广告词
2014/03/17 职场文书
《桂花雨》教学反思
2014/04/12 职场文书
党员自我评价2015
2015/03/03 职场文书
英语专业毕业论文答辩开场白
2015/05/27 职场文书
SQLServer 日期函数大全(小结)
2021/04/08 SQL Server