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

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

第一种方法使用Webbrowser控件

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

基于VBA实现的2种爬取网页的方法-细节解释_第1张图片

 首先在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麻烦一点,调试不直观。

基于VBA实现的2种爬取网页的方法-细节解释_第2张图片

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

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, "")(1), "
")(0) Rem Range("G2") = "天气:" & weather MsgBox ("今日天气更新已完成,今日天气为:" & weather) End Sub

重点解释一下split用法,weather = Split(Split(Myhtml, "")(1), "
")(0)

在VBA中split用法如下:

描述

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

语法

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

参数说明

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

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

总结

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

你可能感兴趣的:(VBA,爬虫,windows,个人开发)