Heim >php教程 >php手册 >一个基于phpQuery的php通用采集类分享

一个基于phpQuery的php通用采集类分享

WBOY
WBOYOriginal
2016-06-13 09:39:27838Durchsuche

一、采集类源码

复制代码 代码如下:


  /**
  *通用列表采集类
  *版本V1.3
  *作者:JAE
  */
    require_once '../phpQuery/phpQuery/phpQuery.php';
    class QueryList{

        private $pageURL;
         private $regArr = array();
         public $jsonArr = array();
         private $regRange;
         private $html;
         /************************************************
         * 参数: 页面地址 选择器数组 块选择器
         * 【选择器数组】说明:格式array("名称"=>array("选择器","类型"),.......)
         * 【类型】说明:值 "text" ,"html" ,"属性"
         *【块选择器】:指 先按照规则 选出 几个大块 ,然后再分别再在块里面 进行相关的选择
         *************************************************/
         function QueryList($pageURL,$regArr=array(),$regRange='')
         {
             $this->pageURL = $pageURL;

             //为了能获取https://
               $ch = curl_init();
                curl_setopt($ch, CURLOPT_URL,$this->pageURL);
                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
                curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
                curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
                $this->html = curl_exec($ch);
               curl_close($ch);

             if(!empty($regArr))
             {

                  $this->regArr = $regArr;
                 $this->regRange = $regRange;
                 $this->getList();
             }

         }
         function setQuery($regArr,$regRange='')
         {
             $this->jsonArr=array();
             $this->regArr = $regArr;
             $this->regRange = $regRange;
             $this->getList();
         }
        private function getList()
         {

             $hobj = phpQuery::newDocumentHTML($this->html);
             if(!empty($this->regRange))
             {
             $robj = pq($hobj)->find($this->regRange);

              $i=0;
             foreach($robj as $item)
             {

                 while(list($key,$reg_value)=each($this->regArr))
                 {
                     $iobj = pq($item)->find($reg_value[0]);

                       switch($reg_value[1])
                       {
                           case 'text':
                                 $this->jsonArr[$i][$key] = trim(pq($iobj)->text());
                                 break;
                           case 'html':
                                 $this->jsonArr[$i][$key] = trim(pq($iobj)->html());
                                 break;
                           default:
                                $this->jsonArr[$i][$key] = pq($iobj)->attr($reg_value[1]);
                                break;

                        }
                 }
                 //重置数组指针
                 reset($this->regArr);
                 $i++;
              }
             }
             else
             {
            while(list($key,$reg_value)=each($this->regArr))
             {
                $lobj = pq($hobj)->find($reg_value[0]);

                  
                   $i=0;
                   foreach($lobj as $item)
                   {
                       switch($reg_value[1])
                       {
                           case 'text':
                                 $this->jsonArr[$i++][$key] = trim(pq($item)->text());
                                 break;
                           case 'html':
                                 $this->jsonArr[$i++][$key] = trim(pq($item)->html());
                                 break;
                           default:
                                $this->jsonArr[$i++][$key] = pq($item)->attr($reg_value[1]);
                                break;

                        }

                    
                   }

       
             }
           }
         } 
         function getJSON()
         {
             return json_encode($this->jsonArr);
         }

}

二、使用例子

复制代码 代码如下:


require 'Query/QueryList.class.php';


//采集OSC的代码分享列表,标题 链接 作者
$url = "http://www.oschina.net/code/list";
$reg = array("title"=>array(".code_title a:eq(0)","text"),"url"=>array(".code_title a:eq(0)","href"),"author"=>array("img","title"));
$rang = ".code_list li";
$hj = new QueryList($url,$reg,$rang);
$arr = $hj->jsonArr;
print_r($arr);
//如果还想采当前页面右边的 TOP40活跃贡献者 图像,得到JSON数据,可以这样写
$reg = array("portrait"=>array(".hot_top img","src"));
$hj->setQuery($reg);
$json = $hj->getJSON();
echo $json . "


";

//采OSC内容页内容
$url = "http://www.oschina.net/code/snippet_186288_23816";
$reg = array("title"=>array(".QTitle h1","text"),"con"=>array(".Content","html"));
$hj = new QueryList($url,$reg);
$arr = $hj->jsonArr;
print_r($arr);

//就举这么多例子吧,是不是用来做采集很方便

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:PHPCMS发布页面的栏目选择问题Nächster Artikel:CakePHP架构入门