使用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生成月历代码
Jun 14 PHP
实用函数7
Nov 08 PHP
PHP 身份验证方面的函数
Oct 11 PHP
php无限遍历文件夹示例分享
Mar 04 PHP
10个实用的PHP正则表达式汇总
Oct 23 PHP
php实现从上传文件创建缩略图的方法
Apr 02 PHP
php中preg_replace正则替换用法分析【一次替换多个值】
Jan 17 PHP
windows下的WAMP环境搭建图文教程(推荐)
Jul 27 PHP
thinkPHP框架自动填充原理与用法分析
Apr 03 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
Apr 16 PHP
YII框架模块化处理操作示例
Apr 26 PHP
使用php的mail()函数实现发送邮件功能
Jun 03 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
基于HTTP长连接的&quot;服务器推&quot;技术的php 简易聊天室
2009/10/31 PHP
PHP面向对象学习之parent::关键字
2017/01/18 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
关于laravel5.5的定时任务详解(demo)
2019/10/23 PHP
JavaScript 字符串连接性能优化
2008/12/20 Javascript
Javascript中的var_dump函数实现代码
2009/09/07 Javascript
基于jquery的修改当前TAB显示标题的代码
2010/12/11 Javascript
JavaScript控制Session操作方法
2013/01/17 Javascript
关于scrollLeft,scrollTop的浏览器兼容性测试
2013/03/19 Javascript
javascript消除window.close()的提示窗口
2015/05/20 Javascript
jQuery预加载图片常用方法
2015/06/15 Javascript
学习使用AngularJS文件上传控件
2016/02/16 Javascript
JavaScript中点击事件的写法
2016/06/28 Javascript
AngularJS入门教程之数据绑定用法示例
2016/11/01 Javascript
利用node.js实现自动生成前端项目组件的方法详解
2017/07/12 Javascript
详述 Sublime Text 打开 GBK 格式中文乱码的解决方法
2017/10/26 Javascript
详解Vue文档中几个易忽视部分的剖析
2018/03/24 Javascript
jQuery实现的点击标题文字切换字体效果示例【测试可用】
2018/04/26 jQuery
VUE 实现滚动监听 导航栏置顶的方法
2018/09/11 Javascript
jquery制作的移动端购物车效果完整示例
2020/02/24 jQuery
Python使用paramiko操作linux的方法讲解
2019/02/25 Python
tensorflow 实现自定义梯度反向传播代码
2020/02/10 Python
Python datetime 格式化 明天,昨天实例
2020/03/02 Python
用python写爬虫简单吗
2020/07/28 Python
Html5移动端网页端适配(js+rem)
2021/02/03 HTML / CSS
森海塞尔美国官网:Sennheiser耳机与耳麦
2017/07/19 全球购物
劳动竞赛活动方案
2014/02/20 职场文书
读书活动实施方案
2014/03/10 职场文书
单位未婚证明范本
2014/11/25 职场文书
庆六一开幕词
2015/01/29 职场文书
2015年办公室主任工作总结
2015/04/09 职场文书
工作调动申请报告
2015/05/18 职场文书
开学典礼致辞
2015/07/29 职场文书
2016廉洁教育心得体会
2016/01/20 职场文书
Javascript的promise,async和await的区别详解
2022/03/24 Javascript
Spring Security动态权限的实现方法详解
2022/06/16 Java/Android