python 网页重定向_Python网络爬虫之Splash 的使用【第二十七节】

本文介绍了如何使用Python结合Splash处理网页重定向问题。内容涵盖Splash的安装、对象属性和方法,如go()、wait()、jsfunc()、evaljs()、runjs()等,以及如何与Python进行结合,实现render.html和render.png等功能。
摘要由CSDN通过智能技术生成

推荐相应的视频教程:

【尚学堂教育】13天搞定Python分布爬虫_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com
5a19945561db1efeb65470f424d7e2f4.png

1. Splash介绍

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

2. 安装

2.1 安装docker

2.2 拉取镜像

docker pull scrapinghub/splash

2.3 用docker运行scrapinghub/splash

docker run -p 8050:8050 scrapinghub/splash

2.4 查看效果

我们在8050端口上运行了Splash服务,打开 http:// 192.168.99.100:8050/ 即可看到其Web页面

913fcaa89fce0525c18574127f7d31c7.png

3 Splash对象属性

上图中main()方法的第一个参数是splash,这个对象非常重要,它类似于Selenium中的WebDriver对象

3.1 images_enabled

设置图片是否加载,默认情况下是加载的。禁用该属性后,可以节省网络流量并提高网页加载速度
注意的是,禁用图片加载可能会影响JavaScript渲染。因为禁用图片之后,它的外层DOM节点的高度会受影响,进而影响DOM节点的位置
因此,如果JavaScript对图片节点有操作的话,其执行就会受到影响
function main(splash, args)
  splash.images_enabled = false
  splash:go('https://www.baidu.com')
  return {html=splash:html()}
end

3.2 plugins_enabled

可以控制浏览器插件(如Flash插件)是否开启
默认情况下,此属性是false,表示不开启
splash.plugins_enabled = true/false

3.3 scroll_position

控制页面上下或左右滚动
splash.scroll_position = {x=100, y=200}

4. Splash对象的方法

4.1 go()

该方法用来请求某个链接,而且它可以模拟GET和POST请求,同时支持传入请求头、表单等数据
ok, reason = splash:go{url, baseurl=nil, headers=nil, http_method="GET", body=nil, formdata=nil}
返回结果是结果ok和原因reason
如果ok为空,代表网页加载出现了错误,此时reason变量中包含了错误的原因

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

splash:go{"http://www.sxt.cn", http_method="POST", body="name=17703181473"}

4.2 wait()

控制页面的等待时间
splash:wait{time, cancel_on_redirect=false, cancel_on_error=true}

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

function main(splash)
    splash:go("https://www.taobao.com")
    splash:wait(2)
    return {html=splash:html()}
end

4.3 jsfunc()

直接调用JavaScript定义的方法,但是所调用的方法需要用双中括号包围,这相当于实现了JavaScript方法到Lua脚本的转换
function main(splash, args)
  splash:go("http://www.sxt.cn")
  local scroll_to = splash:jsfunc("window.scrollTo")
  scroll_to(0, 300)
  return {png=splash:png()}
end

4.4 evaljs()与 runjs()

  • evaljs() 以执行JavaScript代码并返回最后一条JavaScript语句的返回结果
  • runjs() 以执行JavaScript代码,它与evaljs()的功能类似,但是更偏向于执行某些动作或声明某些方法
function main(splash, args)
  splash:go("https://www.baidu.com")
  splash:runjs("foo = function() { return 'sxt' }")
  local result = splash:evaljs("foo()")
  return result
end

4.5 html()

获取网页的源代码
function main(splash, args)
  splash:go("https://www.bjsxt.com")
  return splash:html()
end

4.6 png()

获取PNG格式的网页截图
function main(splash, args)
  splash:go("https://www.bjsxt.com")
  return splash:png()
end

4.7 har()

获取页面加载过程描述

de28462b72dc8f4eea8bcd8cedd222c4.png

4.8 url()

获取当前正在访问的URL

162b4faeef09c2cef4b4b4a1e4371aad.png

4.9 get_cookies()

获取当前页面的Cookies

e6a35b7350a6b9fd3406db1294ee4cbc.png

4.10 add_cookie()

当前页面添加Cookie

d8b41aca2ef6c364838631a889aaf1c4.png

4.11 clear_cookies()

可以清除所有的Cookies

cef7cf4fbe154ec92b9c56a0906a4dce.png

4.12 set_user_agent()

设置浏览器的User-Agent

5d33b2849f27984f562d35aaf81bec3d.png

4.13 set_custom_headers()

设置请求头

16df4a77e55caa365f7b4fa9fc22690e.png

4.14 select()

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

ca052d6286966a57de59c09ccd255a62.png

4.15 send_text()

填写文本

02b2f27aeaaf4bca41decb62316dafca.png

4.16 mouse_click()

模拟鼠标点击操作

7c78935b906379ef4c70917365eef24b.png

5 Splash与Python结合

5.1 render.html

此接口用于获取JavaScript渲染的页面的HTML代码,接口地址就是Splash的运行地址加此接口名称,例如 http://192.168.99.100:8050/render.html

404f73b1d8a719e727a59a380f538399.png

5.2 render.png

此接口可以获取网页截图

f43b5c70113604de974c5a4cab3a3b0c.png

5.3 execute

最为强大的接口。前面说了很多Splash Lua脚本的操作,用此接口便可实现与Lua脚本的对接

444a18d4a8eeda4a4d26a7602432c842.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值