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 09 PHP
php获取通过http协议post提交过来xml数据及解析xml
Dec 16 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
Sep 28 PHP
php采用curl模仿登录人人网发布动态的方法
Nov 07 PHP
php获取CSS文件中图片地址并下载到本地的方法
Dec 02 PHP
php修改上传图片尺寸的方法
Apr 14 PHP
php用户注册信息验证正则表达式
Nov 12 PHP
ThinkPHP中create()方法自动验证表单信息
Apr 28 PHP
Laravel接收前端ajax传来的数据的实例代码
Jul 20 PHP
php tpl模板引擎定义与使用示例
Aug 09 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
Apr 27 PHP
thinkphp5 路由分发原理
Mar 18 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
PHP5中的this,self和parent关键字详解教程
2007/03/19 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(九)
2014/06/24 PHP
php正则表达式学习笔记
2015/11/13 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
2016/01/14 PHP
Thinkphp单字母函数使用指南
2016/05/08 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
JS 对输入框进行限制(常用的都有)
2013/07/30 Javascript
用javascript关闭本窗口技巧小结
2014/09/05 Javascript
原生js与jQuery实现简单的tab切换特效对比
2015/07/30 Javascript
js实现当复选框选择匿名登录时隐藏登录框效果
2015/08/14 Javascript
JavaScript中对DOM节点的访问、创建、修改、删除
2015/11/16 Javascript
关于javascript作用域的常见面试题分享
2017/06/18 Javascript
AngularJS实现动态切换样式的方法分析
2018/06/26 Javascript
JavaScript 对引擎、运行时、调用堆栈的概述理解
2018/10/22 Javascript
详解如何运行vue项目
2019/04/15 Javascript
详解vue-cli 脚手架 安装
2019/04/16 Javascript
2020京东618叠蛋糕js脚本(亲测好用)
2020/06/02 Javascript
[43:24]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS Liquid
2018/03/30 DOTA
使用PyV8在Python爬虫中执行js代码
2017/02/16 Python
python matplotlib坐标轴设置的方法
2017/12/05 Python
对Python信号处理模块signal详解
2019/01/09 Python
对django2.0 关联表的必填on_delete参数的含义解析
2019/08/09 Python
Python程序暂停的正常处理方法
2019/11/07 Python
网页中的电话号码如何实现一键直呼效果_附示例
2016/03/15 HTML / CSS
HTML5 Canvas像素处理使用接口介绍
2012/12/02 HTML / CSS
Mankind美国/加拿大:英国领先的男士美容护发用品公司
2018/12/05 全球购物
Linux面试经常问的文件系统操作命令
2015/11/05 面试题
设计模式的基本要素是什么
2014/04/21 面试题
文明村创建实施方案
2014/03/27 职场文书
安全责任书范本
2014/04/15 职场文书
环保倡议书范文
2014/05/12 职场文书
员工试用期自我鉴定范文
2014/09/15 职场文书
2015年暑假工作总结
2015/07/13 职场文书
三十年同学聚会感言
2015/07/30 职场文书
Nginx反向代理及负载均衡如何实现(基于linux)
2021/03/31 Servers
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
2021/05/21 Python