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获取地址栏信息的代码
Oct 08 PHP
php 计划任务 检测用户连接状态
Mar 29 PHP
深入PHP magic quotes的详解
Jun 17 PHP
PHP使用内置dir类实现目录遍历删除
Mar 31 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
Feb 23 PHP
利用PHP自动生成印有用户信息的名片
Aug 01 PHP
php arsort 数组降序排序详细介绍
Nov 17 PHP
详解Yii2 定制表单输入字段的标签和样式
Jan 04 PHP
php实现文件管理与基础功能操作
Mar 21 PHP
PHP使用new StdClass()创建空对象的方法分析
Jun 06 PHP
iis 7下安装laravel 5.4环境的方法教程
Jun 14 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
Mar 26 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将向Java靠拢
2006/10/09 PHP
PHP stream_context_create()函数的使用示例
2015/05/12 PHP
php禁用cookie后session设置方法分析
2016/10/19 PHP
PHP项目多语言配置平台实现过程解析
2020/05/18 PHP
javascript demo 基本技巧
2009/12/18 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
2013/10/24 Javascript
js判断字符长度以及中英文数字等
2013/12/31 Javascript
javascript模拟订火车票和退票示例
2014/04/24 Javascript
jQuery.parseJSON(json)将JSON字符串转换成js对象
2014/07/27 Javascript
js在IE与firefox的差异集锦
2014/11/11 Javascript
node.js中的forEach()是同步还是异步呢
2015/01/29 Javascript
jquery实现勾选复选框触发事件给input赋值
2015/02/01 Javascript
jquery滚动特效集锦
2015/06/03 Javascript
Javascript 实现微信分享(QQ、朋友圈、分享给朋友)
2016/10/21 Javascript
EasyUI Combobox设置默认值 获取text的方法
2016/11/28 Javascript
C#微信小程序服务端获取用户解密信息实例代码
2017/03/10 Javascript
vue router路由嵌套不显示问题的解决方法
2017/06/17 Javascript
详解vue 模版组件的三种用法
2017/07/21 Javascript
vue.js整合vux中的上拉加载下拉刷新实例教程
2018/01/09 Javascript
JS实现深度优先搜索求解两点间最短路径
2019/01/17 Javascript
JavaScript基于面向对象实现的无缝滚动轮播示例
2020/01/17 Javascript
JavaScript this使用方法图解
2020/02/04 Javascript
关于JavaScript数组去重的一些理解汇总
2020/09/10 Javascript
用python写的一个wordpress的采集程序
2016/02/27 Python
Python Numpy库安装与基本操作示例
2019/01/08 Python
Python 多维List创建的问题小结
2019/01/18 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
2020/01/02 Python
聊聊python中的异常嵌套
2020/09/01 Python
Python爬虫中Selenium实现文件上传
2020/12/04 Python
日本著名化妆品零售网站:Cosme Land
2019/03/01 全球购物
警校毕业生自我评价
2014/04/06 职场文书
欢度春节标语
2014/07/01 职场文书
国庆横幅标语
2014/10/08 职场文书
2015年医务人员医德医风自我评价
2015/03/03 职场文书
如何判断微信付款码和支付宝付款码
2021/04/01 PHP
Typescript类型系统FLOW静态检查基本规范
2022/05/25 Javascript