使用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模板引擎SMARTY
Oct 09 PHP
php中显示数组与对象的实现代码
Apr 18 PHP
php自动注册登录验证机制实现代码
Dec 20 PHP
php列出一个目录下的所有文件的代码
Oct 09 PHP
php读取mysql中文数据出现乱码的解决方法
Aug 16 PHP
php生成缩略图示例代码分享(使用gd库实现)
Jan 20 PHP
php通过asort()给关联数组按照值排序的方法
Mar 18 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
Feb 10 PHP
ThinkPHP框架实现导出excel数据的方法示例【基于PHPExcel】
May 12 PHP
Laravel框架实现超简单的分页效果示例
Feb 08 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
Feb 21 PHP
thinkphp诸多限制条件下如何getshell详解
Dec 09 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
PHP 常见郁闷问题答解
2006/11/25 PHP
php发送http请求的常用方法分析
2016/11/08 PHP
php从身份证获取性别和出生年月
2017/02/09 PHP
PHPUnit + Laravel单元测试常用技能
2019/11/06 PHP
jQuery的$.proxy()应用示例介绍
2014/04/03 Javascript
JavaScript在Android的WebView中parseInt函数转换不正确问题解决方法
2015/04/25 Javascript
canvas滤镜效果实现代码
2017/02/06 Javascript
js实现显示手机号码效果
2017/03/09 Javascript
vue2.X组件学习心得(新手必看篇)
2017/07/05 Javascript
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
2018/01/11 Javascript
angular写一个列表的选择全选交互组件的示例
2018/01/22 Javascript
jQuery实现的电子时钟效果完整示例
2018/04/28 jQuery
vue实现与安卓、IOS交互的方法
2018/11/02 Javascript
express框架下使用session的方法
2019/07/31 Javascript
Element Badge标记的使用方法
2020/07/27 Javascript
解决ant Design Search无法输入内容的问题
2020/10/29 Javascript
python实现绘制树枝简单示例
2014/07/24 Python
Django实现简单分页功能的方法详解
2017/12/05 Python
python数据抓取分析的示例代码(python + mongodb)
2017/12/25 Python
python/sympy求解矩阵方程的方法
2018/11/08 Python
在pandas多重索引multiIndex中选定指定索引的行方法
2018/11/16 Python
python读取目录下最新的文件夹方法
2018/12/24 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
2020/04/22 Python
Python3合并两个有序数组代码实例
2020/08/11 Python
10分钟理解CSS3 FlexBox弹性布局
2018/12/20 HTML / CSS
百思买加拿大:Best Buy Canada
2018/03/20 全球购物
关于VPN
2012/06/10 面试题
介绍一下ICMP(Internet Control Message Protocol)Internet控制信息协议
2016/11/26 面试题
项目施工员岗位职责
2014/03/09 职场文书
学生党员一帮一活动总结
2014/07/08 职场文书
2014旅游局党组书记党建工作汇报材料
2014/11/02 职场文书
2014年项目工作总结
2014/11/24 职场文书
关于倡议书的范文
2015/04/29 职场文书
负责培养人意见
2015/06/05 职场文书
小学毕业感言200字
2015/07/30 职场文书
Mysql InnoDB 的内存逻辑架构
2022/05/06 MySQL