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 相关文章推荐
实用函数9
Nov 08 PHP
Php Ctemplate引擎开发相关内容
Mar 03 PHP
php批量上传的实现代码
Jun 09 PHP
利用PHP+JS实现搜索自动提示(实例)
Jun 09 PHP
php解析url的三个示例
Jan 20 PHP
php中执行系统命令的方法
Mar 21 PHP
php以fastCGI的方式运行时文件系统权限问题及解决方法
May 11 PHP
PHP中的traits简单使用实例
May 13 PHP
php实现的简单美国商品税计算函数
Jul 13 PHP
基于PHP实现假装商品限时抢购繁忙的效果
Oct 16 PHP
100多行PHP代码实现socks5代理服务器[2]
May 05 PHP
将PHP的session数据存储到数据库中的代码实例
Jun 24 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生成随机密码的几种方法
2011/01/17 PHP
微信 开发生成带参数的二维码的实例
2016/11/23 PHP
Ajax+Jpgraph实现的动态折线图功能示例
2019/02/11 PHP
js版本A*寻路算法
2006/12/22 Javascript
javascript preload&amp;lazy load
2010/05/13 Javascript
JS 自定义带默认值的函数
2011/07/21 Javascript
关于js new Date() 出现NaN 的分析
2012/10/23 Javascript
js中for in语句的用法讲解
2015/04/24 Javascript
JavaScript实现的经典文件树菜单效果
2015/09/08 Javascript
angular.js之路由的选择方法
2016/09/24 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
2016/11/17 Javascript
ReactJs快速入门教程(精华版)
2016/11/28 Javascript
jQuery实现页面顶部下拉广告
2016/12/30 Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
2017/01/01 Javascript
基于vue实现多引擎搜索及关键字提示
2017/03/16 Javascript
JS判断微信扫码的方法
2017/08/07 Javascript
js封装成插件_Canvas统计图插件编写实例
2017/09/12 Javascript
JS实现的ajax和同源策略(实例讲解)
2017/12/01 Javascript
vue + element-ui实现简洁的导入导出功能
2017/12/22 Javascript
Vue组件通信的四种方式汇总
2018/02/08 Javascript
原生JS实现的碰撞检测功能示例
2018/05/18 Javascript
angular4强制刷新视图的方法
2018/10/09 Javascript
Vue对象赋值视图不更新问题及解决方法
2019/06/03 Javascript
JS实现“全选”和&quot;全不选&quot;功能代码实例
2020/02/06 Javascript
原生javascript中this几种常见用法总结
2020/02/24 Javascript
python中关于日期时间处理的问答集锦
2013/03/08 Python
Python中用startswith()函数判断字符串开头的教程
2015/04/07 Python
Python实现控制台进度条功能
2016/01/04 Python
python调用函数、类和文件操作简单实例总结
2019/11/29 Python
详解Python yaml模块
2020/09/23 Python
Wilson体育用品官网:美国著名运动器材品牌
2019/05/12 全球购物
创先争优一句话承诺
2014/05/29 职场文书
超市促销活动总结
2014/07/01 职场文书
班主任师德师风自我剖析材料
2014/10/02 职场文书
聘任书的格式及模板
2019/10/28 职场文书
一文搞懂Python Sklearn库使用
2021/08/23 Python