vba xmlhttp 抓取网页(excel爬取网页的2种实现方式做一个全方位和细节解释)
优采云 发布时间: 2022-03-30 21:03vba xmlhttp 抓取网页(excel爬取网页的2种实现方式做一个全方位和细节解释)
我从没想过VBA也可以抓取网页。老实说,我也不知道。今天,我将根据搜索的一些资料和探索,对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",获取所有表格元素,括号中的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, "")(1), "
")(0)
Rem Range("G2") = "天气:" & weather
MsgBox ("今日天气更新已完成,今日天气为:" & weather)
End Sub
重点讲解split的用法,weather = Split(Split(Myhtml, "")(1), "
")(0)
VBA中的拆分用法如下:
描述
返回一个从零开始的一维数组,其中收录指定数量的子字符串
语法
拆分(表达式[,分隔符[,限制[,比较]]])
参数说明
在这段代码段的使用中,经过验证,目前只能实现两个拆分应用,只能提取两个区间字符串的内容。进行字符串组合的方式。
总结
对于VBA爬取网页,建议朋友只懂,不需要浪费太多时间去学习,真心觉得用处不大。