一个基于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 相关文章推荐
使用网络地址转换实现多服务器负载均衡
Oct 09 PHP
php UTF8 文件的签名问题
Oct 30 PHP
浅析PHP微信支付通知的处理方式
May 25 PHP
完整删除ecshop中获取店铺信息的API
Dec 24 PHP
PHP设置进度条的方法
Jul 08 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
May 18 PHP
php mysql_list_dbs()函数用法示例
Mar 29 PHP
php修改数组键名的方法示例
Apr 15 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
Aug 07 PHP
PHP自动识别当前使用移动终端
May 21 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
Feb 15 PHP
PHP8.0新功能之Match表达式的使用
Jul 19 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
DC这些乐高系列动画电影你看过几部?
2020/04/09 欧美动漫
destoon切换城市后实现logo旁边显示地区名称的方法
2014/08/21 PHP
php设计模式之单例模式实例分析
2015/02/25 PHP
PHP 中使用explode()函数切割字符串为数组的示例
2017/05/06 PHP
yii2 url重写并隐藏index.php方法
2018/12/10 PHP
Jquery AutoComplete自动完成 的使用方法实例
2010/03/19 Javascript
javascript之querySelector和querySelectorAll使用介绍
2011/12/20 Javascript
jQuery实现简易的天天爱消除小游戏
2015/10/16 Javascript
AngularJS入门教程之AngularJS指令
2016/04/18 Javascript
AngularJS中run方法的巧妙运用
2017/01/04 Javascript
nodejs中sleep功能实现暂停几秒的方法
2017/07/12 NodeJs
AngularJS基于http请求实现下载php生成的excel文件功能示例
2018/01/23 Javascript
uniapp实现可滑动选项卡
2020/10/21 Javascript
python 判断一个进程是否存在
2009/04/09 Python
Python 字典与字符串的互转实例
2017/01/13 Python
python中列表和元组的区别
2017/12/18 Python
python实现截取屏幕保存文件,删除N天前截图的例子
2019/08/27 Python
Python中免验证跳转到内容页的实例代码
2020/10/23 Python
利用Python函数实现一个万历表完整示例
2021/01/23 Python
Python之Sklearn使用入门教程
2021/02/19 Python
世界上最大的网络主机公司:1&1
2016/10/12 全球购物
什么是Rollback Segment
2013/04/22 面试题
医学生个人求职信范文
2014/02/07 职场文书
会议主持词
2014/03/17 职场文书
青春寄语大全
2014/04/09 职场文书
励志演讲稿范文
2014/04/29 职场文书
工作鉴定评语
2014/05/04 职场文书
物业总经理助理岗位职责
2014/06/29 职场文书
机械制造专业大学生自我鉴定
2014/09/19 职场文书
六年级语文下册教学计划
2015/01/22 职场文书
工会积极分子个人总结
2015/03/03 职场文书
健康证明
2015/06/19 职场文书
2015暑期社会实践个人总结
2015/07/13 职场文书
nginx简单配置多个server的方法
2021/03/31 Servers
游戏《铁拳》动画化!2022年年内播出
2022/03/21 日漫
js 实现Material UI点击涟漪效果示例
2022/09/23 Javascript