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+MySQL5.0中文乱码解决方法
Nov 20 PHP
使用php重新实现PHP脚本引擎内置函数
Mar 06 PHP
PHP实现异步调用方法研究与分享
Oct 27 PHP
在yii中新增一个用户验证的方法详解
Jun 20 PHP
PHP实现合并discuz用户
Aug 05 PHP
php根据日期或时间戳获取星座信息和生肖等信息
Oct 20 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
Apr 30 PHP
Yii2中datetime类的使用
Dec 17 PHP
php 获取xml接口数据的处理方法
May 31 PHP
PHP实现数组转JSon和JSon转数组的方法示例
Jun 14 PHP
PHP智能识别收货地址信息实例
Jan 05 PHP
XAMPP升级PHP版本实现步骤解析
Sep 04 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
桌面中心(一)创建数据库
2006/10/09 PHP
php中防止恶意刷新页面的代码小结
2012/10/31 PHP
php无限极分类实现的两种解决方法
2013/04/28 PHP
php使用curl发送json格式数据实例
2013/12/17 PHP
php实现的数字验证码及数字运算验证码
2015/07/30 PHP
php解析url并得到url中的参数及获取url参数的四种方式
2015/10/26 PHP
PHP + plupload.js实现多图上传并显示进度条加删除实例代码
2017/03/06 PHP
js与jQuery 获取父窗、子窗的iframe
2013/12/20 Javascript
使用原生js实现页面蒙灰(mask)效果示例代码
2014/06/20 Javascript
jquery实现页面关键词高亮显示的方法
2015/03/12 Javascript
js改变embed标签src值的方法
2015/04/10 Javascript
javascript中Date()函数在各浏览器中的显示效果
2015/06/18 Javascript
纯javascript响应式树形菜单效果
2015/11/10 Javascript
js HTML5 Ajax实现文件上传进度条功能
2016/02/13 Javascript
基于JS实现类似支付宝支付密码输入框
2016/09/02 Javascript
AngularJS 教程及实例代码
2017/10/23 Javascript
Javascript实现html转pdf高清版(提高分辨率)
2020/02/19 Javascript
Javascript异步编程async实现过程详解
2020/04/02 Javascript
JS highcharts实现动态曲线代码示例
2020/10/16 Javascript
ES2020让代码更优美的运算符 (?.) (??)
2021/01/04 Javascript
TensorFlow实现Softmax回归模型
2018/03/09 Python
Python selenium实现微博自动登录的示例代码
2018/05/16 Python
Python加载带有注释的Json文件实例
2018/05/23 Python
django 实现celery动态设置周期任务执行时间
2019/11/19 Python
使用HTML5的Canvas绘制曲线的简单方法
2015/09/08 HTML / CSS
Reebok官方旗舰店:美国知名健身品牌锐步
2019/01/07 全球购物
数组越界问题
2015/10/21 面试题
七年级地理教学反思
2014/01/26 职场文书
网络教育自我鉴定
2014/02/04 职场文书
八项规定整改方案
2014/02/21 职场文书
审查起诉阶段律师意见书
2015/05/19 职场文书
雷锋观后感
2015/06/10 职场文书
老生常谈 使用 CSS 实现三角形的技巧(多种方法)
2021/04/13 HTML / CSS
从np.random.normal()到正态分布的拟合操作
2021/06/02 Python
通过Python把学姐照片做成拼图游戏
2022/02/15 Python
Vue3实现简易音乐播放器组件
2022/08/14 Vue.js