splash-简介及入门
splash
1. splash简介
Splash是一个JavaScript渲染服务,是一个带有HTTP API的轻量级浏览器,同时它对接了Python中的Twisted和QT库。利用它,我们同样可以实现动态渲染页面的抓取。
利用Splash,我们可以实现如下功能:
异步方式处理多个网页渲染过程;
获取渲染后的页面的源代码或截图;
通过关闭图片渲染或者使用Adblock规则来加快页面渲染速度;
可执行特定的JavaScript脚本;
可通过Lua脚本来控制页面渲染过程;
获取渲染的详细过程并通过HAR(HTTP Archive)格式呈现。
2. 运行及使用
2.1. 运行
启动docker,实验位于windows平台,点击Docker Quickstart Terminal即可。
拉取镜像splash
$ docker pull scrapinghub/splash
启动容器:
$ docker run -p 8050:8050 scrapinghub/splash
表示:Splash现在在端口8050(http)可用。
2.2. 使用
浏览器访问http://192.168.99.100:8050
结果是splash界面。
释义:
左侧为简介,略;
右侧上层为目标网页地址,默认为baidu.com;
右侧下层为当前解析脚本,它使用lua语言。
输入目标网页地址:天眼查
https://www.tianyancha.com/search?key=%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4
然后render me,结果如下:
输出内容由lua脚本指定。
默认输出三种信息,分别是html,png,har。
实际上是Splash执行了整个网页的渲染过程,包括CSS、JavaScript的加载等过程,呈现的页面和浏览器中得到的结果完全一致,然后返回渲染截图、HAR加载统计数据、网页的源代码。
当然可以定制脚本,但一般不需要写lua脚本,有相关的python包。
3. lua脚本
默认脚本如下:
function main(splash, args)
assert(splash:go(args.url))
assert(splash:wait(0.5))
return {
html = splash:html(),
png = splash:png(),
har = splash:har(),
}
end
4. 总结
总而言之,splash是一个渲染引擎。
输入url,根据lua脚本返回相应对象。
它能在js执行前执行本地js(用于环境模拟)。
5. 接口
通常使用的是http api,所以,这里提及的都是http接口。
参考文档:https://splash.readthedocs.io/en/stable/api.html#render-html
http接口使用get方法访问即可。
概念:
endpoint:执行主体,决定返回的数据类型。常用的有execute,run,render.html,render.png。
5.1. 返回的数据类型
render.html
Return the HTML of the javascript-rendered page.
示例:curl 'http://localhost:8050/render.html?url=http://domain.com/page-with-javascript.html&timeout=10&wait=0.5'
render.png
Return an image (in PNG format) of the javascript-rendered page.
render.jpeg
Return an image (in JPEG format) of the javascript-rendered page.
示例:
# render with default quality
curl 'http://localhost:8050/render.jpeg?url=http://domain.com/'
# render with low quality
curl 'http://localhost:8050/render.jpeg?url=http://domain.com/&quality=30'
render.har
Return information about Splash interaction with a website in HAR format. It includes information about requests made, responses received, timings, headers, etc.
返回HAR格式数据,包括请示生成,响应,时间线,头部等。
render.json
Return a json-encoded dictionary with information about javascript-rendered webpage. It can include HTML, PNG and other information, based on arguments passed.
Return a json-encoded dictionary with information about javascript-rendered webpage. It can include HTML, PNG and other information, based on arguments passed.
重点:
execute
Execute a custom rendering script and return a result.
run
它与execute相同,但接口形式不同,简单来说,不需要包裹函数体。
This endpoint is the same as execute, but it wraps lua_source in function main(splash, args) ... endautomatically. For example, if you’re sending this script to execute:
在execute中应该这样写:
function main(splash, args)
assert(splash:go(args.url))
assert(splash:wait(1.0))
return splash:html()
end
equivalent script for run endpoint would be
它等效于run
assert(splash:go(args.url))
assert(splash:wait(1.0))
return splash:html()
executer的参数
Arguments:
lua_source : string : required(重点)
Browser automation script. See Splash Scripts Tutorial for more info.
timeout : float : optional
Same as ‘timeout’ argument for render.html.
allowed_domains : string : optional
Same as ‘allowed_domains’ argument for render.html.
proxy : string : optional
Same as ‘proxy’ argument for render.html.
filters : string : optional
Same as ‘filters’ argument for render.html.
save_args : JSON array or a comma-separated string : optional
Same as ‘save_args’ argument for render.html. Note that you can save not only default Splash arguments, but any other parameters as well.
load_args : JSON object or a string : optional
Same as ‘load_args’ argument for render.html. Note that you can load not only default Splash arguments, but any other parameters as well.
splash-简介及入门的更多相关文章
- JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式
相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...
- python3-day1-python简介及入门
python简介及入门 python简介 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为 ...
- Robot Framework-工具简介及入门使用
Robot Framework-Mac版本安装 Robot Framework-Windows版本安装 Robot Framework-工具简介及入门使用 Robot Framework-Databa ...
- Linux内核学习笔记-1.简介和入门
原创文章,转载请注明:Linux内核学习笔记-1.简介和入门 By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...
- Akka 简介与入门
Akka 简介与入门 http://www.thinksaas.cn/group/topic/344095/ 参考官网 http://akka.io/ 开源代码 https://github.co ...
- 【转】Docker简介与入门
转自:https://segmentfault.com/a/1190000000448808 Docker是个新生的事物,概念类似虚拟化.网上关于Docker入门的东西已经很多了.不过本文探讨了Doc ...
- Quartz入门例子简介 从入门到菜鸟(一)
转: Quartz入门例子简介 从入门到菜鸟(一) 2016年11月19日 22:58:24 爱种鱼的猫 阅读数:4039 刚接触quartz这个词并不是在学习过程中...而是WOW里面的界面插件 ...
- Lombok简介及入门使用 (转载)
Lombok简介及入门使用 lombok既是一个IDE插件,也是一个项目要依赖的jar包. Intellij idea开发的话需要安装Lombok plugin,同时设置 Setting -> ...
- Shiro简介、入门案例、web容器的集成
目的: shiro简介 Shiro入门案例 Shiro与web容器的集成 shiro简介(中文官网:https://www.w3cschool.cn/shiro/andc1if0.html) 1.什么 ...
- Python【第一章】:简介和入门
ython简介 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC 语言的一种继承.之 ...
随机推荐
- Android 的UI基础布局的学习
一. 今天学习了Android 的UI基础布局的部分,绝大多数的布局都在Androidstudio的这个界面里,如下: 在左边的框里的palette的内部,包含了的大多数的布局所要用的button按钮 ...
- Linux find命令:在目录中查找文件(超详解)
find 是 Linux 中强大的搜索命令,不仅可以按照文件名搜索文件,还可以按照权限.大小.时间.inode 号等来搜索文件.但是 find 命令是直接在硬盘中进行搜索的,如果指定的搜索范围过大,f ...
- selenium grid的使用
Selenium grid是用来分布式执行测试用例脚本的工具,比如测试人员经常要测试多浏览器的兼容性,那就可以用到grid了. selenium grid的hub相当于一个接收脚本并分发脚本的角色,n ...
- django 400报错
最近做一个django项目,在设置了 DEBUG=False之后,访问接口,报错400. 何解??? 查资料,得知: ...
- Spark 中 GroupByKey 相对于 combineByKey, reduceByKey, foldByKey 的优缺点
避免使用GroupByKey 我们看一下两种计算word counts 的方法,一个使用reduceByKey,另一个使用 groupByKey: val words = Array("on ...
- unittest学习3-测试组件setup、teardown
unittest的测试用例执行时都可以设置setup.teardown,用来初始化测试开始和测试结束关闭,例如: import unittest class MyTestCase(unittest.T ...
- bistoury的源码启动(二)
bistoury.conf这个东东就是我们代码中的 -Dbistoury.conf=D:\openSource\bistoury\bistoury-proxy\conf 这样就能搞定了,一下子就能启动 ...
- 第十九篇 vim编辑器的使用技巧
vim编辑器 ~/.viminfo文件中存储了vim编辑器中常用的命令 vim编辑器共有3中模式:命令模式.末行模式和输入模式,三种模式的转换方式如下图所示: vim 文件名 # 编辑一个文 ...
- 计算几何-点与多边形的位置判断-zoj1081Points Within
This article is made by Jason-Cow.Welcome to reprint.But please post the writer's address. http://ww ...
- Sass&Scss入门 选择器 混合器 导入 条件判断 迭代
Sass 基于ruby的一种将脚本解析成CSS的脚本语言.也可以说是一种预处理语言. Sass在css的语法基础上增加了变量.嵌套.混合.继承.导入等高级功能. 使用Sass与Sass样式库(如com ...