Splash 是一个JavaScript渲染服务,是一个带有HTTP API 的轻量级浏览器,同时它对接了Python中Twisted和QT库。

1.功能介绍

1)异步方法处理多个网页渲染过程;

2)获取渲染后的页面的源代码或截图;

3)通过关闭图片渲染或者使用Adblock规则来加快页面渲染速度;

4)可执行特定的JavaScript脚本;

5)可通过Lua脚本来控制网页渲染过程;

6)获取渲染的详细过程并通过HAR(HTTP Archive)格式呈现

2.Splash Lua脚本

1)入口及返回值

function main(splash, args)
splash:go("http://www.baidu.com")
splash:wait(0.5)
local title = splash:evaljs("document.title")
return {title=title}
end

基本实例

实例结果返回了网页的标题

2)异步处理

在脚本内调用wait()方法类似Python中的sleep(),其参数为等待的秒数。当Splash执行到此方法时,它会转而去处理其他任务,然后在指定的时间过后再回来继续处理

3.Splash 对象属性

1)args

该属性可以获取加载时配置的参数

2)js_enabled

该属性是Splash的JavaScript执行开关,可以将其配置为true或false来控制是否执行js代码,默认为true

3)resource_timeout

该属性可以设置加载的超时时间,单位是秒

4)images_enabled

该属性可以设置图片是否加载

5)plugins_enabled

该属性可以控制浏览器插件是否开启(如Flash等)

6)scroll_position

该属性可以控制页面上下或左右滚动

4.Splash 对象的方法

1)go()

该方法用来请求某个链接,可以模拟GET和POST请求,同时支持传入请求头、表单等数据

ok,reason = splash:go{url,baseurl=nil,headers=nil,http_method="GET",body=nil,formdata=nil}

url: 请求的URL
baseurl: 可选参数,默认为空,表示资源加载相对路径
headers: 可选参数,默认为空,表示请求头
http_method: 可选参数,默认为GET,同时支持POST
body:可选参数,默认为空,发送POST请求时的表单数据,使用的Content-type为application/json
formdata: 可选参数,默认为空,使用POST请求时的表单数据,使用的Content-type为application/x-www-form-urlencoded

2)wait()

该方法可以控制页面的等待时间

ok, reason = splash:wait{time, cancel_on_redirect=false, cancel_on_error=true}

time:  等待的秒数
cancel_on_redirect: 可选参数,默认为false,如果为true,表示如果发生了重定向就停止等待,并返回重定向结果
cancel_on_error: 可选参数,默认为true,表示如果发生了加载错误,就停止等待

3)jsfunc()

此方法可以直接调用JavaScript定义的方法,但是所调用的方法需要用双括号包围

4)evaljs()

此方法可以执行JavaScript代码并返回最后一条JavaScript语句的返回结果

5)runjs()

此方法可以执行JavaScript代码,和evaljs()功能类似,但是更偏向于执行某些动作或者声明某些方法

6)autoload()

此方法可以设置每个网页访问时自动加载的对象

ok, reason = splash:autoload{source_or_url, source=nil, url=nil}

source_or_url:Javascript代码或者Javascript库链接
source: Javascript代码
url: Javascript库链接

7)call_later()

此方法可以通过设置定时任务和延迟时间来实现任务延时执行,并且可以在执行前通过cancel()方法重新执行定时任务

8)http_get()

此方法可以模拟HTTP的GET请求

response = splash:http_get{url, headers=nil, follow_redirects=true}

url:    请求URL
headers: 可选参数,默认为空,请求头
follow_redirects: 可选参数,表示是否启动自动重定向,默认为true

9)http_post()

此方法可以模拟发送POST请求

response = splash:http_post{url, headers=nil, follow_redirects=true,body=uil}

url:    请求URL
headers: 可选参数,默认为空,请求头
follow_redirects: 可选参数,表示是否启动自动重定向,默认为true
body: 可选参数,即表单数据,默认为空

10)set_content()

此方法用来设置页面的内容

11)html()

此方法用来获取网页的源代码

12)png(),jpeg()

此方法用来获取相应格式的网页截图

13)har()

此方法用来获取页面加载过程描述

14)url()

此方法可以获取当前正在访问的URL

15)get_cookies()

此方法可以获取当前页面的Cookies

16)add_cookie()

此方法可以为当前页面添加Cookie

17)clear_cookies()

此方法可以清除所有的Cookies

18)get_viewport_size()

此方法可以获取当前浏览器页面的大小

19)set_viewport_size()

此方法可以设置当前浏览器页面的大小

20)set_viewport_full()

此方法可以设置当前浏览器全屏显示

21)set_user_agent()

此方法可以设置浏览器的User-Agent

22)set_custom_headers()

此方法可以设置请求头

23)select()

此方法可以选中符合条件的第一个节点,如果有多个节点符合条件,则只会返回一个,其参数是css选择器

24)select_all()

此方法可以选中所有符合条件的节点,参数为css选择器

25)mouse_click()

此方法可以模拟鼠标点击操作,传入的参数为坐标值x和y,也可以选中某个节点,然后调用此方法

5.Splash API调用

1)render.html

此接口用于获取JavaScript渲染的页面的HTML代码,接口地址就是Splash的运行地址加此接口名称

2)render.png  render.jpeg

此接口用于获取网页截图

3)render.har

此接口用于获取页面加载的HAR数据

4)render.json

此接口保欢乐前面接口的所有功能,返回结果是JSON格式

5)execute

此接口是最强大的接口,用此接口可以实现与Lua脚本的对接

爬虫之Splash的更多相关文章

  1. python爬虫之Splash使用初体验

    Splash是什么: Splash是一个Javascript渲染服务.它是一个实现了HTTP API的轻量级浏览器,Splash是用Python实现的,同时使用Twisted和QT.Twisted(Q ...

  2. Python爱好者社区历史文章列表(每周append更新一次)

    2月22日更新:   0.Python从零开始系列连载: Python从零开始系列连载(1)——安装环境 Python从零开始系列连载(2)——jupyter的常用操作 Python从零开始系列连载( ...

  3. scrapy 动态网页处理——爬取鼠绘海贼王最新漫画

    简介 scrapy是基于python的爬虫框架,易于学习与使用.本篇文章主要介绍如何使用scrapy爬取鼠绘漫画网海贼王最新一集的漫画. 源码参见:https://github.com/liudaol ...

  4. Scrapy爬虫框架(实战篇)【Scrapy框架对接Splash抓取javaScript动态渲染页面】

    (1).前言 动态页面:HTML文档中的部分是由客户端运行JS脚本生成的,即服务器生成部分HTML文档内容,其余的再由客户端生成 静态页面:整个HTML文档是在服务器端生成的,即服务器生成好了,再发送 ...

  5. 小白学 Python 爬虫(41):爬虫框架 Scrapy 入门基础(八)对接 Splash 实战

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  6. 爬虫,工具 - Splash

    What is it? Splash is a javascript rendering service. It's a lightweight web browser with an HTTP AP ...

  7. 小白学爬虫-批量部署Splash负载集群

    整体目录如下: study@study:~/文档/ansible-examples$ tree Splash_Load_balancing_cluster Splash_Load_balancing_ ...

  8. 爬虫动态渲染页面爬取之Splash的介绍和使用

    Splash是一个JavaScript渲染服务,是一个带有HTTP API的轻量级浏览器,同时它对接了Python中的Twisted和QT库.利用它,我们同样可以实现动态渲染页面的抓取. 1. 功能介 ...

  9. python爬虫从入门到放弃(二)之爬虫的原理

    在上文中我们说了:爬虫就是请求网站并提取数据的自动化程序.其中请求,提取,自动化是爬虫的关键!下面我们分析爬虫的基本流程 爬虫的基本流程 发起请求通过HTTP库向目标站点发起请求,也就是发送一个Req ...

随机推荐

  1. 【转】META标签指南:哪些meta标签该用哪些不该用?

    以下内容来源:http://lusongsong.com/reed/8766.html META标签是网页代码中HEAD区的一个关键标签,其提供的信息虽然用户不可见,但却是文档的最基本的元信息.说起m ...

  2. 跨域1-CORS跨域

    1.跨域:请求的资源和当前网站的,协议/域名/端口 不一样,会发起跨域HTTP请求 2.为什么会跨域出于安全原因,浏览器限制从脚本内发起的跨源HTTP请求. 例如,XMLHttpRequest和Fet ...

  3. ES - Dynamic templates 动态模板

    1.ES Mapping 在lucene中,索引中每个字段都需要指定很多属性,例如:是否分词.采用哪个分词器.是否存储等. 在ES中,其实索引中每个字段也需要指定这些属性,我们有时候并没有对这些属性进 ...

  4. multipart/form-data和application/x-www-form-urlencoded区别

    FORM元素的enctype属性指定了表单数据向服务器提交时所采用的编码类型.例如: application/x-www-form-urlencoded: 窗体数据被编码为名称/值对.这是标准的编码格 ...

  5. (转)通过注册表修改VC6.0的字体

    出处:http://www.cnblogs.com/PocketZ 在VC6.0下更改字体,我们一般通过菜单-Tools-Options-Format来更改 但在我的win7 64位系统下这一选项下的 ...

  6. ubuntu16.04 install qtcreator

    1. 安装相关软件,搭建环境 sudo apt install qt-creator sudo apt install qt5-default source python35/bin/activate ...

  7. python之路——25

    复习 1.继承 表示什么是什么的关系 1.单继承 1.先抽象,再继承 2.子类没有的名字,调用父类 3.类中使用self,看清楚self指向谁 2.多继承 1.新式类和经典类 1.新式类:广度优先 经 ...

  8. note 5 二分法求平方根,素数,回文数

    +二分法求平方根 x = float(raw_input('Enter the number')) low = 0 high = x guess = (low + high ) / 2 if x &l ...

  9. asp.net mvc5中使用Swagger 自动生成WebApi文档笔记

    Swagger可以自动生成Api说明文档,并内置在线测试,通过NSwagStudio还可以自动生成Api客户端调用代码,以下为具体实现步骤 1.写一个简单的WebApi并加上注释 public cla ...

  10. 02-Tomcat服务器安装

    由于使用的是解压绿色版,所以解压就可以使用,如下图显示 启动成功