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 相关文章推荐
ADODB结合SMARTY使用~超级强
Nov 25 PHP
解决phpmyadmin中缺少mysqli扩展问题的方法
May 06 PHP
Apache服务器无法使用的解决方法
May 08 PHP
PHP+jquery实时显示网站在线人数的方法
Jan 04 PHP
php实现学生管理系统
Mar 21 PHP
php生成二维码图片方法汇总
Dec 17 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
May 05 PHP
PHP实现一个轻量级容器的方法
Jan 28 PHP
PHP实现字符串大小写转函数的功能实例
Feb 06 PHP
PHP explode()函数用法讲解
Feb 15 PHP
PHP实现创建一个RPC服务操作示例
Feb 23 PHP
PHP语言对接抖音快手小红书视频/图片去水印API接口源码
Aug 11 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 array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
2011/07/12 PHP
那些年一起学习的PHP(一)
2012/03/21 PHP
ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整
2014/11/05 PHP
PHP操作MySQL的mysql_fetch_* 函数的常见用法教程
2015/12/25 PHP
PHP耦合设计模式实例分析
2018/08/08 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
2020/04/13 PHP
Thinkphp 框架配置操作之配置加载与读取配置实例分析
2020/05/15 PHP
javascript 写类方式之四
2009/07/05 Javascript
提升你网站水平的jQuery插件集合推荐
2011/04/19 Javascript
NodeJS与Mysql的交互示例代码
2013/08/18 NodeJs
js检测网络是否具体连接功能的代码
2014/05/23 Javascript
编写简单的jQuery提示插件
2014/12/21 Javascript
基于HTML模板和JSON数据的JavaScript交互(移动端)
2016/04/06 Javascript
关于微信中a链接无法跳转问题
2016/08/02 Javascript
Jquery删除css属性的简单方法
2016/12/04 Javascript
微信小程序自定义toast组件的方法详解【含动画】
2019/05/11 Javascript
NodeJS实现一个聊天室功能
2019/11/25 NodeJs
vue在线动态切换主题色方案
2020/03/26 Javascript
python3.5 email实现发送邮件功能
2018/05/22 Python
django之使用celery-把耗时程序放到celery里面执行的方法
2019/07/12 Python
Python ini文件常用操作方法解析
2020/04/26 Python
纯css3制作煽动翅膀的蝴蝶的示例
2018/04/23 HTML / CSS
HTML5 video视频字幕的使用和制作方法
2018/05/03 HTML / CSS
html5拖曳操作 HTML5实现网页元素的拖放操作
2013/01/02 HTML / CSS
html5本地存储之localstorage 、本地数据库、sessionStorage简单使用示例
2014/05/08 HTML / CSS
美国体育用品在线:Modell’s Sporting Goods
2018/06/07 全球购物
个人自我鉴定
2013/11/07 职场文书
艺术设计专业个人求职信范文
2013/12/11 职场文书
岗位廉政承诺书
2014/03/27 职场文书
团队队名口号大全
2014/06/06 职场文书
住宿生擅自离校检讨书
2014/09/22 职场文书
2015年保险公司内勤工作总结
2015/05/23 职场文书
新生开学寄语大全
2015/05/28 职场文书
如何写一份成功的商业计划书
2019/06/25 职场文书
Go语言实现Base64、Base58编码与解码
2021/07/26 Golang
python中mongodb包操作数据库
2022/04/19 Python