一个基于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 的异常处理程序
Jun 22 PHP
PHP远程采集图片详细教程
Jul 01 PHP
改写ThinkPHP的U方法使其路由下分页正常
Jul 02 PHP
Laravel框架表单验证详解
Sep 04 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
Apr 17 PHP
一键生成各种尺寸Icon的php脚本(实例)
Feb 08 PHP
PHP中error_reporting函数用法详细介绍
Jun 11 PHP
PHP文件管理之实现网盘及压缩包的功能操作
Sep 20 PHP
PHP实现APP微信支付的实例讲解
Feb 10 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
Feb 20 PHP
浅谈laravel框架与thinkPHP框架的区别
Oct 23 PHP
详解thinkphp的Auth类认证
May 28 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
第九节 绑定 [9]
2006/10/09 PHP
编译问题
2006/10/09 PHP
PHP 学习路线与时间表
2010/02/21 PHP
php高级编程-函数-郑阿奇
2011/07/04 PHP
基于php-fpm的配置详解
2013/06/03 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
2018/12/07 PHP
jquery cookie插件代码类
2009/05/26 Javascript
再谈ie和firefox下的document.all属性
2009/10/21 Javascript
picChange 图片切换特效的函数代码
2010/05/06 Javascript
基于prototype扩展的JavaScript常用函数库
2010/11/30 Javascript
了解Javascript的模块化开发
2015/03/02 Javascript
js实现Select头像选择实时预览代码
2015/08/17 Javascript
ajax跨域调用webservice的实现代码
2016/05/09 Javascript
详解微信小程序——自定义圆形进度条
2016/12/29 Javascript
bootstrap侧边栏圆点导航
2017/01/11 Javascript
vue(2.x,3.0)配置跨域代理
2019/11/27 Javascript
python进阶教程之文本文件的读取和写入
2014/08/29 Python
Python中函数的参数定义和可变参数用法实例分析
2015/06/04 Python
django 常用orm操作详解
2017/09/13 Python
Python实现桶排序与快速排序算法结合应用示例
2017/11/22 Python
python xlsxwriter库生成图表的应用示例
2018/03/16 Python
Python实现调用另一个路径下py文件中的函数方法总结
2018/06/07 Python
CSS3伪类选择器:nth-child()
2009/04/02 HTML / CSS
一张图片能隐含千言万语之隐藏你的程序代码
2012/12/13 HTML / CSS
东南亚地区最大的购物网站Lazada新加坡站点:Lazada.sg
2016/07/17 全球购物
Java中会存在内存泄漏吗,请简单描述
2016/12/22 面试题
医学护理系毕业生求职信
2013/10/01 职场文书
三年级班级文化建设方案
2014/05/04 职场文书
2014年学校领导班子对照检查材料
2014/09/19 职场文书
不服从公司安排检讨书
2014/09/24 职场文书
打架检讨书范文
2015/01/27 职场文书
幼儿园教师节活动总结
2015/03/23 职场文书
2015年秋季小学开学标语
2015/07/16 职场文书
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
2021/03/31 jQuery
java代码实现空间切割
2022/01/18 Java/Android
深入浅出的讲解:信号调制到底是如何实现的
2022/02/18 无线电