最近采集写的一个超简单实用的HTML解析类

1. [文件] HtmlDom.php 
<?php
$oldSetting = libxml_use_internal_errors( true ); 
libxml_clear_errors();
/**
 * 
 * -+-----------------------------------
 * |PHP5 Framework - 2011
 * |Web Site: www.iblue.cc
 * |E-mail: [email protected]
 * |Date: 2012-10-12
 * -+-----------------------------------
 * 
 * @desc HTML解析器
 * @author jingke
 */
class XF_HtmlDom
{
    private $_xpath = null;
    private $_nodePath = ‘‘;
 
    public function __construct($xpath = null, $nodePath = ‘‘)
    {
        $this->_xpath = $xpath;
        $this->_nodePath = $nodePath;
    }
 
    public function loadHtml($url)
    {
        ini_set(‘user_agent‘, ‘Mozilla/5.0 (Linux; U; Android 2.1; en-us; Nexus One Build/ERD62) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17 –Nexus‘);
        $content = ‘‘;
        if(strpos(strtolower($url), ‘http‘)===false)
        {
            $content = file_get_contents($url);
        }
        else
        {
            $ch = curl_init(); 
            $user_agent = "Baiduspider+(+http://www.baidu.com/search/spider.htm)";
            $user_agent1=‘Mozilla/5.0 (Windows NT 5.1; rv:6.0) Gecko/20100101 Firefox/6.0‘;
            curl_setopt($ch, CURLOPT_URL, $url); 
            curl_setopt($ch, CURLOPT_HEADER, false); 
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
            curl_setopt($ch, CURLOPT_REFERER, $url);
            curl_setopt($ch, CURLOPT_USERAGENT, $user_agent1);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
            $content =curl_exec($ch); 
            curl_close($ch);
        }
 
        $html = new DOMDocument(); 
        $html->loadHtml($content); 
        $this->_xpath = new DOMXPath( $html ); 
        return $this;
         
    }
 
    public function find($query, $index = null)
    {http://www.enterdesk.com/special/shouhui?
        if($this->_nodePath == ‘‘)
            $this->_nodePath = ‘//‘;
        else手绘图片
            $this->_nodePath .= ‘/‘;
  
        $nodes = $this->_xpath->query($this->_nodePath.$query);
        if ($index == null && !is_numeric($index)) 
        { 
            $tmp = array();
            foreach ($nodes as $node) 
            {
                $tmp[] = new XF_HtmlDom($this->_xpath, $node->getNodePath());
            }
            return $tmp;
        }
        return new XF_HtmlDom($this->_xpath,$this->_xpath->query($this->_nodePath.$query)->item($index)->getNodePath());
    }
 
    /**
     * 获取内容
     */
    public function text()
    {
        if ($this->_nodePath != ‘‘ && $this->_xpath != null ) 
            return $this->_xpath->query($this->_nodePath)->item(0)->textContent;
        else
            return false;
    }
 
    /**
     * 获取属性值
     */
    public function getAttribute($name)
    {
        if ($this->_nodePath != ‘‘ && $this->_xpath != null ) 
            return $this->_xpath->query($this->_nodePath)->item(0)->getAttribute($name);
        else
            return false;
    }
     
    public function __get($name)
    {
        if($name == ‘innertext‘)
            return $this->text();
        else
            return $this->getAttribute($name);
    }
 
}

时间: 2024-08-07 02:03:33

最近采集写的一个超简单实用的HTML解析类的相关文章

超简单的php上传类代码

这个是我昨晚写的一个超简单的上传类,只要 $up->upload($_FILES['imgfile']); 即可. 一条语句搞定上传 石家庄工商代办送给所有草根的个人站长 上传文件: up.php <?php //验证 if(empty($_COOKIE['login'])) { die('index'); } //加载类 include_once("_inc/class_uppic.php"); //上传 if(!empty($_GET['action']) &&

微信公众平台之超简单实用的天气预报后台实现

微信公众平台之超简单实用的天气预报后台实现 概述,前段时间我在开发一个自己的微信公众平台,需要实现天气预报功能,在网上度娘了下,实现天气预报的接口API还蛮多的,有:中国气象局.雅虎和新浪等,中国天气预报接口需要全国的编码,雅虎的有时候访问不了,研究了下还是新浪提供的接口比较简单实用.新浪天气预报API的URL是http://php.weather.sina.com.cn/xml.php?city=%B1%B1%BE%A9&password=DJOYnieT8234jlsK&day=0.其

打造支持apk下载和html5缓存的 IIS(配合一个超简单的android APP使用)具体解释

为什么要做这个看起来不靠谱的东西呢? 由于刚学android开发,还不能非常好的熟练控制android界面的编辑和操作,所以我的一个急着要的运用就改为html5版本号了,反正这个运用也是须要从server获取大量数据来展示在手机上面的,也就是说:必须联网,才干正常工作,于是想了一下,反正都要联网获取数据,为什么不直接用我相对熟悉一点的 html来做这个运用呢?省的花费不够用的时间去学习android界面的控制,于是就简单了:用蹩脚的手段做了一个android程序的启动欢迎界面,内页就是一个全屏的

一个超简单的vue商品计算总金额

哈哈哈,花了十几分钟写的一个vue商品总价计算,虽然很简单的.没有写样式. 现在写博客也是为了让自己方便查阅东西.废话不多少 直接上图 这里用到了vue的计算属性-computed 那这里就顺便说下computed这个东西吧. 在计算属性中科院完成各种复杂的的逻辑,包括运算,函数调用,只需要最终返回一个最终的结果.计算属性依赖多个vue实例的数据,只要其中一项数据发生变化,计算属性就会重新的执行,视图也会更新. 下面直接上代码: <!DOCTYPE html><html> <

一个超简单的马里奥游戏

理论是需要通过实践来检验的,学了这么多,于是我就试了试采用面向对象的编程思想实现了一个超级简单的马里奥游戏,游戏感觉特傻! 准备素材(图片mario.jpg): 分析: 如何通过按钮控制图片的位置 设计相关的对象 要求:Mario碰到边界给一个提示.(其实还有一个要求就是Mario可以去找另一个物体,没有实现.) 以下为源码: 超级马里奥游戏.html: <!DOCTYPE html> <html> <head> <meta charset="UTF-8

超简单实用的前端分页---jquery插件

首先,谈谈分页,目前我所了解的分页有两种,前端分页跟后台分页. 简单说说前端分页.是通过前端技术拿到所有的数据,在前端分页处理; 而后台分页是通过前端操作,给后台返回不同的值,再由后台返回所对应的数据. 最近,下载了很多前端分页插件.感觉性价比不是模糊不清,就是显示不是自己想要的,所以想自己动手写一个属于自己的插件 这是一个面向对象思想的插件.第一次用面向对象的思想,肯定有很多不足的地方.希望能互相讨论,一起上进. 这是效果图.看起来一般,但是他的css可重塑性高 接下来将附上自己的代码. cs

温故而知新---浅析三层架构(一个超简单的系统登录三层架构实例)

刚开始接触三层架构是在快两个月前,那时候找了好多例子感觉也都看不怎么懂,今天闲着没事,就把以前学的东西翻出来,算是温习温习.由于本人也接触时间不长,所以以下言论有不正确之处,多多海涵. 首先我们先要知道什么是三层架构,个人理解的三层架构就是将业务分为界面层(UI层),业务逻辑层(BLL层)和数据访问层(DAL层),各层之间各司其职,层层传递信息. 优点是可以达到高内聚,低耦合,修改起来比较容易:缺点是会降低系统性能. UI层:就是面向用户的一层,直接与用户交互. BLL层:用于实现业务逻辑,在U

一个超简单超简单的表白程序

刷微博的时候看到一个特别有意思的程序,而且特别简单,适合用来表白和套路朋友,真的超级简单. 先看演示 原理我也不太懂,毕竟不是专业对口,直接上操作过程 1.随便新建一个文本文件 2. 打开输入代码 3. 保存.修改文件后缀为vbs 4. 双击打开就可以运行了,但双击打开会有一个exe文件执行的窗口,所以可以发给朋友,在聊天窗口打开就不会有exe文件执行的窗口了 纯属觉得好玩...... 原文地址:https://www.cnblogs.com/huasonglin/p/9215865.html

一个超简单的语音识别编程,听写程序

CSpeechRecognition类封装了语音识别操作所需调用的几个接口,使用它进行语音识别编程很方便,也很简洁. CSpeechRecognition类的定义如下: /////////////////////////////////////////////////////////////// // active speech engine #include <atlbase.h> extern CComModule _Module; #include <atlcom.h> #i