使用phpQuery采集网页的方法


Posted in PHP onNovember 13, 2013

phpQuery是一个基于PHP的服务端开源项目,它可以让PHP开发人员轻松处理DOM文档内容,比如获取某新闻网站的头条信息。更有意思的是,它采用了jQuery的思想,你可以像使用jQuery一样处理页面内容,获取你想要的页面信息。
采集头条
先看一实例,现在我要采集新浪网国内新闻的头条,代码如下:

include 'phpQuery/phpQuery.php'; 
phpQuery::newDocumentFile('https://3water.com'); 
echo pq(".blkTop h1:eq(0)")->html();

简单的三行代码,就可以获取头条内容。首先在程序中包含phpQuery.php核心程序,然后调用读取目标网页,最后输出对应标签下的内容。
pq()是一个功能强大的方法,跟jQuery的$()如出一辙,jQuery的选择器基本上都能使用在phpQuery上,只要把“.”变成“->”。如上例中,pq(“.blkTop h1:eq(0)”)抓取了页面class属性为blkTop的DIV元素,并找到该DIV内部的第一个h1标签,然后用html()方法获取h1标签里的内容(带html标签),也就是我们要获取的头条信息,如果使用text()方法,则只获取头条的文本内容。当然要使用好phpQuery,关键是要找对文档中对应内容的节点。
采集文章列表
下面再来看一个例子,获取helloweba.com网站的blog列表,请看代码:
include 'phpQuery/phpQuery.php'; 
phpQuery::newDocumentFile('https://3water.com'); 
$artlist = pq(".blog_li"); 
foreach($artlist as $li){ 
   echo pq($li)->find('h2')->html().""; 
}

通过循环列表中的DIV,找出文章标题并输出,就是这么简单。
解析XML文档
假设现在有一个这样的test.xml文档:
<?xml version="1.0" encoding="utf-8"?> 
<root> 
  <contact> 
     <name>张三</name> 
     <age>22</age> 
  </contact> 
  <contact> 
     <name>王五</name> 
     <age>18</age> 
  </contact> 
</root>

现在我要获取名字为张三的联系人的年龄,代码如下:
include 'phpQuery/phpQuery.php'; 
phpQuery::newDocumentFile('test.xml'); 
echo pq('contact > age:eq(0)');
结果输出:22

像jQuery一样,精准查找文档节点,输出节点下的内容,解析一个XML文档就是这么简单。现在你不必为采集网站内容而使用那些头疼的正则算法、内容替换等繁琐的代码了,有了phpQuery,一切就变得轻松多了。
phpquery项目官网地址:http://code.google.com/p/phpquery/
PHP 相关文章推荐
php网页后退不再出现过期
Mar 08 PHP
php FPDF类库应用实现代码
Mar 20 PHP
浅析PHP绘图技术
Jul 03 PHP
YII中assets的使用示例
Jul 31 PHP
php使用正则表达式获取图片url的方法
Jan 16 PHP
支持中文、字母、数字的PHP验证码
May 04 PHP
PHP获取音频文件的相关信息
Jun 22 PHP
Laravel 中获取上一篇和下一篇数据
Jul 27 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
Dec 14 PHP
php组合排序简单实现方法
Oct 15 PHP
php+resumablejs实现的分块上传 断点续传功能示例
Apr 18 PHP
基于PHP实现短信验证码发送次数限制
Jul 11 PHP
phpQuery占用内存过多的处理方法
Nov 13 #PHP
PHP反射类ReflectionClass和ReflectionObject的使用方法
Nov 13 #PHP
php堆排序(heapsort)练习
Nov 13 #PHP
php生成EAN_13标准条形码实例
Nov 13 #PHP
使用php计算排列组合的方法
Nov 13 #PHP
测试php函数的方法
Nov 13 #PHP
PHP中判断变量为空的几种方法小结
Nov 12 #PHP
You might like
第六节 访问属性和方法 [6]
2006/10/09 PHP
分享一则PHP定义函数代码
2015/02/26 PHP
Laravel框架实现redis集群的方法分析
2017/09/14 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
2019/09/05 PHP
Extjs学习过程中新手容易碰到的低级错误积累
2010/02/11 Javascript
检测input每次的输入是否合法遇到汉字输入就有问题
2012/05/23 Javascript
JS中的数组的sort方法使用示例
2014/01/22 Javascript
jquery判断小数点两位和自动删除小数两位后的数字
2014/03/19 Javascript
jQuery中阻止冒泡事件的方法介绍
2014/04/12 Javascript
js计算德州扑克牌面值的方法
2015/03/04 Javascript
JavaScript实现为指定对象添加多个事件处理程序的方法
2015/04/17 Javascript
json+jQuery实现的无限级树形菜单效果代码
2015/08/27 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(一)
2016/02/16 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
2016/02/17 Javascript
jquery遍历标签中自定义的属性方法
2016/09/17 Javascript
微信小程序本作用域下调用全局JS详解及实例
2017/02/22 Javascript
ES6知识点整理之函数对象参数默认值及其解构应用示例
2019/04/17 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
2019/04/20 Javascript
js实现3D旋转相册
2020/08/02 Javascript
解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况
2020/10/30 Javascript
[43:53]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.22
2019/09/05 DOTA
Python使用smtplib模块发送电子邮件的流程详解
2016/06/27 Python
Python实现将HTML转换成doc格式文件的方法示例
2017/11/20 Python
python提取图像的名字*.jpg到txt文本的方法
2018/05/10 Python
Python读取mat文件,并转为csv文件的实例
2018/07/04 Python
一看就懂得Python的math模块
2018/10/21 Python
x-ua-compatible content=”IE=7, IE=9″意思理解
2013/07/22 HTML / CSS
武汉东之林科技有限公司机试
2013/09/17 面试题
恒华伟业笔试面试题
2015/02/26 面试题
公司总经理工作职责管理办法
2014/02/28 职场文书
论文指导教师评语
2014/04/28 职场文书
职务说明书范文
2014/05/07 职场文书
群众路线个人整改方案
2014/10/25 职场文书
2015年导购员工作总结
2015/04/25 职场文书
离婚上诉状范文
2015/05/23 职场文书
Java中的Kafka为什么性能这么快及4大核心详析
2022/09/23 Java/Android