使用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 编写安全的代码时容易犯的错误小结
May 20 PHP
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
Oct 29 PHP
PHPMYADMIN导入数据最大为2M的解决方法
Apr 23 PHP
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
Jun 25 PHP
PHP使用array_multisort对多个数组或多维数组进行排序
Dec 16 PHP
PHP 获取ip地址代码汇总
Jul 05 PHP
php获取远程文件内容的函数
Nov 02 PHP
Zend Framework教程之Resource Autoloading用法实例
Mar 08 PHP
PHP实践教程之过滤、验证、转义与密码详解
Jul 24 PHP
PHP长连接实现与使用方法详解
Feb 11 PHP
thinkphp5框架实现的自定义扩展类操作示例
May 16 PHP
PHP vsprintf()函数格式化字符串操作原理解析
Jul 14 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
使用sockets:从新闻组中获取文章(二)
2006/10/09 PHP
PHP4与PHP5的时间格式问题
2008/02/17 PHP
获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)
2013/06/01 PHP
简单实现PHP留言板功能
2016/12/21 PHP
PHP微信PC二维码登陆的实现思路
2017/07/13 PHP
PHP中数组转换为SimpleXML教程
2019/01/27 PHP
判断ie的两种简单方法
2013/08/12 Javascript
js 通用订单代码
2013/12/23 Javascript
使用js显示当前时间示例
2014/03/02 Javascript
jquery实现图片放大镜功能
2015/11/23 Javascript
AngularJS基础 ng-model 指令详解及示例代码
2016/08/02 Javascript
深入理解选择框脚本[推荐]
2016/12/13 Javascript
Vue.js中的图片引用路径的方式
2017/07/28 Javascript
Vue2.0父子组件传递函数的教程详解
2017/10/16 Javascript
mock.js实现模拟生成假数据功能示例
2019/01/15 Javascript
使用vue-cli3+typescript的项目模板创建工程的教程
2020/02/28 Javascript
vue搜索页开发实例代码详解(热门搜索,历史搜索,淘宝接口演示)
2020/04/11 Javascript
vue 判断页面是首次进入还是再次刷新的实例
2020/11/05 Javascript
[40:03]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
[57:22]完美世界DOTA2联赛PWL S2 FTD vs PXG 第二场 11.27
2020/12/01 DOTA
python中使用OpenCV进行人脸检测的例子
2014/04/18 Python
Python中将字典转换为列表的方法
2016/09/21 Python
Python处理PDF及生成多层PDF实例代码
2017/04/24 Python
每天迁移MySQL历史数据到历史库Python脚本
2018/04/13 Python
Python for循环与range函数的使用详解
2019/03/23 Python
对pytorch的函数中的group参数的作用介绍
2020/02/18 Python
python小白切忌乱用表达式
2020/05/29 Python
Python使用eval函数执行动态标表达式过程详解
2020/10/17 Python
Html5画布_动力节点Java学院整理
2017/07/13 HTML / CSS
巴西电子产品购物网站:Saldão da Informática
2018/01/09 全球购物
几道数据库的面试题或笔试题
2014/05/31 面试题
争先创优活动总结
2014/08/27 职场文书
高二学年自我鉴定范文(2篇)
2014/09/26 职场文书
关于随地扔垃圾的检讨书
2014/09/30 职场文书
2015年个人招商工作总结
2015/04/25 职场文书
对象析构函数__del__在Python中何时使用
2022/03/22 Python