一个基于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 gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码
May 15 PHP
shopex中集成的站长统计功能的代码简单分析
Aug 11 PHP
浅析ThinkPHP中execute和query方法的区别
Jun 13 PHP
PHP使用Session遇到的一个Permission denied Notice解决办法
Jul 30 PHP
Yii实现MySQL多数据库和读写分离实例分析
Dec 03 PHP
Laravel 5 学习笔记
Mar 06 PHP
CI框架表单验证实例详解
Nov 21 PHP
YII2 实现多语言配置的方法分享
Jan 11 PHP
PHP实现搜索时记住状态的方法示例
May 11 PHP
php统计数组不同元素的个数的实例方法
Sep 26 PHP
php中加密解密DES类的简单使用方法示例
Mar 26 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
dedecms模板标签代码官方参考
2007/03/17 PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
2014/07/25 PHP
PHP 导出Excel示例分享
2014/08/18 PHP
IE和FireFox(FF)中js和css的不同
2009/04/13 Javascript
Javascript 实现TreeView CheckBox全选效果
2010/01/11 Javascript
通过判断JavaScript的版本实现执行不同的代码
2010/05/11 Javascript
用JavaScript获取DOM元素位置和尺寸大小的方法
2013/04/12 Javascript
javascript中的onkeyup和onkeydown区别介绍
2013/04/28 Javascript
简单的ajax连接库分享(不用jquery的ajax)
2014/01/19 Javascript
JavaScript计时器示例分析
2015/02/05 Javascript
JavaScript中的Promise使用详解
2015/06/24 Javascript
js实现统计字符串中特定字符出现个数的方法
2016/08/02 Javascript
JavaScript实现通过select标签跳转网页的方法
2016/09/29 Javascript
给easyui datebox扩展一个清空的实例
2016/11/09 Javascript
Vue.js项目模板搭建图文教程
2017/09/20 Javascript
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
[10:34]DOTA2上海特级锦标赛全纪录
2016/03/25 DOTA
Python中用Ctrl+C终止多线程程序的问题解决
2013/03/30 Python
Python深入学习之对象的属性
2014/08/31 Python
Python类的定义、继承及类对象使用方法简明教程
2015/05/08 Python
Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法
2018/02/03 Python
在Python 中同一个类两个函数间变量的调用方法
2019/01/31 Python
anaconda中更改python版本的方法步骤
2019/07/14 Python
python各类经纬度转换的实例代码
2019/08/08 Python
WxPython实现无边框界面
2019/11/18 Python
pytorch 状态字典:state_dict使用详解
2020/01/17 Python
Python如何获取文件指定行的内容
2020/05/27 Python
教师申诉制度
2014/01/29 职场文书
同学聚会主持词
2014/03/18 职场文书
竞选班委演讲稿
2014/04/28 职场文书
教师批评与自我批评(群众路线)
2014/10/15 职场文书
小学体育课教学反思
2016/02/16 职场文书
nginx 防盗链防爬虫配置详解
2021/03/31 Servers
关于springboot 配置date字段返回时间戳的问题
2021/07/25 Java/Android
SQLServer中exists和except用法介绍
2021/12/04 SQL Server
frg-100简单操作(设置)说明
2022/04/05 无线电