一个基于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的开发框架的现状和展望
Mar 16 PHP
php下连接ftp实现文件的上传、下载、删除文件实例代码
Jun 03 PHP
介绍一些PHP判断变量的函数
Apr 24 PHP
php中return的用法实例分析
Feb 28 PHP
PHP生成静态HTML页面最简单方法示例
Apr 09 PHP
PHP 设计模式系列之 specification规格模式
Jan 10 PHP
PHP 二维数组和三维数组的过滤
Mar 16 PHP
PHP实现补齐关闭的HTML标签
Mar 22 PHP
php中this关键字用法分析
Dec 07 PHP
Yii2配置Nginx伪静态的方法
May 05 PHP
php 二维数组快速排序算法的实现代码
Oct 17 PHP
Discuz不使用插件实现简单的打赏功能
Mar 21 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
全国FM电台频率大全 - 9 上海市
2020/03/11 无线电
使用PHP获取当前url路径的函数以及服务器变量
2013/06/29 PHP
ThinkPHP的L方法使用简介
2014/06/18 PHP
ThinkPHP3.1新特性之字段合法性检测详解
2014/06/19 PHP
php微信开发接入
2016/08/27 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
2017/06/08 PHP
thinkphp5.1 框架钩子和行为用法实例分析
2020/05/25 PHP
javascript数组的扩展实现代码集合
2008/06/01 Javascript
Jquery 基础学习笔记
2009/05/29 Javascript
计算新浪Weibo消息长度(还可以输入119字)
2013/07/02 Javascript
异步动态加载JS并运行(示例代码)
2013/12/13 Javascript
js的正则test,match,exec详细解析
2014/01/29 Javascript
Javascript写入txt和读取txt文件示例
2014/02/12 Javascript
JQuery设置获取下拉菜单某个选项的值(比较全)
2014/08/05 Javascript
js实现用户注册协议倒计时的方法
2015/01/21 Javascript
基于JavaScript将表单序列化类型的数据转化成对象的处理(允许对象中包含对象)
2015/12/28 Javascript
jQuery中选择器的基础使用教程
2016/05/23 Javascript
javascript中Date对象应用之简易日历实现
2016/07/12 Javascript
详解AngularJS ui-sref的简单使用
2017/04/24 Javascript
JavaScript实现仿Clock ISO时钟
2018/06/29 Javascript
layui异步加载table表中某一列数据的例子
2019/09/16 Javascript
Vue 实现html中根据类型显示内容
2019/10/28 Javascript
解决vue单页面多个组件嵌套监听浏览器窗口变化问题
2020/07/30 Javascript
[01:45:05]VGJ.T vs Newbee Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
python使用Qt界面以及逻辑实现方法
2019/07/10 Python
Python Selenium 设置元素等待的三种方式
2020/03/18 Python
Python json解析库jsonpath原理及使用示例
2020/11/25 Python
机械工程系毕业生求职信
2013/09/27 职场文书
大学生职业规划前言模板
2013/12/27 职场文书
酒店管理求职信
2014/06/09 职场文书
工作求职信
2014/07/04 职场文书
公务员学习习总书记“三严三实”思想汇报
2014/09/19 职场文书
2015年党风廉政建设责任书
2015/01/29 职场文书
2015年幼儿园学前班工作总结
2015/05/18 职场文书
医学生自荐信范文(2016精选篇)
2016/01/28 职场文书
剧场版《转生恶役只好拔除破灭旗标》公开最新视觉图 2023年上映
2022/04/02 日漫