Splash是一个JavaScript渲染服务,是一个带有HTTP API的轻量级浏览器,同时它对接了Python中的Twisted和QT库。利用它,我们可以实现动态渲染页面的抓取。
主要说一下Splash的简单属性和方法。
获取加载时配置的参数
是Splash的JavaScript执行开关,默认True开启。
控制浏览器插件(如Flash插件)是否开启,默认False不开启。
设置图片是否价值,默认是加载。
设置加载的超时时间,单位秒,设置为0,代表不检测。
该属性适合在网页加载速度较慢的情况下设置,超过某个时间就直接抛出异常。
控制页面的上下或左右滚动。
function main(splash, args)
assert(splash:go(args.url))
splash.scroll_position = {x=100,y=400}
return {
png = splash:png(),
}
end
请求某个链接,模拟Get和Post请求,支持传入请求头、表单等数据
ok,reason=splash.go{url,baseurl=nil,headers=nil,http_method="GET",body=nil,formdata=nil}
Content-Type
为application/json
Content-Type
为application/x-www-form-urlencoded
方法返回的ok
是结果,reason
是愿意,如果ok
为空代表网页加载出现错误,此时reason
变量中包含错误的原因,否则证明页面加载成功。
function main(splash, args)
local ok, reason = splash:go{"http://httpbin.org/post", http_method="POST", body="name=Hubo"}
if ok then
return splash:html()
end
end
控制页面的等待时间
ok, reason = splash:wait{time,cancel_on_redirect=false,cancel_on_error=true}
function main(splash, args)
assert(splash:go("http://taobao.com"))
splash:wait(5)
return {
html = splash:html()
}
end
执行JavaScript
代码返回最后一条JS
语句返回的结果。
local title = splash:evaljs("document:title")
模拟发送HTTP的GET请求
response = splash:http_get{url, headers=nil, follow_redirects=true}
function main(splash, args)
local treat = require("treat")
local response = splash:http_get("http://httpbin.org/get")
return {
html = treat.as_string(response.body),
url = response.url,
statud = response.status
}
end
模拟发送POST请求,相对GET请求多了一个body/
response = splash:http_post{url, headers=nil, follow_redirects=true, body=nil}
设置页面内容
function main(splash)
assert(splash:set_content("Hello
"))
return {
splash:png()
}
end
获取网页的源代码
function main(splash)
splash:go("https://httpbin.org/get")
return {
splash:html()
}
end
获取PNG格式的网页截图
function main(splash)
splash:go("https://httpbin.org/get")
return {
splash:png()
}
end
获取JPEG格式的网页截图
获取页面的加载过程
function main(splash)
splash:go("https://www.baidu.com")
return {
splash:har()
}
end
获取当前正在访问的url
获取当前页面的Cookies
function main(splash)
splash:go("https://www.baidu.com")
return {
splash:get_cookies()
}
end
为当前页面添加Cookies
cookies = splash:add_cookies{name,value,path=nil,domain=nil}
清除所有的Cookies
获取当前浏览器页面大小
设置当前浏览器页面大小
设置浏览器全屏显示
设置浏览器的User-Agent
function main(splash)
splash:set_user_agent('Splash')
splash:go("http://httpbin.org/get")
return {
splash:html()
}
end
设置请求头。
function main(splash)
splash:set_custom_headers({
["User-Agent"] = "Splash",
["Site"] = "splash"
})
splash:go("http://httpbin.org/get")
return {
splash:html()
}
end