一个基于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 向访客和爬虫显示不同的内容
Nov 09 PHP
PHP常用开发函数解析之数组篇[未完结]
Jul 30 PHP
PHP Directory 函数的详解
Mar 07 PHP
php获取汉字首字母的函数
Nov 07 PHP
php中eval函数的危害与正确禁用方法
Jun 30 PHP
PHP使用array_fill定义多维数组的方法
Mar 18 PHP
Ubuntu12下编译安装PHP5.3开发环境
Mar 27 PHP
php将12小时制转换成24小时制的方法
Mar 31 PHP
编写PHP脚本过滤用户上传的图片
Jul 03 PHP
PHP的APC模块实现上传进度条
Oct 27 PHP
PHP封装的字符串加密解密函数
Dec 18 PHP
PHP基于Redis消息队列实现发布微博的方法
May 03 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下获取客户端ip地址的函数
2010/03/15 PHP
一个简单的php加密解密函数(动态加密)
2013/06/19 PHP
让ThinkPHP支持大小写url地址访问的方法
2014/10/31 PHP
php中return的用法实例分析
2015/02/28 PHP
JavaScript 变量命名规则
2009/09/23 Javascript
jquery png 透明解决方案(推荐)
2010/08/21 Javascript
seajs中模块的解析规则详解和模块使用总结
2014/03/12 Javascript
$.each遍历对象、数组的属性值并进行处理
2014/07/18 Javascript
Vue.js学习笔记之 helloworld
2016/08/14 Javascript
Web安全测试之XSS实例讲解
2016/08/15 Javascript
微信小程序 教程之WXSS
2016/10/18 Javascript
原生JS实现九宫格抽奖效果
2017/04/01 Javascript
在Vue项目中引入腾讯验证码服务的教程
2018/04/03 Javascript
JavaScript中call和apply方法的区别实例分析
2018/08/03 Javascript
vue中过滤器filter的讲解
2019/01/21 Javascript
深入理解vue-class-component源码阅读
2019/02/18 Javascript
基于JavaScript获取url参数2种方法
2020/04/17 Javascript
微信小程序canvas实现签名功能
2021/01/19 Javascript
Python生成随机数的方法
2014/01/14 Python
python使用urllib2实现发送带cookie的请求
2015/04/28 Python
Python实现模拟时钟代码推荐
2015/11/08 Python
python定时关机小脚本
2018/06/20 Python
pandas 条件搜索返回列表的方法
2018/10/30 Python
Django通过dwebsocket实现websocket的例子
2019/11/15 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
2020/04/08 Python
Django与AJAX实现网页动态数据显示的示例代码
2021/02/24 Python
HTML5各种头部meta标签的功能(推荐)
2017/03/13 HTML / CSS
海淘母婴商城:国际妈咪
2016/07/23 全球购物
东方红海科技面试题软件测试方面
2012/02/08 面试题
商场端午节活动方案
2014/01/29 职场文书
家长评语和期望
2014/02/10 职场文书
班主任新年寄语
2014/04/04 职场文书
化工工艺设计求职信
2014/06/25 职场文书
个人剖析材料范文
2014/09/30 职场文书
css常用字体属性与背景属性介绍
2022/02/28 HTML / CSS
带你了解Java中的ForkJoin
2022/04/28 Java/Android