一个基于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 相关文章推荐
PHP4引用文件语句的对比
Oct 09 PHP
wordpress之wp-settings.php
Aug 17 PHP
php 生成饼图 三维饼图
Sep 28 PHP
php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
Oct 22 PHP
php class类的用法详细总结
Oct 17 PHP
php的SimpleXML方法读写XML接口文件实例解析
Jun 16 PHP
CI框架自动加载session出现报错的解决办法
Jun 17 PHP
php多重接口的实现方法
Jun 20 PHP
php算法实例分享
Jul 14 PHP
PHP读MYSQL中文乱码的快速解决方法
Oct 01 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
Jun 15 PHP
PHP使用curl_multi实现并发请求的方法示例
Apr 29 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中使用foreach和引用导致程序BUG的问题介绍
2012/09/05 PHP
PHP添加Xdebug扩展的方法
2014/02/12 PHP
php+mysql+jquery实现简易的检索自动补全提示功能
2017/04/15 PHP
php简单实现单态设计模式的方法分析
2017/07/28 PHP
yii框架使用分页的方法分析
2019/07/25 PHP
ExtJS GridPanel 根据条件改变字体颜色
2010/03/08 Javascript
JavaScript地图拖动功能SpryMap的简单实现
2013/07/17 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
2015/03/30 Javascript
JS中如何比较两个Json对象是否相等实例代码
2016/07/13 Javascript
javascript作用域链与执行环境详解
2017/03/25 Javascript
js实现从左向右滑动式轮播图效果
2017/07/07 Javascript
AngularJs导出数据到Excel的示例代码
2017/08/11 Javascript
JavaScript面向对象精要(上部)
2017/09/12 Javascript
vue2.0 elementUI制作面包屑导航栏
2018/02/22 Javascript
vue实现自定义多选与单选的答题功能
2018/07/05 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
详解微信小程序支付流程与梳理
2019/07/16 Javascript
JS实现网页端猜数字小游戏
2020/03/06 Javascript
Javascript如何递归遍历本地文件夹
2020/08/06 Javascript
微信小程序实现日历签到
2020/09/21 Javascript
Python实现高效求解素数代码实例
2015/06/30 Python
以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
2016/01/20 Python
Django实现WebSSH操作物理机或虚拟机的方法
2019/11/06 Python
Python实现大数据收集至excel的思路详解
2020/01/03 Python
python序列类型种类详解
2020/02/26 Python
Python中的__init__作用是什么
2020/06/09 Python
Python3以GitHub为例来实现模拟登录和爬取的实例讲解
2020/07/30 Python
HTML5在线预览PDF的示例代码
2017/09/14 HTML / CSS
Levi’s美国官网:美国著名的牛仔裤品牌
2016/08/19 全球购物
香港百佳网上超级市场:PARKNSHOP.com
2020/06/10 全球购物
优秀经理获奖感言
2014/03/04 职场文书
公司新人试用期自我评价
2014/09/17 职场文书
大学生赌博检讨书
2014/09/22 职场文书
工伤事故赔偿协议书
2015/08/06 职场文书
2019最新激励员工口号大全!
2019/06/28 职场文书
iOS 16进一步确认,一共支持16款iPhone
2022/04/28 数码科技