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-简介及入门的更多相关文章

  1. JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式

    相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...

  2. python3-day1-python简介及入门

    python简介及入门 python简介 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为 ...

  3. Robot Framework-工具简介及入门使用

    Robot Framework-Mac版本安装 Robot Framework-Windows版本安装 Robot Framework-工具简介及入门使用 Robot Framework-Databa ...

  4. Linux内核学习笔记-1.简介和入门

    原创文章,转载请注明:Linux内核学习笔记-1.简介和入门 By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...

  5. Akka 简介与入门

    Akka 简介与入门 http://www.thinksaas.cn/group/topic/344095/ 参考官网  http://akka.io/ 开源代码  https://github.co ...

  6. 【转】Docker简介与入门

    转自:https://segmentfault.com/a/1190000000448808 Docker是个新生的事物,概念类似虚拟化.网上关于Docker入门的东西已经很多了.不过本文探讨了Doc ...

  7. Quartz入门例子简介 从入门到菜鸟(一)

    转: Quartz入门例子简介 从入门到菜鸟(一) 2016年11月19日 22:58:24 爱种鱼的猫 阅读数:4039   刚接触quartz这个词并不是在学习过程中...而是WOW里面的界面插件 ...

  8. Lombok简介及入门使用 (转载)

    Lombok简介及入门使用 lombok既是一个IDE插件,也是一个项目要依赖的jar包. Intellij idea开发的话需要安装Lombok plugin,同时设置 Setting -> ...

  9. Shiro简介、入门案例、web容器的集成

    目的: shiro简介 Shiro入门案例 Shiro与web容器的集成 shiro简介(中文官网:https://www.w3cschool.cn/shiro/andc1if0.html) 1.什么 ...

  10. Python【第一章】:简介和入门

    ython简介 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC 语言的一种继承.之 ...

随机推荐

  1. CompletableFuture--给future调用增加回调或聚合操作

    CompletableFuture--增大内存节省时间.整合多个future调用,来减少时间 例如:第一个future 返回时1s,第二个返回时2s,第三个返回是3s   CompletableFut ...

  2. [thinkphp] 启用__PUBLIC__

    我真是受够了,,, 为了解决__PUBLIC__不能用的问题 我折腾了好几天了,然后终于被我找到了原因 解决过程 首先必须贴出来帮助我的人 https://my.oschina.net/u/12630 ...

  3. Flink架构(三)- 事件-时间(Event-Time)处理

    3. 事件-时间(Event-Time)处理 在“时间语义”中,我们强调了在流处理应用中时间语义的重要性,并解释了处理时间与事件时间的不同点.处理时间较好理解,因为它基于本地机器的时间,它产生的是有点 ...

  4. 4.用springboot写的第一个程序--helloworld

    这是我自己在controller层建的hello类 运行,选画方框的那个.我查了一晚上,可算知道为啥运行不了了. 然后再浏览器输入网址就ok了 为了大力!好好学习!

  5. windows 下安装memcache拓展

    Windows下安装memcached (linux 接下来会继续 学习) 以管理员身份进入CMD 模式,具体方法:C:/windows/system32 管理员身份打开cmd.exe memcach ...

  6. python记之Hello world!

    ________________________________该动手实践了. 数和表达式 交互式Python解释器可用作功能强大的计算器. 除法运算的结果为小数,即浮点数(float或floatin ...

  7. 洛谷 P1659 [国家集训队]拉拉队排练(Manacher)

    题目链接:https://www.luogu.com.cn/problem/P1659 思路: 首先跑一遍Manacher,用$cnt_i$记录长为$i$的回文串有多少个. 所记录的$cnt$并不是最 ...

  8. kuangbin专题 专题九 连通图 Critical Links UVA - 796

    题目链接:https://vjudge.net/problem/UVA-796 题目:裸的求桥,按第一个元素升序输出即可. #include <iostream> #include < ...

  9. Lenet 神经网络-实现篇(1)

    Lenet 神经网络结构为: ①输入为 32*32*1 的图片大小,为单通道的输入: ②进行卷积,卷积核大小为 5*5*1,个数为 6,步长为 1,非全零填充模式: ③将卷积结果通过非线性激活函数: ...

  10. oracle11g UNDO使用率高,且unexpire过高

    1.查看使用率: col USED_PER for a60 SELECT A.TABLESPACE_NAME AS TABLESPACE_NAME, ,) AS TOTAL_GB, ,) AS FRE ...