一个基于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
dede3.1分页文字采集过滤规则详说(图文教程)续四
Apr 03 PHP
一个基于PDO的数据库操作类(新) 一个PDO事务实例
Jul 03 PHP
求PHP数组最大值,最小值的代码
Oct 31 PHP
PHP写的获取各搜索蜘蛛爬行记录代码
Aug 21 PHP
php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
Nov 14 PHP
ThinkPHP实例化模型的四种方法概述
Aug 22 PHP
php将图片保存为不同尺寸图片的图片类实例
Mar 30 PHP
PHP 序列化和反序列化函数实例详解
Jul 18 PHP
Yii2框架中使用PHPExcel导出Excel文件的示例
Aug 09 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 PHP
php 中的信号处理操作实例详解
Mar 04 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调用Linux的命令行执行文件压缩命令
2013/01/27 PHP
php事务处理实例详解
2014/07/11 PHP
PHP回调函数概念与用法实例分析
2017/11/03 PHP
PHP实现浏览器中直接输出图片的方法示例
2018/03/14 PHP
thinkphp5.1框架容器与依赖注入实例分析
2019/07/23 PHP
B/S开发中常用javaScript技术与代码
2007/03/09 Javascript
JavaScript中的prototype使用说明
2010/04/13 Javascript
jquery对象和javascript对象即DOM对象相互转换
2014/08/07 Javascript
js读取并解析JSON类型数据的方法
2015/11/14 Javascript
JavaScript中windows.open()、windows.close()方法详解
2016/07/28 Javascript
js轮盘抽奖实例分析
2020/04/17 Javascript
vue中如何引入jQuery和Bootstrap
2017/04/10 jQuery
vue2.0中vue-cli实现全选、单选计算总价格的实例代码
2017/07/18 Javascript
用 Vue.js 递归组件实现可折叠的树形菜单(demo)
2017/12/25 Javascript
非常实用的jQuery代码段集锦【检测浏览器、滚动、复制、淡入淡出等】
2019/08/08 jQuery
Postman参数化实现过程及原理解析
2020/08/13 Javascript
Python复制文件操作实例详解
2015/11/10 Python
用Eclipse写python程序
2018/02/10 Python
Python-Tkinter Text输入内容在界面显示的实例
2019/07/12 Python
python常用数据重复项处理方法
2019/11/22 Python
关于tf.TFRecordReader()函数的用法解析
2020/02/17 Python
Python处理mysql特殊字符的问题
2020/03/02 Python
python如何写try语句
2020/07/14 Python
深入了解Python 方法之类方法 &amp; 静态方法
2020/08/17 Python
Python浮点型(float)运算结果不正确的解决方案
2020/09/22 Python
HTML5之WebGL 3D概述(上)—WebGL原生开发开启网页3D渲染新时代
2013/01/31 HTML / CSS
丝芙兰墨西哥官网:Sephora墨西哥
2020/05/30 全球购物
高中生毕业自我鉴定
2013/10/10 职场文书
商务英语应届生自我鉴定
2013/12/08 职场文书
动员大会主持词
2014/03/20 职场文书
道德之星事迹材料
2014/05/03 职场文书
工厂车间标语
2014/06/19 职场文书
2014年学校办公室工作总结
2014/12/19 职场文书
酒店工程部经理岗位职责
2015/04/09 职场文书
高并发下Redis如何保持数据一致性(避免读后写)
2022/03/18 Redis
Golang 结构体数据集合
2022/04/22 Golang