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抓取网页变的简易化。提高开发效率。

转载于:https://www.cnblogs.com/as3lib/p/6832926.html

Vquery PHP 简单爬虫类相关推荐

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

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

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

    简单爬虫,突破复杂验证码和IP访问限制 好吧,看题目就知道我是要写一个爬虫,这个爬虫的目标网站有一些反爬取意识,所以就有了本文了. 我先说说场景吧: 由于工作需要,平时有一大堆数据需要在网上查询,并归 ...

  3. SpringBoot-Jsoup做java简单-爬虫

    使用SpringBoot+Jsoup做java简单'爬虫' Jsoup简介 Jsoup是一款java的Html解析器,可以直接解析Html.针对网页提供了相关Api,可以通过Dom.Css.Jquer ...

  4. 如何使用php写爬虫,PHP如何开发简单爬虫

    有时候因为工作.自身的需求,我们都会去浏览不同网站去获取我们需要的数据,于是爬虫应运而生,下面是开发一个简单爬虫的经过与遇到的问题.开发一个爬虫,首先你要知道你的这个爬虫是要用来做什么的.我是要用来去 ...

  5. python简单实践作业_【Python】:简单爬虫作业

    使用Python编写的图片爬虫作业: #coding=utf-8 import urllib import re def getPage(url): #urllib.urlopen(url[, dat ...

  6. 如何使用Java进行简单爬虫

    简单爬虫(Java) ​ InputStream类是表示字节输入流的所有类的超类.这是一个抽象类.从输入流读取下一个数据字节.返回 0 到 255 范围内的 int 字节值.如果因已到达流末尾而没有可 ...

  7. 简单NLP分析套路(1)----语料库积累之3种简单爬虫方式应对大部分网站

    目录 近期听课的思考 语料库的记录 3种爬虫 urllib.request + BeautifulSoup scrapy 与xpath 使用selenium 模拟浏览器行为 新的改变 相关链接 未完待 ...

  8. python秒懂百科视频,Python开发简单爬虫

    Python开发简单爬虫 源码网址:  http://download.csdn.NET/detail/hanchaobiao/9860671 一.爬虫的简介及爬虫技术价值 1.什么是爬虫: 一段自动 ...

  9. 使用 Python 3 编写简单爬虫

    使用 Python 3 编写简单爬虫 本文主要是学习Python3一个小阶段的记录,边看视频边做的一个爬虫--抓取主播名字和人气然后进行降序排序,当作复习. 学习视频:https://coding.i ...

  10. 带你快速了解爬虫的原理及过程,并编写一个简单爬虫程序

    目录 前言 你应该知道什么是爬虫? 一.Scrapy的基本执行过程 二.Scrapy的实现 2.1Scrapy框架安装 2.2创建项目 (1)爬虫框架组件介绍 (2)控制台运行创建框架命令(spide ...

最新文章

  1. Oracle-Listener log解读
  2. Linux I/O 模型(待修改)
  3. 7-28 搜索树判断 (25 分)(思路加详解) just easy!
  4. 深度学习之双线性插值(Bilinear interpolation)
  5. dll加载问题的解决方法
  6. 问题 D: 求圆的面积和周长 山东科技大学oj c 语言
  7. 百度App网络深度优化系列(一):DNS优化
  8. win10更换系统启动时候的图片
  9. 末日帝国——Agile公司的困境
  10. 解决双击盘符后默认用ACDsee打开
  11. 什么是区块链? 区块链的入门教程~
  12. via浏览器下载路径_via浏览器
  13. Google学术搜索镜像网站搜集
  14. js做个随机点名的小游戏
  15. Games101-课程16笔记
  16. 计算机管理邮箱,用WindowsLiveMail一次管理多个邮箱
  17. HDOJ 4238 - Programming the EDSAC 阅读理解..高精度处理
  18. Git 基础知识大全
  19. NokiaS60系列的jes-lcdui1@异常的分析
  20. SQL Developer | MySQL

热门文章

  1. vba窗体 点击增加减少_EXCEL之VBA-窗体实例多页控件的基础应用
  2. 怎么隐藏li标签_抖音账号如何打标签-7天让抖音账号打上标签
  3. cmd管道无法接收特定程序返回值_CQRS amp; Event Sourcing — 解决检索应用程序状态问题的一剂良方...
  4. Flutter拓展 一步一步教你安装Flutter(最火的移动框架)
  5. Android TextView用drawableLeft时,改变文字和图片间的距离
  6. SQL Server-【知识与实战I】条件查询、比较运算符查询、模糊查询、枚举查询、范围查询、空值查询、多重条件查询
  7. 在secureCRT上设置常用的快捷输出按钮栏
  8. RK3288_Android7.1写一个GPIO驱动控制LED灯亮灭
  9. 对博客园文章审核规则的质疑
  10. 摘录 vue.js代码片段的理解