一个基于phpQuery的php通用采集类分享

一、采集类源码


代码如下:

<?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);

//就举这么多例子吧,是不是用来做采集很方便

(0)

相关推荐

  • PHP 采集程序 常用函数

    当前的脚本网址 function get_php_url(){ if(!empty($_SERVER["REQUEST_URI"])){ $scriptName = $_SERVER["REQUEST_URI"]; $nowurl = $scriptName; }else{ $scriptName = $_SERVER["PHP_SELF"]; if(empty($_SERVER["QUERY_STRING"])) $nowu

  • 基于PHP的简单采集数据入库程序

    说到采集,无非就是远程获取信息->提取所需内容->分类存储->读取->展示 也算是简单"小偷程序"的加强版吧 下面是对应核心代码(别拿去做坏事哦^_^) 所要采集的内容是某游戏网站上的公告,如下图: 可先利用file_get_contents和简单正则获取基本页面信息 整理下基本信息,采集入库: <?php include_once("conn.php"); if($_GET['id']<=8&&$_GET['id

  • 基于PHP的cURL快速入门教程 (小偷采集程序)

    最爽的是,PHP也支持 cURL 库.本文将介绍 cURL 的一些高级特性,以及在PHP中如何运用它. 为什么要用 cURL? 是的,我们可以通过其他办法获取网页内容.大多数时候,我因为想偷懒,都直接用简单的PHP函数: $content = file_get_contents("http://www.jb51.net");// or$lines = file("http://www.jb51.net");// orreadfile(http://www.jb51.

  • 开启CURL扩展,让服务器支持PHP curl函数(远程采集)

    curl().file_get_contents().snoopy.class.php这三个远程页面抓取或采集中用到的工具,默迹还是侵向于用snoopy.class.php,因为他效率比较高且不需要服务器特定配置支持,在普通虚拟主机中即可使用,file_get_contents()效率稍低些,常用失败的情况.curl()效率挺高的,支持多线程,不过需要开启下curl扩展.下面是curl扩展开启的步骤: 1.将PHP文件夹下的三个文件php_curl.dll,libeay32.dll,ssleay

  • PHP采集利器 Snoopy 试用心得

    Snoopy是什么? (下载snoopy) Snoopy是一个php类,用来模仿web浏览器的功能,它能完成获取网页内容和发送表单的任务. Snoopy的一些特点: * 方便抓取网页的内容 * 方便抓取网页的文本内容 (去除HTML标签) * 方便抓取网页的链接 * 支持代理主机 * 支持基本的用户名/密码验证 * 支持设置 user_agent, referer(来路), cookies 和 header content(头文件) * 支持浏览器转向,并能控制转向深度 * 能把网页中的链接扩展

  • php file_get_contents函数轻松采集html数据

    复制代码 代码如下: <?php //全国,判断条件是$REQUEST_URI是否含有html if (!strpos($_SERVER["REQUEST_URI"],".html")) { $page="http://qq.ip138.com/weather/"; $html = file_get_contents($page,'r'); $pattern="/<B>全国主要城市.县当天和未来五天天气趋势预报在线查询

  • php使用curl模拟登录后采集页面的例子

    今天接到的功课是从一个网站获取商品库存,但是这个网站需要登录,我用fsockopen传递了整个header头都没用,只能求助于curl了.附带说一下curl模块的开启办法:(1)从php目录下拷贝:libeay32.dll,ssleay32.dll 到windows目录下.(2)打开php.ini,查找"extension_dir = xxxxx",确认后面的文件目录内有php_curl.dll文件.(3)同样是php.ini,查找"extension=php_curl.dl

  • PHP实现采集抓取淘宝网单个商品信息

    调用淘宝的数据可以使用淘宝提供的api,如果只需调用淘宝商品图片名称等公开信息在自己网站上,使用php中的 file_get_contents 函数实现即可. 思路: file_get_contents(url) 该函数根据 url 如 http://www.baidu.com 将该网页内容(源码)以字符串形式输出(一个整字符串),然后配合preg_match,preg_replace等这些正则表达式操作就可以实现获取该url特定div,img等信息了.当然前题是淘宝在单个商品页面的结构是固定的

  • PHP制作百度词典查词采集器

    百度dict 采集样本 写的采集百度dict词典翻译后的所有结果数据,当然附带了13.5w单词库和采集简单的案例,这里我把写出的主要类dict.class.php放出来,项目地址http://github.com/widuu/baidu_dict,有需要的直接fork就可以了~么么哒,这东西用的人很少,所以有用的兄弟拿走了哈~ <?php /** * dict.class.php 采集百度词典翻译内容 * * @copyright (C) 2014 widuu * @license http:/

  • 一个基于phpQuery的php通用采集类分享

    一.采集类源码 复制代码 代码如下: <?php  /**  *通用列表采集类  *版本V1.3  *作者:JAE  */    require_once '../phpQuery/phpQuery/phpQuery.php';    class QueryList{ private $pageURL;         private $regArr = array();         public $jsonArr = array();         private $regRange; 

  • 深入浅析nuxt.js基于ssh的vue通用框架

    Nuxt.js 是一个基于 Vue.js 的通用应用框架. 通过对客户端/服务端基础架构的抽象组织, Nuxt.js 主要关注的是应用的 UI渲染. SSR ,即服务器渲染,就是在服务器端将对Vue页面进行渲染生成html文件,将html页面传递给浏览器. Nuxt.js是特点(优点): 基于 Vue.js 自动代码分层 服务端渲染 强大的路由功能,支持异步数据 静态文件服务 ES6/ES7 语法支持 打包和压缩 JS 和 CSS HTML头部标签管理 本地开发支持热加载 集成ESLint 支持

  • C#基于DBContext(EF)实现通用增删改查的REST方法实例

    本文实例讲述了C#基于DBContext(EF)实现通用增删改查的REST方法,分享给大家供大家参考.具体如下: 我们用ADO.NET Entity Data Model来生成实体类后,一般都会对这些类进行基本的增删改查操作,如果每个类都要写这些基本的方法,实在太乏味了.下面就是通过step by step的方式介绍如何用DBContext来实现通用增删改查的REST方法,以及实现过程中容易出现的问题. 1. 打开vs2012,新建一个class library的项目 2. 新加一个ADO.NE

  • 基于thinkPHP实现的微信自定义分享功能示例

    本文实例讲述了基于thinkPHP实现的微信自定义分享功能.分享给大家供大家参考,具体如下: 在许多大的网站我们都会看到点击分享就可以把数据分享到微信或QQ或其它的平台了,下面我们来看一段php版微信自定义分享代码,代码参考官方开发的没有任何问题. 分享需要认证微信订阅号或者服务号. php 代码(thinkphp): $appid='xxx'; $appsecret='xxxx'; $timestamp = time(); $noncestr = $this->getRandStr(15);

  • 基于Hibernate中配置文件的学习(分享)

    首先我们看一下hibernate的主配置文件 <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <!-- 通常,一个sessi

  • 基于Mybaits映射的一点心得(分享)

    以前一直使用Hibernate,基本上没用过Mybatis,工作中需要做映射关系,简单的了解下Mybatis的映射. 两者相差不多都支持一对一,一对多,多对多,本章简单介绍一对一的使用以及注意点. 建表语句: CREATE TABLE `bloc` ( `id` int(11) NOT NULL auto_increment, `name` varchar(255) collate utf8_bin default NULL, `company_id` int(11) default NULL,

  • 基于JavaScript 性能优化技巧心得(分享)

    JavaScript 作为当前最为常见的直译式脚本语言,已经广泛应用于 Web 应用开发中.为了提高Web应用的性能,从 JavaScript 的性能优化方向入手,会是一个很好的选择. 本文从加载.上下文.解析.编译.执行和捆绑等多个方面来讲解 JavaScript 的性能优化技巧,以便让更多的前端开发人员掌握这方面知识. 什么是高性能的 JavaScript 代码? 尽管目前没有高性能代码的绝对定义,但却存在一个以用户为中心的性能模型,可以用作参考:RAIL模型. 响应 如果你的应用程序能在1

  • 基于tomcat映射路径配置方法分享

    tomcat请求头配置 在使用postman测试的时候(携带参数)我们经常会发现浏览器一个错误:request header is too large,意思是请求头字段太长了.在这里需要配置下tomcat请求头长度. tomcat-service.xml <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443&q

  • 基于Oracle多库查询方法(分享)

    本文简述了通过创建database link实现ORACLE跨数据库查询的方法 1.配置本地数据库服务器的tnsnames.ora文件 $vi $ORACLE_HOME/network/admin/tnsnames.ora 添加如下行,其中DBLINK为连接名(可自定义),HOST和PORT为数据库侦听的IP及端口,SERVICE_NAME为数据库的SID, MEDIADBLINK = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = T

  • 基于Mybatis映射的一点心得(分享)

    以前一直使用Hibernate,基本上没用过Mybatis,工作中需要做映射关系,简单的了解下Mybatis的映射. 两者相差不多都支持一对一,一对多,多对多,本章简单介绍一对一的使用以及注意点. 建表语句: CREATE TABLE `bloc` ( `id` int(11) NOT NULL auto_increment, `name` varchar(255) collate utf8_bin default NULL, `company_id` int(11) default NULL,

随机推荐