使用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安全编程之加密功能
Oct 09 PHP
无数据库的详细域名查询程序PHP版(2)
Oct 09 PHP
php面向对象全攻略 (二) 实例化对象 使用对象成员
Sep 30 PHP
php小偷相关截取函数备忘
Nov 28 PHP
php中计算中文字符串长度、截取中文字符串的函数代码
Aug 09 PHP
ThinkPHP视图查询详解
Jun 30 PHP
使用YUI+Ant 实现JS CSS压缩
Sep 02 PHP
ThinkPHP和UCenter接口冲突的解决方法
Jul 25 PHP
PHP实现Session入库/存入redis的方法
May 04 PHP
php出租房数据管理及搜索页面
May 23 PHP
Swoole 5将移除自动添加Event::wait()特性详解
Jul 10 PHP
laravel实现于语言包的完美切换方法
Sep 29 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购物车实现方法
2015/01/03 PHP
php rsa加密解密使用详解
2015/01/14 PHP
PHP查询快递信息的方法
2015/03/07 PHP
解决微信授权回调页面域名只能设置一个的问题
2016/12/11 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
PHP回调函数简单用法示例
2019/05/08 PHP
PHP设计模式入门之状态模式原理与实现方法分析
2020/04/26 PHP
js类中获取外部函数名的方法与代码
2007/09/12 Javascript
Javascript 作用域使用说明
2009/08/13 Javascript
javascript下string.format函数补充
2010/08/24 Javascript
解析使用js判断只能输入数字、字母等验证的方法(总结)
2013/05/14 Javascript
从js向Action传中文参数出现乱码问题的解决方法
2013/12/29 Javascript
JS下载文件|无刷新下载文件示例代码
2014/04/17 Javascript
JavaScript中的small()方法使用详解
2015/06/08 Javascript
学习使用bootstrap基本控件(table、form、button)
2016/04/12 Javascript
浅谈js中的in-for循环
2016/06/28 Javascript
深入浅析JavaScript函数前面的加号和叹号
2016/07/09 Javascript
JavaScript生成.xls文件的代码
2016/12/22 Javascript
AngularJS实践之使用ng-repeat中$index的注意点
2016/12/22 Javascript
VUE实现一个分页组件的示例
2017/09/13 Javascript
Vue如何从1.0迁移到2.0
2017/10/19 Javascript
JQuery实现table中tr上移下移的示例(超简单)
2018/01/08 jQuery
Vue动态加载异步组件的方法
2018/11/21 Javascript
浅谈发布订阅模式与观察者模式
2019/04/09 Javascript
vue实现在线翻译功能
2019/09/27 Javascript
微信小程序实现电子签名并导出图片
2020/05/27 Javascript
浅谈vue单页面中有多个echarts图表时的公用代码写法
2020/07/19 Javascript
在vue中封装的弹窗组件使用队列模式实现方法
2020/07/23 Javascript
[39:11]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第二局
2016/02/28 DOTA
利用Python的Twisted框架实现webshell密码扫描器的教程
2015/04/16 Python
python 实现GUI(图形用户界面)编程详解
2019/07/17 Python
python实现kNN算法识别手写体数字的示例代码
2019/08/16 Python
吃透移动端 1px的具体用法
2019/12/16 HTML / CSS
质检员岗位职责
2013/12/17 职场文书
2014自荐信的写作技巧
2014/01/28 职场文书
承诺书格式
2014/06/03 职场文书