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 相关文章推荐
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
Nov 18 PHP
php Mysql日期和时间函数集合
Nov 16 PHP
php 页面执行时间计算代码
Dec 04 PHP
windows环境下php配置memcache的具体操作步骤
Jun 09 PHP
PHP获取和操作配置文件php.ini的几个函数介绍
Jun 24 PHP
关于PHPDocument 代码注释规范的总结
Jun 25 PHP
PHP系统命令函数使用分析
Jul 05 PHP
phpmyadmin config.inc.php配置示例
Aug 27 PHP
php防止伪造的数据从URL提交方法
Jun 27 PHP
php正则匹配文章中的远程图片地址并下载图片至本地
Sep 29 PHP
Ajax+Jpgraph实现的动态折线图功能示例
Feb 11 PHP
PHP的new static和new self的区别与使用
Nov 27 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实现快速排序法函数代码
2012/08/27 PHP
php实现redis数据库指定库号迁移的方法
2015/01/14 PHP
PHP中imagick函数的中文解释
2015/01/21 PHP
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
2009/06/04 Javascript
jQuery开发者都需要知道的5个小技巧
2010/01/08 Javascript
理解Javascript_13_执行模型详解
2010/10/20 Javascript
js 实现css风格选择器(压缩后2KB)
2012/01/12 Javascript
.net,js捕捉文本框回车键事件的小例子(兼容多浏览器)
2013/03/11 Javascript
flash调用js中的方法,让js传递变量给flash的办法及思路
2013/08/07 Javascript
javascript按位非运算符的使用方法
2013/11/14 Javascript
javascript同步服务器时间和同步倒计时小技巧
2015/09/24 Javascript
在Ubuntu系统上安装Node.JS的教程
2015/10/15 Javascript
易操作的jQuery表单提示插件
2015/12/01 Javascript
深入理解jquery跨域请求方法
2016/05/18 Javascript
Js调用Java方法并互相传参的简单实例
2016/08/11 Javascript
Vue.js上下滚动加载组件的实例代码
2017/07/17 Javascript
理解 Node.js 事件驱动机制的原理
2017/08/16 Javascript
JS一次前端面试经历记录
2020/03/19 Javascript
[03:07]DOTA2英雄基础教程 冰霜诅咒极寒幽魂
2013/12/06 DOTA
Python功能键的读取方法
2015/05/28 Python
Python中 Lambda表达式全面解析
2016/11/28 Python
python爬虫_实现校园网自动重连脚本的教程
2018/04/22 Python
python3 面向对象__类的内置属性与方法的实例代码
2018/11/09 Python
django 使用全局搜索功能的实例详解
2019/07/18 Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
2019/08/21 Python
python list转置和前后反转的例子
2019/08/26 Python
python Plotly绘图工具的简单使用
2020/03/03 Python
python+gdal+遥感图像拼接(mosaic)的实例
2020/03/10 Python
pyCharm 实现关闭代码检查
2020/06/09 Python
Python基于yaml文件配置logging日志过程解析
2020/06/23 Python
Tomcat Mysql datasource数据源配置
2015/12/28 面试题
汽修专业学生自我鉴定
2013/11/16 职场文书
个人授权委托书范本
2014/04/03 职场文书
请假条应该怎么写?
2019/06/24 职场文书
100句拼搏进取的名言警句,值得一读!
2019/10/07 职场文书
CSS实现漂亮的时钟动画效果的实例代码
2021/03/30 HTML / CSS