一个基于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 相关文章推荐
隐藏X-Space个人空间下方版权方法隐藏X-Space个人空间标题隐藏X-Space个人空间管理版权方法
Feb 22 PHP
php目录操作实例代码
Feb 21 PHP
PHP获取数组中重复最多的元素的实现方法
Nov 11 PHP
php通过淘宝API查询IP地址归属等信息
Dec 25 PHP
thinkphp3.2点击刷新生成验证码
Feb 16 PHP
PHP实现可自定义样式的分页类
Mar 29 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
Feb 28 PHP
Laravel学习教程之request validation的编写
Oct 25 PHP
PHP如何搭建百度Ueditor富文本编辑器
Sep 21 PHP
Yii2.0 RESTful API 基础配置教程详解
Dec 26 PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
Jun 03 PHP
Laravel框架下载,安装及路由操作图文详解
Dec 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实现excel中rank函数功能的方法
2015/01/20 PHP
PHP判断当前使用的是什么浏览器(推荐)
2019/10/27 PHP
ASP.NET jQuery 实例14 在ASP.NET form中校验时间范围
2012/02/03 Javascript
jquery 清空file域示例(兼容个浏览器)
2013/10/11 Javascript
js转义字符介绍
2013/11/05 Javascript
javascript 实现 原路返回
2015/01/21 Javascript
js+html5获取用户地理位置信息并在Google地图上显示的方法
2015/06/05 Javascript
小巧强大的jquery layer弹窗弹层插件
2015/12/06 Javascript
实例剖析AngularJS框架中数据的双向绑定运用
2016/03/04 Javascript
JS判断字符串字节数并截取长度的方法
2016/03/05 Javascript
JS实现点击登录弹出窗口同时背景色渐变动画效果
2016/03/25 Javascript
js简单判断flash是否加载完成的方法
2016/06/21 Javascript
Bootstrap Modal遮罩弹出层代码分享
2016/11/21 Javascript
详解webpack require.ensure与require AMD的区别
2017/12/13 Javascript
详解ES6 CLASS在微信小程序中的应用实例
2020/04/24 Javascript
详解 javascript对象创建模式
2020/10/30 Javascript
vue 使用class创建和清除水印的示例代码
2020/12/25 Vue.js
nestjs返回给前端数据格式的封装实现
2021/02/22 Javascript
Python牛刀小试密码爆破
2011/02/03 Python
在Python中处理日期和时间的基本知识点整理汇总
2015/05/22 Python
Python编程中的文件操作攻略
2015/10/16 Python
Python时间序列处理之ARIMA模型的使用讲解
2019/04/02 Python
Python搭建Spark分布式集群环境
2019/07/05 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
2019/08/06 Python
在PyTorch中Tensor的查找和筛选例子
2019/08/18 Python
Jupyter Notebook 安装配置与使用详解
2021/01/06 Python
西班牙拥有最佳品牌的动物商店:Animalear.com
2018/01/05 全球购物
包装类的功能、种类、常用方法
2012/01/27 面试题
成都思必达公司C#程序员招聘面试题
2013/06/26 面试题
2014年清明节网上祭英烈寄语
2014/04/09 职场文书
无犯罪记录证明范本
2014/09/15 职场文书
2014年小学班主任工作总结
2014/11/08 职场文书
关于学习的决心书
2015/02/05 职场文书
逃课检讨书范文
2015/05/06 职场文书
导游词之鲁迅祖居
2019/10/17 职场文书
《废话连篇——致新手》——chinapizza
2022/04/05 无线电