php使用QueryList轻松采集js动态渲染页面方法
时间:2022-07-27
本文章向大家介绍php使用QueryList轻松采集js动态渲染页面方法,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
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,
四、使用
以采集「今日头条」手机版为例,「今日头条」手机版基于React框架,内容是纯动态渲染出来的。
下面演示QueryList的PhantomJs插件用法:
1.安装插件
use QLQueryList;
use QLExtPhantomJs;
$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 (JonnyWPhantomJsHttpRequestInterface $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 (JonnyWPhantomJsHttpRequestInterface $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());
- vc++ 在程序中运行另一个程序的方法
- 为Options Framework主题后台框架添加后台侧边栏
- ClistCtrl用法及总结(由怎样隐藏ListCtrl列表头的排序小三角形这个bug学习到的知识)
- 弹出式模态窗体选择文本控件
- zookeeper 分布式锁服务
- QT Creator 快速入门教程 读书笔记(三)
- WordPress中添加自定义评论表情包的方法(附三套表情包下载)
- 使用新类型Nullable处理数据库表中null字段
- QT Creator 快速入门教程 读书笔记(二)
- 设计模式学习笔记-命令模式
- .com域名和.cn域名的介绍
- Windows安装和使用zookeeper
- 使用MagicAjax 实现无刷新Webparts
- Python 项目实践一(外星人入侵小游戏)第五篇
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 安装Ambari和HDP
- React中引入Vue3的@vue/reactivity 实现响应式状态管理
- Ansible Ad-Hoc与常用模块
- Ansible Playbook 初识
- Ansible Playbook 变量与 register 详解
- 初探 Spark ML 第一部分
- Ansible Facts 变量详解 添加用户账号Ansible 配置清单Inventory
- Ansible playbook 编程
- 前端工程师自检清单73答
- Ansible playbook Vault 加密
- MySQL主从复制
- Ansible Jinja2 模板使用
- 自动化运维工具Ansible之Tests测验详解
- 自动化运维工具Ansible之Roles角色详解
- 全网最酷南极路线图