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 相关文章推荐
3
Oct 09 PHP
php下一个阿拉伯数字转中文数字的函数
Jul 16 PHP
yii框架源码分析之创建controller代码
Jun 28 PHP
php中mysql模块部分功能的简单封装
Sep 30 PHP
深入php list()函数的详解
Jun 05 PHP
简单的php缓存类分享     php缓存机制
Jan 22 PHP
php出现web系统多域名登录失败的解决方法
Sep 30 PHP
php使用pdo连接sqlite3的配置示例
May 27 PHP
php 判断页面或图片是否经过gzip压缩的方法
Apr 05 PHP
老生常谈PHP面向对象之标识映射
Jun 21 PHP
Referer原理与图片防盗链实现方法详解
Jul 03 PHP
PHP获取学生成绩的方法
Nov 17 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
PHP 进程锁定问题分析研究
2009/11/24 PHP
PHP对象转换为数组函数(递归方法)
2012/02/04 PHP
PHP __autoload函数(自动载入类文件)的使用方法
2012/02/04 PHP
如何在smarty中增加类似foreach的功能自动加载数据
2013/06/26 PHP
PHP调用C#开发的dll类库方法
2014/07/28 PHP
[原创]php实现 data url的图片生成与保存
2016/12/04 PHP
很好用的js日历算法详细代码
2013/03/07 Javascript
通过遮罩层实现浮层DIV登录的js代码
2014/02/07 Javascript
关于onchange事件在IE和FF下的表现及解决方法
2014/03/08 Javascript
js动态移动滚动条至底部示例代码
2014/04/24 Javascript
使用百度地图api实现根据地址查询经纬度
2014/12/11 Javascript
node.js中的fs.futimes方法使用说明
2014/12/17 Javascript
阿里巴巴技术文章分享 Javascript继承机制的实现
2016/01/14 Javascript
利用vue-router实现二级菜单内容转换
2016/11/30 Javascript
解决给dom元素绑定click等事件无效问题的方法
2017/02/17 Javascript
详解React开发中使用require.ensure()按需加载ES6组件
2017/05/12 Javascript
vue 页面加载进度条组件实例
2018/02/05 Javascript
详解vue-cli下ESlint 配置说明
2018/09/03 Javascript
详解vue-property-decorator使用手册
2019/07/29 Javascript
JavaScript中0、空字符串、'0'是true还是false的知识点分享
2019/09/16 Javascript
解决vue组件中click事件失效的问题
2019/11/09 Javascript
Python中的两个内置模块介绍
2015/04/05 Python
python进程池实现的多进程文件夹copy器完整示例
2019/11/27 Python
Python Numpy 控制台完全输出ndarray的实现
2020/02/19 Python
python实现文件+参数发送request的实例代码
2021/01/05 Python
CSS3中的弹性布局em运用入门详解 1em等于多少像素
2021/02/08 HTML / CSS
Europcar意大利:汽车租赁
2019/07/07 全球购物
Spartoo美国:欧洲排名第一的在线时装零售商
2019/12/12 全球购物
请解释接口的显式实现有什么意义
2012/05/26 面试题
运动会广播稿100字
2014/01/11 职场文书
大学班级计划书
2014/04/29 职场文书
教师个人自我评价
2015/03/04 职场文书
停电调休通知
2015/04/16 职场文书
奖学金主要事迹范文
2015/11/04 职场文书
创业计划书之甜品店
2019/09/18 职场文书
JS前端canvas交互实现拖拽旋转及缩放示例
2022/08/05 Javascript