爬虫之Splash
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的更多相关文章
- python爬虫之Splash使用初体验
Splash是什么: Splash是一个Javascript渲染服务.它是一个实现了HTTP API的轻量级浏览器,Splash是用Python实现的,同时使用Twisted和QT.Twisted(Q ...
- Python爱好者社区历史文章列表(每周append更新一次)
2月22日更新: 0.Python从零开始系列连载: Python从零开始系列连载(1)——安装环境 Python从零开始系列连载(2)——jupyter的常用操作 Python从零开始系列连载( ...
- scrapy 动态网页处理——爬取鼠绘海贼王最新漫画
简介 scrapy是基于python的爬虫框架,易于学习与使用.本篇文章主要介绍如何使用scrapy爬取鼠绘漫画网海贼王最新一集的漫画. 源码参见:https://github.com/liudaol ...
- Scrapy爬虫框架(实战篇)【Scrapy框架对接Splash抓取javaScript动态渲染页面】
(1).前言 动态页面:HTML文档中的部分是由客户端运行JS脚本生成的,即服务器生成部分HTML文档内容,其余的再由客户端生成 静态页面:整个HTML文档是在服务器端生成的,即服务器生成好了,再发送 ...
- 小白学 Python 爬虫(41):爬虫框架 Scrapy 入门基础(八)对接 Splash 实战
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- 爬虫,工具 - Splash
What is it? Splash is a javascript rendering service. It's a lightweight web browser with an HTTP AP ...
- 小白学爬虫-批量部署Splash负载集群
整体目录如下: study@study:~/文档/ansible-examples$ tree Splash_Load_balancing_cluster Splash_Load_balancing_ ...
- 爬虫动态渲染页面爬取之Splash的介绍和使用
Splash是一个JavaScript渲染服务,是一个带有HTTP API的轻量级浏览器,同时它对接了Python中的Twisted和QT库.利用它,我们同样可以实现动态渲染页面的抓取. 1. 功能介 ...
- python爬虫从入门到放弃(二)之爬虫的原理
在上文中我们说了:爬虫就是请求网站并提取数据的自动化程序.其中请求,提取,自动化是爬虫的关键!下面我们分析爬虫的基本流程 爬虫的基本流程 发起请求通过HTTP库向目标站点发起请求,也就是发送一个Req ...
随机推荐
- Linux基础入门-环境变量与文件查找
一.环境变量: Shell中的变量也有不同的数据类型,不用专门指定类型名,可以参与运算,有作用域限制. declare tmp 创建一个变量 可以不用专门声明,可以即用即创建 tmp=shiyanlo ...
- 斐讯N1折腾记
斐讯N1折腾记:运行 Linux 及优化 2018-06-23 37条评论 4,445次阅读 11人点赞 最后更新时间:2019年03月10日 咳咳咳,上篇教程教大家给斐讯 N1 降级并且刷了 ...
- tensorflow报cudnn错误
E tensorflow/stream_executor/cuda/cuda_dnn.cc:363] Loaded runtime CuDNN library: 7.0.5 but source wa ...
- Difference Between Git and SVN
From: http://www.differencebetween.net/technology/software-technology/difference-between-git-and-svn ...
- 前端-JavaScript1-8——JavaScript之作业练习
1.表示气温有两种方法:摄氏度和华氏度.两者的关系是: 编写程序,让用户输入摄氏度,弹出对应的华氏温度. //第一步,让用户输入数字 var sheshidu = parseFloat(prompt( ...
- ABBYY FineReader 14OCR解锁
ABBYY FineReader 14是2017年新推的文字处理编辑软件,能够将图像扫描转换成文档处理.不论是在使用群体方面还是功能特性方面都是极好的. •确保扫描仪正确地连接到电脑,并将其打开.查阅 ...
- 激活WINDOWS SERVER 2019
Windows Server 2019 Datacenter WMDGN-G9PQG-XVVXX-R3X43-63DFGWindows Server 2019 Standard N69G4-B89J2 ...
- python之路——20
学习内容 1.序列化——数据类型转向字符串数据类型 反序列化——字符串转向数据类型2.序列化模块 json模块 通用序列化格式 弊端:只有少部分数据类型可通过json转化 pickle模块 所有的py ...
- 序列化模块_pickle
序列化: 把不能够直接存储的数据变成字节流(bytes)保存在文件, 进行持久化存储 反序列化: 任何数据都可以转成字节流(bytes)进行存储: 1. dumps 把任意对象序列化 li = [1, ...
- Resharper快捷键汇总
编辑Ctrl + Space 代码完成 Ctrl + Shift + Space代码完成Ctrl + Alt + Space代码完成Ctrl + P 显示参数信息Alt + Insert 生成构造函数 ...