一个基于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 相关文章推荐
第十节--抽象方法和抽象类
Nov 16 PHP
php 数组的创建、调用和更新实现代码
Mar 09 PHP
PHP下通过file_get_contents的代理使用方法
Feb 16 PHP
php新建文件自动编号的思路与实现
Jun 27 PHP
PHP实现返回JSON和XML的类分享
Jan 28 PHP
学习php设计模式 php实现原型模式(prototype)
Dec 07 PHP
Yii2.0 模态弹出框+ajax提交表单
May 22 PHP
PHP自定义函数获取URL中一级域名的方法
Aug 23 PHP
PHP进程通信基础之信号
Feb 19 PHP
laravel手动创建数组分页的实现代码
Jun 07 PHP
PHP html_entity_decode()函数讲解
Feb 25 PHP
详解PHP设计模式之依赖注入模式
May 25 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上传图片客户端和服务器端实现方法
2015/03/30 PHP
PHP Static延迟静态绑定用法分析
2016/03/16 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
2017/08/07 PHP
php strftime函数获取日期时间(switch用法)
2018/05/16 PHP
翻译整理的jQuery使用查询手册
2007/03/07 Javascript
一个cssQuery对象 javascript脚本实现代码
2009/07/21 Javascript
Firefox中使用outerHTML的2种解决方法
2014/06/07 Javascript
JavaScript判断浏览器类型的方法
2015/02/10 Javascript
JS实现无限级网页折叠菜单(类似树形菜单)效果代码
2015/09/17 Javascript
jQuery使用$获取对象后检查该对象是否存在的实现方法
2016/09/04 Javascript
JS实现移动端按首字母检索城市列表附源码下载
2017/07/05 Javascript
基于JavaScript实现简单的音频播放功能
2018/01/07 Javascript
nodejs中Express与Koa2对比分析
2018/02/06 NodeJs
JavaScript中join()、splice()、slice()和split()函数用法示例
2018/08/24 Javascript
vue路由中前进后退的一些事儿
2019/05/18 Javascript
解决vue项目获取dom元素宽高总是不准确问题
2020/07/29 Javascript
利用H5api实现时钟的绘制(javascript)
2020/09/13 Javascript
[05:24]TI9采访——教练
2019/08/24 DOTA
python使用in操作符时元组和数组的区别分析
2015/05/19 Python
Python爬虫DOTA排行榜爬取实例(分享)
2017/06/13 Python
python利用sklearn包编写决策树源代码
2017/12/21 Python
python将txt文档每行内容循环插入数据库的方法
2018/12/28 Python
解决python明明pip安装成功却找不到包的问题
2019/08/28 Python
使用CSS禁止textarea调整大小功能的方法
2015/03/13 HTML / CSS
Skyscanner波兰:廉价航班
2017/11/07 全球购物
应届毕业生的个人自我鉴定
2013/10/24 职场文书
园林资料员岗位职责
2013/12/30 职场文书
军训心得体会
2013/12/31 职场文书
绿色校园广播稿
2014/10/13 职场文书
2014年世界艾滋病日演讲稿
2014/11/28 职场文书
创先争优活动个人总结
2015/03/04 职场文书
大学生志愿者心得体会
2016/01/15 职场文书
springboot项目以jar包运行的操作方法
2021/06/30 Java/Android
python前后端自定义分页器
2022/04/13 Python
Go Grpc Gateway兼容HTTP协议文档自动生成网关
2022/06/16 Golang
Go语言怎么使用变长参数函数
2022/07/15 Golang