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 相关文章推荐
MySql中正则表达式的使用方法描述
Jul 30 PHP
php判断变量类型常用方法
Apr 24 PHP
PHP 正则表达式常用函数
Aug 17 PHP
详解WordPress中分类函数wp_list_categories的使用
Jan 04 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
Feb 15 PHP
php 实现进制相互转换
Apr 07 PHP
PHP封装的多文件上传类实例与用法详解
Feb 07 PHP
php PDO判断连接是否可用的实现方法
Apr 03 PHP
Laravel多用户认证系统示例详解
Mar 13 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
Oct 15 PHP
laravel-admin 实现在指定的相册下添加照片
Oct 21 PHP
Laravel5.1 框架路由基础详解
Jan 04 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
PHP个人网站架设连环讲(三)
2006/10/09 PHP
获取php页面执行时间,数据库读写次数,函数调用次数等(THINKphp)
2013/06/03 PHP
ThinkPHP标签制作教程
2014/07/10 PHP
Laravel框架学习笔记(二)项目实战之模型(Models)
2014/10/15 PHP
PHP生成随机数的方法实例分析
2015/01/22 PHP
php查询mysql大量数据造成内存不足的解决方法
2015/03/04 PHP
使用JQuery和s3captche实现一个水果名字的验证
2009/08/14 Javascript
JS仿flash上传头像效果实现代码
2011/07/18 Javascript
fancybox modal的完美解决(右上的X)
2012/10/30 Javascript
非html5实现js版弹球游戏示例代码
2013/09/22 Javascript
js实现弹出窗口、页面变成灰色并不可操作的例子分享
2014/05/10 Javascript
js使用for循环及if语句判断多个一样的name
2014/09/09 Javascript
innerHTML中标签可以换行的方法汇总
2015/08/14 Javascript
基于js里调用函数时,函数名带括号和不带括号的区别
2016/07/28 Javascript
JSON 数据详解及实例代码分析
2017/01/20 Javascript
强大的JavaScript响应式图表Chartist.js的使用
2017/09/13 Javascript
浅析前端路由简介以及vue-router实现原理
2018/06/01 Javascript
js实现延迟加载的几种方法详解
2019/01/19 Javascript
全面了解JavaScript的作用域链
2019/04/03 Javascript
vue渲染方式render和template的区别
2020/06/05 Javascript
pytorch索引查找 index_select的例子
2019/08/18 Python
python实现树的深度优先遍历与广度优先遍历详解
2019/10/26 Python
详解pytorch中squeeze()和unsqueeze()函数介绍
2020/09/03 Python
Python timeit模块原理及使用方法
2020/10/10 Python
纯CSS3实现带动画效果导航菜单无需js
2013/09/27 HTML / CSS
css3遮罩层镂空效果的多种实现方法
2020/05/11 HTML / CSS
世界上最值得信赖的多日游在线市场:TourRadar
2018/07/20 全球购物
北美最大的手工艺品零售商之一:Michaels Stores
2019/02/27 全球购物
英国领先的电视购物零售商:Ideal World
2019/03/18 全球购物
俄罗斯马克西多姆家居用品网上商店:Максидом
2020/02/06 全球购物
生产部主管岗位职责
2014/01/06 职场文书
演讲稿开场白
2014/01/13 职场文书
环保宣传标语
2014/06/12 职场文书
2014年前台文员工作总结
2014/12/08 职场文书
小学数学教学随笔
2015/08/14 职场文书
导游词之唐山景点
2019/12/18 职场文书