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 相关文章推荐
Windows下PHP5和Apache的安装与配置
Sep 05 PHP
PHP 和 XML: 使用expat函数(二)
Oct 09 PHP
php session处理的定制
Mar 16 PHP
PHP UTF8编码内的繁简转换类
Jul 20 PHP
PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
Aug 22 PHP
部署PHP项目应该注意的几点事项分享
Dec 20 PHP
CI框架装载器Loader.php源码分析
Nov 04 PHP
php简单实现屏蔽指定ip段用户的访问
Apr 29 PHP
深入解析WordPress中加载模板的get_template_part函数
Jan 11 PHP
Yii2简单实现给表单添加验证码的方法
Jul 18 PHP
PHP实现的数组和XML文件相互转换功能示例
Mar 15 PHP
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
Apr 02 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
destoon公司主页模板风格的添加方法
2014/06/20 PHP
PHPCMS V9 添加二级导航的思路详解
2016/10/20 PHP
CI框架AR数据库操作常用函数总结
2016/11/21 PHP
php 反斜杠处理函数addslashes()和stripslashes()实例详解
2016/12/25 PHP
PHP中使用OpenSSL生成证书及加密解密
2017/02/05 PHP
微信开发之获取JSAPI TICKET
2017/07/07 PHP
javascript笔试题目附答案@20081025_jb51.net
2008/10/26 Javascript
jquery ajax 登录验证实现代码
2009/09/23 Javascript
Jquery提交表单 Form.js官方插件介绍
2012/03/01 Javascript
提示$ is not defined错误分析及解决
2013/04/09 Javascript
JavaScript实现简单的时钟实例代码
2013/11/23 Javascript
javascript实现浏览器窗口传递参数的方法
2014/09/03 Javascript
分享一则javascript 调试技巧
2015/01/02 Javascript
javascript实现省市区三级联动下拉框菜单
2015/11/17 Javascript
引用jquery框架后出错的解决方法
2016/08/09 Javascript
Thinkjs3新手入门之添加一个新的页面
2017/12/06 Javascript
详解小程序输入框闪烁及重影BUG解决方案
2018/08/31 Javascript
详解微信小程序网络请求接口封装实例
2019/05/02 Javascript
微信小程序swiper左右扩展各显示一半代码实例
2019/12/05 Javascript
JS操作Fckeditor的一些常用方法(获取、插入等)
2020/02/19 Javascript
纯JS实现五子棋游戏
2020/05/28 Javascript
vue操作dom元素的3种方法示例
2020/09/20 Javascript
python通过cookie模拟已登录状态的初步研究
2016/11/09 Python
教你利用Python玩转histogram直方图的五种方法
2018/07/30 Python
Python自动发送邮件的方法实例总结
2018/12/08 Python
Python查找最长不包含重复字符的子字符串算法示例
2019/02/13 Python
python图形绘制奥运五环实例讲解
2019/09/14 Python
python中删除某个元素的方法解析
2019/11/05 Python
python在一个范围内取随机数的简单实例
2020/08/16 Python
Python调用ffmpeg开源视频处理库,批量处理视频
2020/11/16 Python
Notino匈牙利:购买香水和化妆品
2019/04/12 全球购物
索桥的故事教学反思
2014/02/06 职场文书
职业生涯规划书结束语
2014/04/15 职场文书
群众路线教育实践活动批评与自我批评
2014/09/15 职场文书
html5 录制mp3音频支持采样率和比特率设置
2021/07/15 Javascript
带你了解Java中的ForkJoin
2022/04/28 Java/Android