一个基于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 和 HTML
Oct 09 PHP
修改了一个很不错的php验证码(支持中文)
Feb 14 PHP
PHP insert语法详解
Jun 07 PHP
php 进度条实现代码
Mar 10 PHP
php学习之数据类型之间的转换代码
May 29 PHP
php提示无法加载或mcrypt没有找到 PHP 扩展 mbstring解决办法
Mar 27 PHP
php实现用于计算执行时间的类实例
Apr 18 PHP
PHP验证终端类型是否为手机的简单实例
Feb 07 PHP
thinkPHP5.0框架命名空间详解
Mar 18 PHP
自制PHP框架之设计模式
May 07 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
Sep 21 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
Apr 04 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
浅析PHP绘图技术
2013/07/03 PHP
php实例分享之mysql数据备份
2014/05/19 PHP
一张表搞清楚php is_null、empty、isset的区别
2015/07/07 PHP
PHP中使用GD库绘制折线图 折线统计图的绘制方法
2015/11/09 PHP
PHP数学运算与数据处理实例分析
2016/04/01 PHP
php实现URL加密解密的方法
2016/11/17 PHP
PHP abstract 抽象类定义与用法示例
2018/05/29 PHP
解决php extension 加载顺序问题
2019/08/16 PHP
Javascript 构造函数,公有,私有特权和静态成员定义方法
2009/11/30 Javascript
js 金额格式化来回转换示例
2014/02/23 Javascript
JavaScript操作DOM元素的childNodes和children区别
2015/04/01 Javascript
js仿腾讯QQ的web登陆界面
2016/08/19 Javascript
javascript  数组排序与对象排序的实例
2017/07/17 Javascript
Easy UI动态树点击文字实现展开关闭功能
2017/09/30 Javascript
解决iView中时间控件选择的时间总是少一天的问题
2018/03/15 Javascript
Angularjs实现控制器之间通信方式实例总结
2018/03/27 Javascript
js 图片转base64的方式(两种)
2018/04/24 Javascript
从零开始封装自己的自定义Vue组件
2018/10/09 Javascript
ES6的Fetch异步请求的实现方法
2018/12/07 Javascript
原生JS实现的自动轮播图功能详解
2018/12/28 Javascript
js实现多个倒计时并行 js拼团倒计时
2019/02/25 Javascript
vue使用混入定义全局变量、函数、筛选器的实例代码
2019/07/29 Javascript
小程序按钮避免多次调用接口和点击方案实现(不用showLoading)
2020/04/15 Javascript
vue 点击其他区域关闭自定义div操作
2020/07/17 Javascript
python之生产者消费者模型实现详解
2019/07/27 Python
Python在Matplotlib图中显示中文字体的操作方法
2019/07/29 Python
淘宝秒杀python脚本 扫码登录版
2019/09/19 Python
python 爬虫百度地图的信息界面的实现方法
2019/10/27 Python
国际领先的在线时尚服装和配饰店:DressLily
2019/03/03 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
2014/07/27 面试题
餐厅采购员岗位职责
2014/03/06 职场文书
大学生安全责任书
2014/07/25 职场文书
2014年秘书工作总结
2014/11/25 职场文书
大学生读书笔记范文
2015/07/01 职场文书
Html5通过数据流方式播放视频的实现
2021/04/27 HTML / CSS
使用CSS3实现按钮悬停闪烁动态特效代码
2021/08/30 HTML / CSS