http://www.thinkphp.cn/topic/36693.html

在使用php进行网页抓取的时候你有没有感觉到用起来比较麻烦呢?目前我还没有发现php有这样针对网页抓取的类,每次用到这个的时候我总是觉得不顺手。每每想到jquery里面的find()方法,获取网页上面的元素都是那么的方便,我在网上找过php相关的方法,但是好像并没有什么结果,于是和同事两个研究出来了一个类,专门针对php抓取网页的处理类,使用这个类你不需要再向以前那么麻烦了,你可以直接调用类似于jquery那种方法,直接对网页上面的数据进行抓取,例如$vp=$this->vq->find('a),你只需要这样操作你就可以获取该网页里面所有的a标签了,是不是觉得有点意思呢?
废话不多说,下面容我介绍下这个类的大致用法把!
为方便大家使用,Vquery类我们已经封装完成,你在项目里面直接引进Vquery类,再构造一个函数传入参数即可:
function _initialize(){
import('ORG.Util.Vquery');//引用Vquery类,不同的框架或源生写法可能引入有差异。根据实际情况选择对应的引入方法。
$arr=array(
"url"=>”http://www.baidu.com”,
“method”=>”get”or”post”,
“data”=>array(“username”=>”admin”,”password”=>”admin”,……..参数自己根据需求补),
“header”=>array(“DESC:admin”,……同上),
); 
// $arr=file_get_contents("http://www.jd.com/allSort.aspx");
$this->vq=new Vquery($arr); 
}

说明:Vquery类内置curl函数,支持传参格式①数组,即依赖Vquery里的curl抓取网页进行分析取值。这种情况需要如上述的$arr数组中的格式进行配置;②Vquery也支持内容传参,例如你可以把已经获取到的网页content直接传入,例如使用file_get_contents获取网页直接传入。Vquery内部已经做了Url解析,支持各种Url传参。好了,引入工作到此就完成了,您可以试试手感了。

Vquery类共计使用的方法有6个:find()、attr()、html()、text()、getHtmlContent ()、deal();

find():find()方法支持类似jquery的链式使用规则,例如$vq=$this->vq->find(“div”)->find(“a”);

find()传参规则: find(标签),例如$vq=$this->vq->find(“div”)表示找文章中所有该标签的元素;
find(标签$属性=)例如$vq=$this->vq->find(div$class=\”nvai\”)表示找文章中所有的class=nvai的div
find(标签,标签)例如$vq=$this->vq->find(“div”,”span”)表示找出文章中多有的div及span标签

find(标签:数字)例如$vq=$this->vq->find(“a:2”)表示找出文章中的第二个a标签
find(属性):例如$vq=$this->vq->find(“class=\”nvai\””)表示找出文章中所有class=”nvai”的标签。

find()方法支持链式调用,所以可以组合使用来达到不同的目的。系统检查到链式调用的结构之后,find()方法会自动让后面的链式结构中去上级的返回结果中匹配结果,例如,$vq=$this->vq->find(“div$class=\”nvai\””)->find(“a”);这样使用返回的结果是:找到所有class=nvai的div中的a标签

attr() :attr()方法适用于匹配属性的参数,例如我要找文中所有的herf,那么我们可以这样使用:attr(“herf”);返回结果会得到herf后面的地址参数,其他属性值的获取方式雷同,加上链式使用规则您可以这样使用函数:$vq=$this->vq->find(“a”)->attr(“herf”);

html():html()方法适用于获取网页上面制定标签之间的文本类容,这个方法获取的是最原始的内容,不经过任何处理,所以可能包含其他标签或者字符,这个方法可以根据你自己的需求适用,适用方法跟jquery里面的一样,此方法不需要传递参数:$vq=$this->vq->find(“a”)->html();

text():text()方法适用范围跟html()方法一样,但是唯一的区别就是test()方法是经过过滤处理了的,也就是说通过test()方法得到的就是纯文本了,里面不会包含任何标签。这个针对抓取网页文本非常有效,使用方法和html()一样,也不需要传参:$vq=$this->vq->find(“a”)->test();

getHtmlContent ():getHtmlContent()方法适用于查看抓取目标网页的源代码。供开发者查看网页特征,本方法可分为传参和不传参,当有参数传递时,则返回目标网站的源码,开发者可以对返回值进行保存等处理,传参格式:getHtmlContent(true);当不传参数的时候,则系统默认格式化打印网页源码:使用格式$vq=$this->vq->getHtmlContent();

deal():deal()方法是对前面的方法进行结果整理,将返回的多维数组整理成二维数组,方便数据的取用。不需要传递参数,一般使用方法如下:$vq=$this->vq->find(“a”)->deal();

方法介绍就大致入上文所述,Vquery类经过我们一段时间的测试,进本可以涵盖主流抓取网页的需求,当然肯定还有需要完善的地方,所以我们把这个文件发出来,希望更多的大神能使用,把不足的地方告知我们,相信在大家的智慧下,能让以后php抓取网页变的简易化。提高开发效率。

Vquery PHP 简单爬虫类的更多相关文章

  1. [Java]使用HttpClient实现一个简单爬虫,抓取煎蛋妹子图

    第一篇文章,就从一个简单爬虫开始吧. 这只虫子的功能很简单,抓取到”煎蛋网xxoo”网页(http://jandan.net/ooxx/page-1537),解析出其中的妹子图,保存至本地. 先放结果 ...

  2. 简单爬虫,突破IP访问限制和复杂验证码,小总结

    简单爬虫,突破复杂验证码和IP访问限制 文章地址:http://www.cnblogs.com/likeli/p/4730709.html   好吧,看题目就知道我是要写一个爬虫,这个爬虫的目标网站有 ...

  3. Python开发简单爬虫(一)

    一 .简单爬虫架构: 爬虫调度端:启动爬虫,停止爬虫,监视爬虫运行情况 URL管理器:对将要爬取的和已经爬取过的URL进行管理:可取出带爬取的URL,将其传送给“网页下载器” 网页下载器:将URL指定 ...

  4. scrapy爬虫学习系列二:scrapy简单爬虫样例学习

    系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备:      http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...

  5. SOCKET简单爬虫实现代码和使用方法

    抓取一个网页内容非常容易,常见的方式有curl.file_get_contents.socket以及文件操作函数file.fopen等. 下面使用SOCKET下的fsockopen()函数访问Web服 ...

  6. python简单爬虫一

    简单的说,爬虫的意思就是根据url访问请求,然后对返回的数据进行提取,获取对自己有用的信息.然后我们可以将这些有用的信息保存到数据库或者保存到文件中.如果我们手工一个一个访问提取非常慢,所以我们需要编 ...

  7. Jsoup-解析HTML工具(简单爬虫工具)

    Jsoup-解析HTML工具(简单爬虫工具) 一.简介 ​ jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS ...

  8. Python简单爬虫入门三

    我们继续研究BeautifulSoup分类打印输出 Python简单爬虫入门一 Python简单爬虫入门二 前两部主要讲述我们如何用BeautifulSoup怎去抓取网页信息以及获取相应的图片标题等信 ...

  9. Python简单爬虫入门二

    接着上一次爬虫我们继续研究BeautifulSoup Python简单爬虫入门一 上一次我们爬虫我们已经成功的爬下了网页的源代码,那么这一次我们将继续来写怎么抓去具体想要的元素 首先回顾以下我们Bea ...

随机推荐

  1. Leha and another game about graph CodeForces - 840B (dfs)

    链接 大意: 给定无向连通图, 每个点有权值$d_i$($-1\leq d_i \leq 1$), 求选择一个边的集合, 使得删除边集外的所有边后, $d_i$不为-1的点的度数模2等于权值 首先要注 ...

  2. python-day9-集合数据类型

    pythons=['alex','egon','yuanhao','wupeiqi','gangdan','biubiu']linuxs=['wupeiqi','oldboy','gangdan'] ...

  3. java容器——Collection接口

    Collection是Set,List接口的父类接口,用于存储集合类型的数据. 2.方法 int size():返回集合的长度 void clear():清除集合里的所有元素,将集合长度变为0 Ite ...

  4. Java容器——Map接口

    1.定义 Map用于保存存在映射关系<key, value>的数据.其中key值不能重复(使用equals()方法比较),value值可以重复. 2.常用实现类 HashMap:和Hash ...

  5. OC Xcode快捷键

    1. 文件 CMD + N: 新文件CMD + SHIFT + N: 新项目CMD + O: 打开CMD + S: 保存CMD + SHIFT + S: 另存为CMD + W: 关闭窗口CMD + S ...

  6. python daal test

    import os import sys from daal.algorithms import low_order_moments from daal.data_management import ...

  7. 【webpack系列】1 What is webpack?

    什么是webpack? 现今的网页可以看做是功能丰富的应用,拥有着复杂的js代码和一大堆依赖包.为了简化开发的复杂程度,有了很多好用的实践方法 模块化 让我们可以把复杂的程序细化为小的文件 类似于Ty ...

  8. Excel中输入身份证后3位变成0,怎么办?

    1.问题介绍: 1)问题: 在使用excel输入身份证号时,会发现直接输入数字后最后面的三位数字都变成0了,这可怎么办呢?

  9. PHP:第二章——PHP中的while语句

    <?php 语法格式: while(条件){ 代码块; } 说明:如果条件等价于true则重复执行代码块中内容,否则不执行 示例1: $i = ; ){ $i--; echo $i; } 注意: ...

  10. harbor私有镜像仓库的搭建与使用与主从复制

    harbor私有镜像仓库,私有仓库有两种,一种是harbor,一种是小型的私有仓库,harbor有两种模式,一种是主 从,一种是高可用仓库,项目需求,需要两台服务器,都有docker.ldap权限统一 ...