一个基于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 相关文章推荐
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
Sep 24 PHP
php出现Cannot modify header information问题的解决方法大全
Apr 09 PHP
ThinkPHP3.1新特性之查询条件预处理简介
Jun 19 PHP
简单了解PHP编程中数组的指针的使用
Nov 30 PHP
php英文单词统计器
Jun 23 PHP
php用户密码加密算法分析【Discuz加密算法】
Oct 12 PHP
PHP数字前补0的自带函数sprintf 和number_format的用法(详解)
Feb 06 PHP
php smtp实现发送邮件功能
Jun 22 PHP
Nginx下ThinkPHP5的配置方法详解
Aug 01 PHP
PHP单元测试框架PHPUnit用法详解
Jan 23 PHP
PDO::prepare讲解
Jan 29 PHP
PHP中ltrim()函数的用法与实例讲解
Mar 28 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 和 MySQL 基础教程(三)
2006/10/09 PHP
phpMyAdmin 安装及问题总结
2009/05/28 PHP
php 保留字列表
2012/10/04 PHP
如何使用php判断服务器是否是HTTPS连接
2013/07/05 PHP
php技术实现加载字体并保存成图片
2015/07/27 PHP
win10 apache配置虚拟主机后localhost无法使用的解决方法
2018/01/27 PHP
PHP实现的只保留字符串首尾字符功能示例【隐藏部分字符串】
2019/03/11 PHP
javascript实现随机生成DIV背景色
2016/06/20 Javascript
BOM系列第二篇之定时器requestAnimationFrame
2016/08/17 Javascript
websocket+node.js实现实时聊天系统问题咨询
2017/05/17 Javascript
React实践之Tree组件的使用方法
2017/09/30 Javascript
微信小程序组件之srcoll-view的详解
2017/10/19 Javascript
微信小程序实现卡片左右滑动效果的示例代码
2019/05/01 Javascript
jquery实现垂直无限轮播的方法分析
2019/07/16 jQuery
[58:42]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第一局
2016/02/27 DOTA
[37:03]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第二场 12.16
2020/12/18 DOTA
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
Pandas探索之高性能函数eval和query解析
2017/10/28 Python
python实现简单的单变量线性回归方法
2018/11/08 Python
Python判断一个文件夹内哪些文件是图片的实例
2018/12/07 Python
Python命名空间的本质和加载顺序
2018/12/17 Python
Python使用pyautocad+openpyxl处理cad文件示例
2019/07/11 Python
Python数据可视化常用4大绘图库原理详解
2020/10/23 Python
css3 图片圆形显示 如何CSS将正方形图片显示为圆形图片布局
2014/10/10 HTML / CSS
Adobe Html5 Extension开发初体验图文教程
2017/11/14 HTML / CSS
学前教育求职自荐信范文
2013/12/25 职场文书
党员公开承诺践诺书
2014/03/25 职场文书
升学宴主持词
2014/04/02 职场文书
金融与证券专业求职信
2014/06/22 职场文书
医院安全生产月活动总结
2014/07/05 职场文书
教师党员批评与自我批评发言稿
2014/10/15 职场文书
清明节网上祭英烈寄语2015
2015/03/04 职场文书
Apache压力测试工具的安装使用
2021/03/31 Servers
如何使用php生成zip压缩包
2021/04/21 PHP
Python爬虫进阶之Beautiful Soup库详解
2021/04/29 Python
python​格式化字符串
2022/04/20 Python