基于VBA实现的2种爬取⽹页的⽅法-细节解释
想不到VBA也可以爬取⽹页,说实在话,我也不知道。今天我结合搜索的⼀些资料和探索,对VBA爬取⽹页的2种实现⽅式做⼀个全⽅位和细节解释,相信看完这篇⽂章的⼩伙伴会对VBA爬取⽹页有⼀个了解和认知,⽽且我觉得已经够⽤了,因为Python在爬取⽹页⽅⾯完胜VBA,甚⾄其他编程语⾔,所以如果真想爬取⽹页,还是⽤Python吧。
第⼀种⽅法使⽤Webbrowser控件
相当于在Office⾥打开⼀个看得见的IE。优点是实现简单,易于调试,整个抓取过程直观可视,易于解决动态⽹页、跨域登录等棘⼿问题。结合excel爬取⽹页表格内容超级好⽤。缺点是不灵活,有些⽹页处理不了,同时如果内容较多,速度很慢。最⼤的缺点就是需要IE浏览器。
⾸先在excel新建⼀个Active X控件,然后基于控件编写VBA代码。
1Private Sub CommandButton1_Click()
2Dim tb, H%, j%
如何做网页3
4On Error Resume Next
5With CreateObject("internetexplorer.application")
6 .Visible = True
7 .Navigate "www.usd-cny/jiaotong.htm"
8 Do Until .ReadyState = 4
9 DoEvents
10 Loop
11
12 Set tb = .document.All.tags("table")(0).Rows
13
14 For H = 0 To tb.Length - 1 'row
15 For j = 0 To tb(H).Cells.Length - 1 'cols
16 Cells(H + 1, j + 1) = tb(H).Cells(j).innerText
17 Next j
18 Next H
19 End With
20End Sub
解释⼀下"Set tb = .document.All.tags("table")(0).Rows",获取所有table元素,同时括号的0代表数组元素第0个,后边的内容其实是对数组元素的处理。
第⼆种⽅法是使⽤XMLhttp对象
优点是速度快,灵活,可以实现GET、POST、Header、Cookie等诸多细节。缺点是⽐Webbrowser⿇烦⼀点,调试不直观。
查看⽹页源代码,抓取的是下⾯的⽂本
1Sub 抓取当天天⽓()
2
3'创建对象
4
5Dim xmlHttp As Object
6
7Set xmlHttp = CreateObject("MSXML2.XMLHTTP")
8
9'发送请求
10
11xmlHttp.Open "GET", "www.weaoo/suzhou-taicangshi-795.html", False
12
13xmlHttp.send
14
15'等待响应
16
17Do While xmlHttp.ReadyState <> 4
18
19DoEvents
20
21Loop
22
23'得到请求数据
24
25Dim Myhtml As String
26
27Myhtml = sponseText
28
29Dim weather As String
30
31weather = Split(Split(Myhtml, "<span class=""text ml2"">")(1), "<br/>")(0)
32
33Rem Range("G2") = "天⽓:" & weather
34
35MsgBox ("今⽇天⽓更新已完成,今⽇天⽓为:" & weather)
36
37End 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爬取⽹页,建议⼩伙伴们仅限了解,不需要过多深⼊浪费时间学习,真⼼觉得⽤处不⼤。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论