爬虫之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 效果

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 结果

四 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 效果

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python爬虫是一种用于自动化获取网数据的技术,而Splash是一个基于Webkit的JavaScript渲染服务,可以用于处理动态网页。结合Python爬虫Splash可以实现对动态数据的爬取。 使用Python爬虫Splash进行动态数据爬取的步骤如下: 1. 安装Splash:首先需要安装并运行Splash服务,可以通过Docker来安装和运行Splash。 2. 安装必要的库:使用Python的requests库发送请求,使用splashapi库与Splash进行交互。 3. 编写爬虫代码:在Python中编写爬虫代码,使用requests库发送请求到Splash服务,并通过splashapi库解析返回的结果。 4. 解析动态数据:根据网页的结构和需要获取的数据,使用相应的解析方法提取出所需的数据。 以下是一个简单的示例代码,演示如何使用Python爬虫Splash获取动态数据: ```python import requests from splashapi import Splash # 创建Splash对象 splash = Splash() # 设置请求参数 url = 'http://example.com' # 目标网页的URL script = """ function main(splash) splash:go(splash.args.url) splash:wait(5) # 等待页面加载完成 return splash:html() # 返回页面的HTML内容 end """ # 发送请求并获取结果 response = splash.run('execute', {'lua_source': script, 'url': url}) # 解析结果 html = response['result']['html'] # 在这里可以使用其他库(如BeautifulSoup)对HTML进行解析和提取数据 # 打印结果 print(html) # 关闭Splash服务 splash.close() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值