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 接口类与抽象类的实际作用
Nov 26 PHP
深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
Feb 06 PHP
PHP中mb_convert_encoding与iconv函数的深入解析
Jun 21 PHP
php二分查找二种实现示例
Mar 12 PHP
PHP中提问频率最高的11个面试题和答案
Sep 02 PHP
php使用mysqli向数据库添加数据的方法
Mar 20 PHP
PHP的伪随机数与真随机数详解
May 27 PHP
人脸识别测颜值、测脸龄、测相似度微信接口
Apr 07 PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
Oct 31 PHP
php str_replace替换指定次数的方法详解
May 05 PHP
php+croppic.js实现剪切上传图片功能
Aug 14 PHP
laravel解决迁移文件一次删除创建字段报错的问题
Oct 24 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下实现农历日历的代码
2007/03/07 PHP
php实现当前页面点击下载文件的实例代码
2016/11/16 PHP
PHP仿tp实现mvc框架基本设计思路与实现方法分析
2018/05/23 PHP
javascript下判断一个对象是否具有指定名称的属性的的代码
2010/01/11 Javascript
javascript实现图片切换的幻灯片效果源代码
2012/12/12 Javascript
jquery的ajax请求全面了解
2013/03/20 Javascript
javascript使用prototype完成单继承
2014/12/24 Javascript
jQuery中unwrap()方法用法实例
2015/01/16 Javascript
使用canvas实现仿新浪微博头像截取上传功能
2015/09/02 Javascript
jquery div模态窗口的简单实例
2016/05/28 Javascript
用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法
2016/10/27 Javascript
js模态对话框使用方法详解
2017/02/16 Javascript
Javascript实现运算符重载详解
2018/04/07 Javascript
JS实现字符串中去除指定子字符串方法分析
2018/05/17 Javascript
js与jQuery实现获取table中的数据并拼成json字符串操作示例
2018/07/12 jQuery
微信小程序实现多选功能
2018/11/04 Javascript
微信小程序常用简易小函数总结
2019/02/01 Javascript
微信小程序canvas绘制圆角base64图片的实现
2019/08/18 Javascript
node.js如何操作MySQL数据库
2020/10/29 Javascript
[02:23]1个至宝=115个英雄特效 最“绿”至宝拉比克“魔导师密钥”登场
2018/12/29 DOTA
python获取从命令行输入数字的方法
2015/04/29 Python
解决Python3 控制台输出InsecureRequestWarning问题
2019/07/15 Python
Pytorch 神经网络—自定义数据集上实现教程
2020/01/07 Python
python字符串常用方法及文件简单读写的操作方法
2020/03/04 Python
浅谈opencv自动光学检测、目标分割和检测(连通区域和findContours)
2020/06/04 Python
Python matplotlib 绘制双Y轴曲线图的示例代码
2020/06/12 Python
基于selenium及python实现下拉选项定位select
2020/07/22 Python
python 绘制正态曲线的示例
2020/09/24 Python
浅析canvas元素的html尺寸和css尺寸对元素视觉的影响
2019/07/22 HTML / CSS
ProForm英国站点:健身房和健身器材网上商店
2019/06/05 全球购物
介绍一些UNIX常用简单命令
2014/11/11 面试题
国庆节标语大全
2014/10/08 职场文书
2015应届毕业生求职信范文
2015/03/20 职场文书
中国合伙人观后感
2015/06/02 职场文书
社交电商模式的兴起:这些新的商机千万别错过
2019/07/26 职场文书
分析Java中Map的遍历性能问题
2021/06/26 Java/Android