一个基于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作的文本留言本的例子(五)
Oct 09 PHP
PHP的范围解析操作符(::)的含义分析说明
Jul 03 PHP
linux命令之调试工具strace的深入分析
Jun 03 PHP
php 获取SWF动画截图示例代码
Feb 10 PHP
叫你如何修改Nginx与PHP的文件上传大小限制
Sep 10 PHP
PHP GD库生成图像的几个函数总结
Nov 19 PHP
PHP中把对象转换为关联数组代码分享
Apr 09 PHP
PHP的Yii框架入门使用教程
Feb 15 PHP
php无法连接mysql数据库的正确解决方法
Jul 01 PHP
php中array_slice和array_splice函数解析
Oct 18 PHP
Zend Framework基于Command命令行建立ZF项目的方法
Feb 18 PHP
php创建图像具体步骤
Mar 13 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
phpMyadmin 用户权限中英对照
2010/04/02 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
2017/05/11 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
使用JavaScript switch case 另类写法
2010/03/14 Javascript
基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
2013/05/07 Javascript
原生Js实现元素渐隐/渐现(原理为修改元素的css透明度)
2013/06/24 Javascript
查找Oracle高消耗语句的方法
2014/03/22 Javascript
javascript实现日期按月份加减
2015/05/15 Javascript
JS简单实现tab切换效果的多窗口显示功能
2016/09/07 Javascript
微信小程序scroll-view实现横向滚动和上拉加载示例
2017/03/06 Javascript
3分钟快速搭建nodejs本地服务器方法运行测试html/js
2017/04/01 NodeJs
Vue2 配置 Axios api 接口调用文件的方法
2017/11/13 Javascript
VUE + UEditor 单图片跨域上传功能的实现方法
2018/02/08 Javascript
浅谈高大上的微信小程序中渲染html内容—技术分享
2018/10/25 Javascript
微信小程序使用scroll-view标签实现自动滑动到底部功能的实例代码
2018/11/09 Javascript
详解Vue中watch的详细用法
2018/11/28 Javascript
js实现多个倒计时并行 js拼团倒计时
2019/02/25 Javascript
JS实现分页导航效果
2020/02/19 Javascript
vue中的过滤器及其时间格式化问题
2020/04/09 Javascript
Python datetime时间格式化去掉前导0
2014/07/31 Python
Python可变参数函数用法实例
2015/07/07 Python
python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
2020/07/20 Python
用python标准库difflib比较两份文件的异同详解
2018/11/16 Python
Python图像处理之直线和曲线的拟合与绘制【curve_fit()应用】
2018/12/26 Python
python如何将两个txt文件内容合并
2019/10/18 Python
Otticanet英国:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/02/10 全球购物
澳大利亚鞋仓库:Shoe Warehouse
2019/07/25 全球购物
英国的一家创新礼品和小工具零售商:Menkind
2019/08/24 全球购物
美国家用和厨房电器销售网站:Appliances Connection
2020/01/24 全球购物
护理学毕业生自荐信
2013/10/02 职场文书
廉洁家庭事迹材料
2014/05/15 职场文书
自我查摆剖析材料
2014/10/11 职场文书
大学生自荐材料范文
2014/12/30 职场文书
2015小学五年级班主任工作总结
2015/05/21 职场文书
离婚财产分割协议书
2015/08/11 职场文书
vue-cropper组件实现图片切割上传
2021/05/27 Vue.js