php使用QueryList轻松采集js动态渲染页面方法


Posted in PHP onSeptember 11, 2018

QueryList使用jQuery的方式来做采集,拥有丰富的插件。下面来演示QueryList使用PhantomJS插件抓取JS动态创建的页面内容。

一、安装

使用Composer安装:

1.安装QueryList

composer require jaeger/querylist

GitHub: https://github.com/jae-jae/QueryList

2.安装PhantomJS插件

composer require jaeger/querylist-phantomjs

GitHub: https://github.com/jae-jae/QueryList-PhantomJS

二、下载PhantomJS二进制文件

PhantomJS官网:http://phantomjs.org ,下载对应平台的PhantomJS二进制文件。

三、插件API

QueryList browser($url,$debug = false,$commandOpt = []):使用浏览器打开连接

四、使用

以采集「今日头条」手机版为例,「今日头条」手机版基于React框架,内容是纯动态渲染出来的。

下面演示QueryList的PhantomJs插件用法:

1.安装插件

use QL\QueryList;
use QL\Ext\PhantomJs;
 
$ql = QueryList::getInstance();
// 安装时需要设置PhantomJS二进制文件路径
$ql->use(PhantomJs::class,'/usr/local/bin/phantomjs');
//or Custom function name
$ql->use(PhantomJs::class,'/usr/local/bin/phantomjs','browser');

2.Example-1

获取动态渲染的HTML:

$html = $ql->browser('https://m.toutiao.com')->getHtml();
print_r($html);

获取所有p标签文本内容:

$data = $ql->browser('https://m.toutiao.com')->find('p')->texts();
print_r($data->all());

输出:

Array(
  [0] => 自拍模式开启!国庆假期我和国旗合个影
  [1] => 你旅途已开始 他们仍在自己的岗位上为你的假期保驾护航
  [2] => 喜极而泣,都教授终于回到地球了!  //....)

使用http代理:

// 更多选项可以查看文档: 
http://phantomjs.org/api/command-line.html
$ql->browser('https://m.toutiao.com',true,[  
// 使用http代理 
'--proxy' => '192.168.1.42:8080',  '--proxy-type' => 'http'
])

3.Example-2

自定义一个复杂的请求:

$data = $ql->browser(function (\JonnyW\PhantomJs\Http\RequestInterface $r){
  $r->setMethod('GET');
  $r->setUrl('https://m.toutiao.com');
  $r->setTimeout(10000); // 10 seconds
  $r->setDelay(3); // 3 seconds
  return $r;
})->find('p')->texts();
 
print_r($data->all());

开启debug模式,并从本地加载cookie文件:

$data = $ql->browser(function (\JonnyW\PhantomJs\Http\RequestInterface $r){
  $r->setMethod('GET');
  $r->setUrl('https://m.toutiao.com');
  $r->setTimeout(10000); // 10 seconds
  $r->setDelay(3); // 3 seconds
  return $r;
},true,[
  '--cookies-file' => '/path/to/cookies.txt'
])->rules([
  'title' => ['p','text'],
  'link' => ['a','href']
])->query()->getData();
 
print_r($data->all());
PHP 相关文章推荐
php下网站防IP攻击代码,超级实用
Oct 24 PHP
PHP的一个基础知识 表单提交
Jul 04 PHP
利用phpexcel把excel导入数据库和数据库导出excel实现
Jan 09 PHP
php curl_init函数用法
Jan 31 PHP
PHP中的插件机制原理和实例
Jul 08 PHP
php用户注册信息验证正则表达式
Nov 12 PHP
php实现当前页面点击下载文件的实例代码
Nov 16 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 PHP
PHP实现的XXTEA加密解密算法示例
Aug 28 PHP
php+Ajax无刷新验证用户名操作实例详解
Mar 04 PHP
PHP实现统计代码行数小工具
Sep 19 PHP
php回调函数处理数组操作示例
Apr 13 PHP
Yii2结合Workerman的websocket示例详解
Sep 10 #PHP
PHP按符号截取字符串的指定部分的实现方法
Sep 10 #PHP
php 中htmlentities导致中文无法查询问题
Sep 10 #PHP
使用PHPExcel导出Excel表
Sep 08 #PHP
thinkPHP5.0框架事务处理操作简单示例
Sep 07 #PHP
thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法
Sep 07 #PHP
php curl优化下载微信头像的方法总结
Sep 07 #PHP
You might like
乐信RP2100的电路分析和打磨
2021/03/02 无线电
Win2003服务器安全加固设置--进一步提高服务器安全性
2007/05/23 PHP
php a simple smtp class
2007/11/26 PHP
discuz论坛 用户登录 后台程序代码
2008/11/27 PHP
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
2010/02/16 PHP
php中的explode()函数实例介绍
2019/01/18 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
2020/01/26 PHP
JS字符串处理实例代码
2013/08/05 Javascript
JS的Document属性和方法小结
2013/09/17 Javascript
判断客户浏览器是否支持cookie的示例代码
2013/12/23 Javascript
js对象的复制继承实例
2015/01/10 Javascript
详解maxlength属性在textarea里奇怪的表现
2015/12/27 Javascript
JS判断是否长按某一键的方法
2016/03/02 Javascript
jQuery数据检索中根据关键字快速定位GridView指定行的实现方法
2016/06/08 Javascript
使用BootStrap和Metroui设计的metro风格微网站或手机app界面
2016/10/21 Javascript
Easyui的组合框的取值与赋值
2016/10/28 Javascript
vue2.0实战之使用vue-cli搭建项目(2)
2017/03/27 Javascript
vue-router实现tab标签页(单页面)详解
2017/10/17 Javascript
AngularJs ng-change事件/指令的用法小结
2017/11/01 Javascript
nodejs初始化init的示例代码
2018/10/10 NodeJs
javascript获取select值的方法完整实例
2019/06/20 Javascript
vue路由权限校验功能的实现代码
2020/06/07 Javascript
Vue组件通信$attrs、$listeners实现原理解析
2020/09/03 Javascript
在Python的Flask框架下使用sqlalchemy库的简单教程
2015/04/09 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
2017/12/25 Python
如何为Python终端提供持久性历史记录
2019/09/03 Python
使用Python paramiko模块利用多线程实现ssh并发执行操作
2019/12/05 Python
python保存log日志,实现用log日志画图
2019/12/24 Python
python else语句在循环中的运用详解
2020/07/06 Python
python输出结果刷新及进度条的实现操作
2020/07/13 Python
Python结合Window计划任务监测邮件的示例代码
2020/08/05 Python
Python列表的深复制和浅复制示例详解
2021/02/12 Python
企业总经理任命书
2014/06/05 职场文书
班训口号大全
2014/06/18 职场文书
创先争优个人总结
2015/03/04 职场文书
2016大学生毕业实习心得体会
2016/01/23 职场文书