一个基于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 相关文章推荐
将RTF格式的文件转成HTML并在网页中显示的代码
Oct 09 PHP
与数据库连接
Oct 09 PHP
MYSQL环境变量设置方法
Jan 15 PHP
PHP学习之数组的定义和填充
Apr 17 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
Jun 29 PHP
VPS中使用LNMP安装WordPress教程
Dec 28 PHP
PHP中使用imagick实现把PDF转成图片
Jan 26 PHP
PHP中实现获取IP和地理位置类分享
Feb 10 PHP
php实现httpRequest的方法
Mar 13 PHP
PHP微信开发之二维码生成类
Jun 26 PHP
php获取访问者浏览页面的浏览器类型
Jan 23 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 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 REMOTE_ADDR之获取访客IP的代码
2008/04/22 PHP
php 记录进行累加并显示总时长为秒的结果
2011/11/04 PHP
php实现文件下载更能介绍
2012/11/23 PHP
PHP容易忘记的知识点分享
2013/04/30 PHP
php实现最简单的MVC框架实例教程
2014/09/08 PHP
thinkphp实现发送邮件密码找回功能实例
2014/12/01 PHP
php is_writable判断文件是否可写实例代码
2016/10/13 PHP
Bootstrap+PHP实现多图上传功能实例详解
2018/04/08 PHP
jquery提示 &quot;object expected&quot;的解决方法
2009/12/13 Javascript
js有关元素内容操作小结
2011/12/20 Javascript
js实现特定位取反原理及示例
2014/06/30 Javascript
JS中如何判断传过来的JSON数据中是否存在某字段
2014/08/18 Javascript
修复bash漏洞的shell脚本分享
2014/12/31 Javascript
浅谈JavaScript中的字符编码转换问题
2015/07/07 Javascript
JS从数组中随机取出几个数组元素的方法
2016/08/02 Javascript
简单实现jQuery多选框功能
2017/01/09 Javascript
jQuery插件FusionCharts绘制2D柱状图和折线图的组合图效果示例【附demo源码】
2017/04/10 jQuery
AngularJS select设置默认值的实现方法
2017/08/25 Javascript
JavaScript for循环 if判断语句(学习笔记)
2017/10/11 Javascript
iView框架问题整理小结
2018/10/16 Javascript
JavaScript HTML DOM元素 节点操作汇总
2019/07/29 Javascript
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
Vue 同步异步存值取值实现案例
2020/08/05 Javascript
利用python获取Ping结果示例代码
2017/07/06 Python
numpy 进行数组拼接,分别在行和列上合并的实例
2018/05/08 Python
python爬虫框架scrapy实现模拟登录操作示例
2018/08/02 Python
简单介绍python封装的基本知识
2019/08/10 Python
基于python plotly交互式图表大全
2019/12/07 Python
python爬虫看看虎牙女主播中谁最“顶”步骤详解
2020/12/01 Python
python爬取微博评论的实例讲解
2021/01/15 Python
LN-CC中国:高端男装和女装的奢侈时尚目的地
2019/09/14 全球购物
坚定理想信念心得体会
2014/03/11 职场文书
新闻稿标题
2015/07/18 职场文书
《去年的树》教学反思
2016/02/18 职场文书
nginx网站服务如何配置防盗链(推荐)
2021/03/31 Servers
OpenCV实现反阈值二值化
2021/11/17 Java/Android