首页 > 建站教程 > PHP教程 >  phpquery强大的php采集类介绍和使用正文

phpquery强大的php采集类介绍和使用

phpQuery通用列表采集类,是一个简单、 灵活、强大的采集工具,采集任何复杂的页面的内容。下面让合肥网页设计培训老师给大家介绍下这个类的使用方法:

1.为什么要介绍phpquery,因为他强大:
      Query的选择器之强大是有目共睹的,phpQuery 让php也拥有了jquery选择器这样的能力,它就相当于服务端的jQuery(这里主要指的选择器)。

2.它的存在意义:
     我们有时需要抓取一个网站的页面内容,但只需要特定部分的信息,通常会用正则来解决,这当然没有问题。正则是一个通用解决方案,但对于一般的普通人来说正则肯定不会或者不熟练,这种情况下,怎么用更简单快捷的方法来抓取页面内容。比如你想有很多人想抓取淘宝商品的内容,也就是采集淘宝商品的属性;

3.浅谈phpquery:
      phpQuery是基于php5新添加的DOMDocument。而DOMDocument则是专门用来处理html/xml。它提供了强大xpath选 择器及其他很多html/xml操作函数,使得处理html/xml起来非常方便。那为什么不直接使用呢?这个,去看一下官网的函数列表 就知道了,如果对自己的记忆力很有信心, 不妨一试。

4.下面教大家采集大家最喜欢的淘宝商品数据!

     第一步:当然是下载phpquery啦,这里我们给大家整理出最新的phpquery供大家下载
                    <---点我下载--->
     第二步:当然是引用了啊
require 'QueryList.class.php'; 
require 'http.class.php'; 
     第三步:找一个淘宝商品地址,采集出数据:
        /** 
         * 合肥多元速---最专业的网页设计培训基地  欢迎大家加入 
         * http://www.doysu.com 
         * 培训咨询电话:0551-65118915 唐老师 
         * 多元速学员QQ交流群:316273374
         */ 
         
        require 'QueryList.class.php'; 
        require 'http.class.php'; 
         
        //淘宝商品地址 
        $url = 'https://detail.tmall.com/item.htm?spm=a230r.1.14.9.E4XguT&id=17985838738&cm_id=140105335569ed55e27b&abbucket=19&sku_properties=5919063:6536025'; 
        //实例化 
        $http = new Http(); 
        //获取网页内容 
        $html = $http->get($url); 
        //内容转码 
        $html = iconv('GBK','UTF-8',$html); 
        //需要获取的参数 
        $reg = array( 
            'shuxing' => array('.attributes ul li','text') 
        ); 
        $rang = ''; 
        $data = QueryList::Query($html,$reg,$rang,'','UTF-8')->jsonArr; 
        echo "

        "; 

        print_r($data);
我们来看看我们要获取什么?


下面是详细介绍phpquery详细用法:
        //获取CSDN移动开发栏目下的文章列表标题 
        $hj = QueryList::Query('http://mobile.csdn.net/',array("title"=>array('.unit h1','text'))); 
        print_r($hj->jsonArr); 
         
        //回调函数1 
        function callfun1($content,$key) 
        { 
            return '回调函数1:'.$key.'-'.$content; 
        } 
        class HJ{ 
            //回调函数2 
            static public function callfun2($content,$key) 
            { 
                return '回调函数2:'.$key.'-'.$content; 
            } 
        } 
        //获取CSDN文章页下面的文章标题和内容 
        $url = 'http://www.csdn.net/article/2014-06-05/2820091-build-or-buy-a-mobile-game-backend'; 
        $reg = array( 
            'title'=>array('h1','text','','callfun1'),    //获取纯文本格式的标题,并调用回调函数1                    
            'summary'=>array('.summary','text','-input strong'), //获取纯文本的文章摘要,但保strong标签并去除input标签 
            'content'=>array('.news_content','html','div a -.copyright'),    //获取html格式的文章内容,但过滤掉div和a标签,去除类名为copyright的元素 
            'callback'=>array('HJ','callfun2')      //调用回调函数2作为全局回调函数 
            ); 
        $rang = '.left'; 
        $hj = QueryList::Query($url,$reg,$rang,'curl'); 
        print_r($hj->jsonArr); 
         
        //继续获取右边相关热门文章列表的标题以及链接地址 
        $hj->setQuery(array('title'=>array('','text'),'url'=>array('a','href')),'#con_two_2 li'); 
        //输出json数据 
        echo $hj->getJson(); 
下面介绍下query方法(只需要调用就行了,在QueryList.class.php文件里面):
        /** 
             * 静态方法,访问入口 
             * @param string $page            要抓取的网页URL地址(支持https);或者是html源代码 
             * @param array  $regArr         【选择器数组】说明:格式array("名称"=>array("选择器","类型"[,"标签过滤列表"][,"回调函数"]),.......[,"callback"=>"全局回调函数"]); 
             *                               【选择器】说明:可以为任意的jQuery选择器语法 
             *                               【类型】说明:值 "text" ,"html" ,"HTML标签属性" , 
             *                               【标签过滤列表】:可选,当标签名前面添加减号(-)时(此时标签可以为任意的元素选择器),表示移除该标签以及标签内容,否则当【类型】值为text时表示需要保留的HTML标签,为html时表示要过滤掉的HTML标签 
             *                               【回调函数】/【全局回调函数】:可选,字符串(函数名) 或 数组(array("类名","类的静态方法")),回调函数应有俩个参数,第一个参数是选择到的内容,第二个参数是选择器数组下标,回调函数会覆盖全局回调函数 
             * 
             * @param string $regRange       【块选择器】:指 先按照规则 选出 几个大块 ,然后再分别再在块里面 进行相关的选择 
             * @param string $getHtmlWay     【源码获取方式】指是通过curl抓取源码,还是通过file_get_contents抓取源码 
             * @param string $outputEncoding【输出编码格式】指要以什么编码输出(UTF-8,GB2312,.....),防止出现乱码,如果设置为 假值 则不改变原字符串编码 
             */ 
            public static function Query($page, $regArr, $regRange = '', $getHtmlWay = 'curl', $outputEncoding = false) 
            { 
                if(!(self::$ql instanceof self)) 
                { 
                    self::$ql = new self(); 
                } 
                self::$ql->_query($page, $regArr, $regRange, $getHtmlWay, $outputEncoding); 
                return self::$ql; 
            } 
使用:$data = QueryList::Query($url,$reg,$rang,'curl','UTF-8');
那么怎么把数据转换为数组呢?
        //转换为数组 
        $res = $data->jsonArr;