vba xmlhttp 抓取网页(excel爬取网页的2种实现方式做一个全方位和细节解释)

优采云 发布时间: 2022-03-30 21:03

  vba 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爬取网页,建议朋友只懂,不需要浪费太多时间去学习,真心觉得用处不大。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线