基于VBA实现的2种爬取网页的方法-细节解释

想不到VBA也可以爬取网页,说实在话,我也不知道。今天我结合搜索的一些资料和探索,对VBA爬取网页的2种实现方式做一个全方位和细节解释,相信看完这篇文章的小伙伴会对VBA爬取网页有一个了解和认知,而且我觉得已经够用了,因为Python在爬取网页方面完胜VBA,甚至其他编程语言,所以如果真想爬取网页,还是用Python吧。

第一种方法使用Webbrowser控件

相当于在Office里打开一个看得见的IE。优点是实现简单,易于调试,整个抓取过程直观可视,易于解决动态网页、跨域登录等棘手问题。结合excel爬取网页表格内容超级好用。缺点是不灵活,有些网页处理不了,同时如果内容较多,速度很慢。最大的缺点就是需要IE浏览器。

 首先在excel新建一个Active X控件,然后基于控件编写VBA代码。

Private Sub CommandButton1_Click()
Dim tb, H%, j%
 
On Error Resume Next
With CreateObject("internetexplorer.application")
        .Visible = True
        .Navigate "https://www.usd-cny.com/jiaotong.htm"
        Do Until .ReadyState = 4
            DoEvents
        Loop
    
        Set tb = .document.All.tags("table")(0).Rows
       
       For H = 0 To tb.Length - 1 'row
           For j = 0 To tb(H).Cells.Length - 1 'cols
             Cells(H + 1, j + 1) = tb(H).Cells(j).innerText
           Next j
       Next H
    End With
End Sub

解释一下"Set tb = .document.All.tags("table")(0).Rows",获取所有table元素,同时括号的0代表数组元素第0个,后边的内容其实是对数组元素的处理。

第二种方法是使用XMLhttp对象

优点是速度快,灵活,可以实现GET、POST、Header、Cookie等诸多细节。缺点是比Webbrowser麻烦一点,调试不直观。

 查看网页源代码,抓取的是下面的文本

Sub 抓取当天天气()

'创建对象

Dim xmlHttp As Object

Set xmlHttp = CreateObject("MSXML2.XMLHTTP")

'发送请求

xmlHttp.Open "GET", "https://www.weaoo.com/suzhou-taicangshi-795.html", False

xmlHttp.send

'等待响应

Do While xmlHttp.ReadyState <> 4

DoEvents

Loop

'得到请求数据

Dim Myhtml As String

Myhtml = xmlHttp.responseText

Dim weather As String

weather = Split(Split(Myhtml, "<span class=""text ml2"">")(1), "<br/>")(0)

Rem Range("G2") = "天气:" & weather

MsgBox ("今日天气更新已完成,今日天气为:" & weather)

End Sub

重点解释一下split用法,weather = Split(Split(Myhtml, "<span class=""text ml2"">")(1), "<br/>")(0)

在VBA中split用法如下:

描述

返回一个下标从零开始的一维数组,它包含指定数目的子字符串

语法

Split(expression[, delimiter[, limit[, compare]]])

参数说明

  • Expression - 必需的参数。可以包含带分隔符的字符串的字符串表达式。
  • Delimiter - 一个可选参数。该参数用于根据分隔符转换为数组。
  • Count - 一个可选参数。要返回的子字符串的数量,如果指定为-1,则返回所有子字符串。
  • Compare - 一个可选参数。该参数指定要使用哪种比较方法。
    • 0 = vbBinaryCompare - 执行二进制比较
    • 1 = vbTextCompare - 执行文本比较

在此次代码段的用法,经验证,目前只能实现两个split套用,而且只能对两段间隔字符串的内容进行提取,如果要使用多段内容,目前也只能采用提取内容后,再进行字符串组合的方式。

总结

对于VBA爬取网页,建议小伙伴们仅限了解,不需要过多深入浪费时间学习,真心觉得用处不大。

  • 7
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂的豆包

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值