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之数据库操作详解及乱码解决!
Jan 02 PHP
PHP array 的加法操作代码
Jul 24 PHP
php与mysql建立连接并执行SQL语句的代码
Jul 04 PHP
php和javascript之间变量的传递实现代码
Dec 19 PHP
PHP整合PayPal支付
Jun 11 PHP
php实现微信公众号主动推送消息
Dec 31 PHP
Yii2实现增删改查后留在当前页的方法详解
Jan 13 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
Aug 30 PHP
PHP递归实现快速排序的方法示例
Dec 18 PHP
PHP实现基于3DES算法加密解密字符串示例
Aug 24 PHP
PHP删除数组中特定元素的两种方法
Feb 28 PHP
php经典趣味算法实例代码
Jan 21 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访问查询mysql数据的三种方法
2006/10/09 PHP
PHP面向对象概念
2011/11/06 PHP
页面乱码问题的根源及其分析
2013/08/09 PHP
PHP json_encode() 函数详解及中文乱码问题
2015/11/05 PHP
PHP两种实现无级递归分类的方法
2017/03/02 PHP
Laravel 连接(Join)示例
2019/10/16 PHP
JavaScript中null与undefined分析
2009/07/25 Javascript
jquery下将选择的checkbox的id组成字符串的方法
2010/11/28 Javascript
在JavaScript中处理字符串之link()方法的使用
2015/06/08 Javascript
JavaScript取得WEB安全颜色列表的方法
2015/07/14 Javascript
jQuery实现的自适应焦点图效果完整实例
2016/08/24 Javascript
前端程序员必须知道的高性能Javascript知识
2016/08/24 Javascript
Ionic3实现图片瀑布流布局
2017/08/09 Javascript
vue仿element实现分页器效果
2018/09/13 Javascript
javascript中的相等操作符(==与===区别)
2019/12/21 Javascript
swiper实现导航滚动效果
2020/12/13 Javascript
[01:09:23]KG vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python中的os.path路径模块中的操作方法总结
2016/07/07 Python
Python抓取手机号归属地信息示例代码
2016/11/28 Python
python训练数据时打乱训练数据与标签的两种方法小结
2018/11/08 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
2019/09/26 Python
tensorflow-gpu安装的常见问题及解决方案
2020/01/20 Python
python操作链表的示例代码
2020/09/27 Python
详解Html5中video标签那些属性和方法
2019/07/01 HTML / CSS
使用HTML5的Canvas绘制曲线的简单方法
2015/09/08 HTML / CSS
美国保健品专家:Life Extension
2018/05/04 全球购物
工程造价专业大学生自荐信
2013/10/01 职场文书
学生爱国演讲稿
2014/01/14 职场文书
个人实习生的自我评价
2014/02/16 职场文书
文明演讲稿范文
2014/05/12 职场文书
销售人员求职信
2014/07/22 职场文书
农业局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
详解如何修改nginx的默认端口
2021/03/31 Servers
解决Go gorm踩过的坑
2021/04/30 Golang
SQL实现LeetCode(196.删除重复邮箱)
2021/08/07 MySQL
CDPR谈《巫师》新作用虚幻5原因 称不会为Epic独占
2022/04/06 其他游戏