爬虫之Splash对象方法(二)

一 autoload()

1 点睛

此方法可以设置每个页面访问时自动加载的对象,使用方法如下:

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

参数说明如下。

  • source_or_url:JavaScript代码或者JavaScript库链接。
  • source:JavaScript代码。
  • url:JavaScript库链接

但是此方法只负责加载JavaScript代码或库,不执行任何操作。如果要执行操作,可以调用evaljs()或runjs()方法。

2 实例1

2.1 代码

function main(splash, args)
  splash:autoload([[
    function get_document_title(){
      return document.title;
    }
  ]])
  splash:go("https://www.baidu.com")
  return splash:evaljs("get_document_title()")
end

2.2 效果

Splash Response: "百度一下,你就知道"

2.3 说明

这里我们调用autoload()方法声明了一个JavaScript方法,然后通过evaljs()方法来执行此JavaScript方法。

3 实例2

3.1 代码

function main(splash, args)
  assert(splash:autoload("https://code.jquery.com/jquery-2.1.3.min.js"))
  assert(splash:go("https://www.taobao.com"))
  local version = splash:evaljs("$.fn.jquery")
  return 'JQuery version: ' .. version
end

3.2 效果

Splash Response: "JQuery version: 2.1.3"

二 call_later()

1 点睛

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

2 代码

function main(splash, args)
  local snapshots = {}
  local timer = splash:call_later(function()
    snapshots["a"] = splash:png()
    splash:wait(1.0)
    snapshots["b"] = splash:png()
  end, 0.2)
  splash:go("https://www.taobao.com")
  splash:wait(3.0)
  return snapshots
end

3 效果

爬虫之Splash对象方法(二)

4 说明

这里我们设置了一个定时任务,0.2秒的时候获取网页截图,然后等待1秒,1.2秒时再次获取网页截图,访问的页面是淘宝,最后将截图结果返回。

三 http_get()

1 点睛

此方法可以模拟发送HTTP的GET请求,使用方法如下:

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

参数说明如下。

  • url:请求URL。

  • headers:可选参数,默认为空,请求头。

  • follow_redirects:可选参数,表示是否启动自动重定向,默认为true。

2 代码 

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,
    status=response.status
    }
end

3 结果

爬虫之Splash对象方法(二)

四 http_post()

1 点睛

和http_get()方法类似,此方法用来模拟发送POST请求,不过多了一个参数body,使用方法如下:

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

参数说明如下。

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

2 代码

function main(splash, args)
  local treat = require("treat")
  local json = require("json")
  local response = splash:http_post{"http://httpbin.org/post",    
      body=json.encode({name="Germey"}),
      headers={["content-type"]="application/json"}
    }
    return {
    html=treat.as_string(response.body),
    url=response.url,
    status=response.status
    }
end

3 效果

爬虫之Splash对象方法(二)