爬虫之Splash对象属性

9 篇文章 0 订阅
2 篇文章 0 订阅

一 点睛

main()方法的第一个参数是splash,这个对象非常重要,它类似于Selenium中的WebDriver对象,我们可以调用它的一些属性和方法来控制加载过程。

二 agrs

1 点睛

该属性可以获取加载时配置的参数,比如URL,如果为GET请求,它还可以获取GET请求参数;如果为POST请求,它可以获取表单提交的数据。Splash也支持使用第二个参数直接作为args。

2 代码

function main(splash, args)
    local url = args.url
    return {url=url}
end

或者

function main(splash, args)
    local url = splash.args.url
    return {url=url}
end

3 结果

三 js_enabled

1 点睛

这个属性是Splash的JavaScript执行开关,可以将其配置为true或false来控制是否执行JavaScript代码,默认为true。例如,这里禁止执行JavaScript代码如下。

2 代码

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

3 结果

{
    "error": 400,
    "description": "Error happened while executing Lua script",
    "info": {
        "error": "unknown JS error: None",
        "message": "[string \"function main(splash, args)\r...\"]:4: unknown JS error: None",
        "source": "[string \"function main(splash, args)\r...\"]",
        "js_error_message": null,
        "splash_method": "evaljs",
        "type": "JS_ERROR",
        "line_number": 4
    },
    "type": "ScriptError"
}

4 说明

调用了evaljs()方法执行JavaScript代码,此时运行结果就会抛出异常。

不过一般来说,不用设置此属性,默认开启即可。

四 resource_timeout

1 点睛

此属性可以设置加载的超时时间,单位是秒。如果设置为0或nil(类似Python中的None),代表不检测超时。

2 代码

function main(splash)
    splash.resource_timeout = 0.1
    assert(splash:go('https://www.taobao.com'))
    return splash:png()
end

3 结果

{
    "error": 400,
    "description": "Error happened while executing Lua script",
    "info": {
        "error": "network5",
        "message": "Lua error: [string \"function main(splash)\r...\"]:3: network5",
        "source": "[string \"function main(splash)\r...\"]",
        "line_number": 3,
        "type": "LUA_ERROR"
    },
    "type": "ScriptError"
}

4 说明

这里将超时时间设置为0.1秒。如果在0.1秒之内没有得到响应,就会抛出异常。此属性适合在网页加载速度较慢的情况下设置。如果超过了某个时间无响应,则直接抛出异常并忽略即可。

五 images_enabled

1 点睛

此属性可以设置图片是否加载,默认情况下是加载的。禁用该属性后,可以节省网络流量并提高网页加载速度。但是需要注意的是,禁用图片加载可能会影响JavaScript渲染。因为禁用图片之后,它的外层DOM节点的高度会受影响,进而影响DOM节点的位置。因此,如果JavaScript对图片节点有操作的话,其执行就会受到影响。

另外值得注意的是,Splash使用了缓存。如果一开始加载出来了网页图片,然后禁用了图片加载,再重新加载页面,之前加载好的图片可能还会显示出来,这时直接重启Splash即可。

2 代码

function main(splash, args)
  splash.images_enabled = false
  assert(splash:go('https://www.jd.com'))
  return {png=splash:png()}
end

3 说明

这样返回的页面截图就不会带有任何图片,加载速度也会快很多。

4 结果

六 plugins_enabled

1 点睛

此属性可以控制浏览器插件(如Flash插件)是否开启。默认情况下,此属性是false,表示不开启。可以使用如下代码控制其开启和关闭。

2 示例

splash.plugins_enabled = true/false

七 scroll_position

1 点睛

通过设置此属性,我们可以控制页面上下或左右滚动。这是一个比较常用的属性。

2 代码

function main(splash, args)
  assert(splash:go('https://www.taobao.com'))
  splash.scroll_position = {y=400}
  return {png=splash:png()}
end

3 结果

4 说明

如果要让页面左右滚动,可以传入x参数,代码如下:

splash.scroll_position = {x=100, y=200}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值