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


Posted in PHP onApril 09, 2014

一、采集类源码

<?php
  /**
  *通用列表采集类
  *版本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);
         } 
}

二、使用例子

<?php
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 . "<hr/>";
//采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);
//就举这么多例子吧,是不是用来做采集很方便
PHP 相关文章推荐
php各种编码集详解和以及在什么情况下进行使用
Sep 11 PHP
Php中文件下载功能实现超详细流程分析
Jun 13 PHP
PHP5函数小全(分享)
Jun 06 PHP
php curl_init函数用法
Jan 31 PHP
CMS中PHP判断系统是否已经安装的方法示例
Jul 26 PHP
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
Jul 28 PHP
php实现搜索一维数组元素并删除二维数组对应元素的方法
Jul 06 PHP
微信开发之网页授权获取用户信息(二)
Jan 08 PHP
php简单压缩css样式示例
Sep 22 PHP
mac系统下安装多个php并自由切换的方法详解
Apr 21 PHP
Laravel网站打开速度优化的方法汇总
Jul 16 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
Feb 16 PHP
免费的ip数据库淘宝IP地址库简介和PHP调用实例
Apr 08 #PHP
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
Apr 08 #PHP
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
Apr 08 #PHP
关于PHP的curl开启问题探讨
Apr 08 #PHP
PHP中Session引起的脚本阻塞问题解决办法
Apr 08 #PHP
PHP中比较两个字符串找出第一个不同字符位置例子
Apr 08 #PHP
PHP用星号隐藏部份用户名、身份证、IP、手机号等实例
Apr 08 #PHP
You might like
最省空间的计数器
2006/10/09 PHP
php set_time_limit()函数的使用详解
2013/06/05 PHP
你不知道的文件上传漏洞php代码分析
2016/09/29 PHP
详解php语言最牛掰的Laravel框架
2017/11/20 PHP
详解如何实现Laravel的服务容器的方法示例
2019/04/15 PHP
thinkPHP5框架路由常用知识点汇总
2019/09/15 PHP
jQuery EasyUI 开源插件套装 完全替代ExtJS
2010/03/24 Javascript
javascript权威指南 学习笔记之javascript数据类型
2011/09/24 Javascript
文本框根据输入内容自适应高度的代码
2011/10/24 Javascript
JQuery防止退格键网页后退的实现代码
2012/03/23 Javascript
表单类各种类型(文本框)失去焦点效果jquery代码
2013/04/26 Javascript
js canvas实现擦除动画
2016/07/16 Javascript
axios基本入门用法教程
2017/03/25 Javascript
Vue瀑布流插件的使用示例
2018/09/19 Javascript
vue.js实现的幻灯片功能示例
2019/01/18 Javascript
vue 解决异步数据更新问题
2019/10/29 Javascript
在vue中使用防抖函数组件操作
2020/07/26 Javascript
一张图带我们入门Python基础教程
2017/02/05 Python
Python HTTP客户端自定义Cookie实现实例
2017/04/28 Python
Python基于回溯法子集树模板解决野人与传教士问题示例
2017/09/11 Python
Python设计模式之装饰模式实例详解
2019/01/21 Python
Python流程控制 if else实现解析
2019/09/02 Python
手把手教你pycharm专业版安装破解教程(linux版)
2019/09/26 Python
Python pandas RFM模型应用实例详解
2019/11/20 Python
python-web根据元素属性进行定位的方法
2019/12/13 Python
Python内建序列通用操作6种实现方法
2020/03/26 Python
基于pycharm实现批量修改变量名
2020/06/02 Python
浅析移动设备HTML5页面布局
2015/12/01 HTML / CSS
四下基层实施方案
2014/03/28 职场文书
捐资助学倡议书
2014/04/15 职场文书
装饰工程师岗位职责
2014/06/08 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话
2014/10/21 职场文书
教师个人成长总结
2015/02/11 职场文书
八月迷情观后感
2015/06/11 职场文书
2015年高三年级组工作总结
2015/07/21 职场文书
四年级作文之说明文作文
2019/10/14 职场文书