php实现的一个很好用HTML解析器类可用于采集数据


Posted in PHP onSeptember 23, 2013
<?php   
 $oldSetting = libxml_use_internal_errors( true );    
libxml_clear_errors();   
/** 
 *  
 * -+----------------------------------- 
 * |PHP5 Framework - 2011 
 * |Web Site: www.iblue.cc 
 * |E-mail: mejinke@gmail.com 
 * |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)   
    {   
        if($this->_nodePath == '')   
            $this->_nodePath = '//';  
        else  
            $this->_nodePath .= '/';   
        $nodes = $this->_xpath->query($this->_nodePath.$query);   
        //echo $nodes->item(0)->getNodePath();exit;  
           
        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);   
    }     
}     
$xp = new xf_HtmlDom();   
$xp->loadHtml('http://www.aizhan.com/siteall/www.opendir.cn/');  
$rows = $xp->find("td[@id='baidu']/a", 0)->innertext;   
print_r($rows); 
PHP 相关文章推荐
用PHP产生动态的影像图
Oct 09 PHP
安装APACHE
Jan 15 PHP
PHP 面向对象 final类与final方法
May 05 PHP
php利用新浪接口查询ip获取地理位置示例
Jan 20 PHP
PHP+Memcache实现wordpress访问总数统计(非插件)
Jul 04 PHP
实例介绍PHP的Reflection反射机制
Aug 05 PHP
php采用curl实现伪造IP来源的方法
Nov 21 PHP
php模拟登陆的实现方法分析
Jan 09 PHP
php基于socket实现SMTP发送邮件的方法
Mar 05 PHP
PHP设计模式之简单投诉页面实例
Feb 24 PHP
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
May 09 PHP
PHP实现数组转JSon和JSon转数组的方法示例
Jun 14 PHP
PHP加密函数 Javascript/Js 解密函数
Sep 23 #PHP
配置php网页显示各种语法错误
Sep 23 #PHP
php函数间的参数传递(值传递/引用传递)
Sep 23 #PHP
php数据类型判断函数有哪些
Sep 23 #PHP
PHP保留两位小数并且四舍五入及不四舍五入的方法
Sep 22 #PHP
php一次性删除前台checkbox多选内容的方法
Sep 22 #PHP
PHP导航下拉菜单的实现如此简单
Sep 22 #PHP
You might like
Protoss兵种介绍
2020/03/14 星际争霸
php class中public,private,protected的区别以及实例分析
2013/06/18 PHP
PHP简单实现“相关文章推荐”功能的方法
2014/07/19 PHP
PHP strtotime函数用法、实现原理和源码分析
2015/02/04 PHP
php通过正则表达式记取数据来读取xml的方法
2015/03/09 PHP
PHP实现的数独求解问题示例
2017/04/18 PHP
从URL中提取参数与将对象转换为URL查询参数的实现代码
2012/01/12 Javascript
Javascript new Date().valueOf()的作用与时间戳由来详解
2013/04/24 Javascript
js 获取页面高度和宽度兼容 ie firefox chrome等
2014/05/14 Javascript
无刷新上传文件并返回自定义值
2015/06/11 Javascript
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
基于JS实现EOS隐藏错误提示层代码
2016/04/25 Javascript
jQuery插件实现图片轮播特效
2016/06/16 Javascript
JS封装通过className获取元素的函数示例
2016/12/20 Javascript
JavaScript中的 attribute 和 jQuery中的 attr 方法浅析
2017/01/04 Javascript
Javascript实现登录记住用户名和密码功能
2017/03/22 Javascript
javascript闭包的使用之按钮切换功能
2018/08/30 Javascript
jQuery实现简单的Ajax调用功能示例
2019/02/15 jQuery
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
vue下拉刷新组件的开发及slot的使用详解
2020/12/23 Vue.js
Django配置celery(非djcelery)执行异步任务和定时任务
2018/07/16 Python
浅谈Pycharm调用同级目录下的py脚本bug
2018/12/03 Python
Python中zip()函数的简单用法举例
2019/09/02 Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
2019/11/08 Python
python实现高斯(Gauss)迭代法的例子
2019/11/20 Python
HTML5 Blob 实现文件下载功能的示例代码
2019/11/29 HTML / CSS
网站性能延迟加载图像的五种技巧(小结)
2020/08/13 HTML / CSS
什么是表空间(tablespace)和系统表空间(System tablespace)
2013/02/25 面试题
文化宣传方案
2014/03/13 职场文书
软件项目开发计划书
2014/05/01 职场文书
2014红色之旅心得体会
2014/10/07 职场文书
党员对十八届四中全会的期盼思想汇报范文
2014/10/17 职场文书
中学生旷课检讨书500字
2014/10/29 职场文书
公司员工宿舍管理制度
2015/08/03 职场文书
创业计划书之韩国烧烤店
2019/09/19 职场文书
Python实现文本文件拆分写入到多个文本文件的方法
2021/04/18 Python