【发布时间】:2020-01-26 12:42:15
【问题描述】:
我正在尝试将此宏从 ie.application 重写为 VBA 中的 http 请求。 宏导航到一个 URL,获取 html,然后解析和抓取所需的数据。
它适用于一个请求,但是当我尝试使用包含数千个 URL 的 FOR 循环执行此操作时,Excel 崩溃了。
我认为我应该在进入下一个循环之前以某种方式“关闭”连接,但我没有找到解决方案。
这是我的代码:
Sub GetQuotes()
Dim xmlhttp As New MSXML2.XMLHTTP60, myurl As String
Dim html As New HTMLDocument
For r = 1 To 10
'*****GO TO PRODUCT PAGE*****
path= ThisWorkbook.Worksheets("Sheet1").Cells(r, 1).Value
myurl = "https://some_domain.com" + path
xmlhttp.Open "GET", myurl, False
xmlhttp.send
html.body.innerHTML = xmlhttp.responseText
'*****GET PRICE*****
If Not html.getElementById("some_id") Is Nothing Then
price = html.getElementById("some_id").innerHTML
ThisWorkbook.Worksheets("sheet1").Cells(r, 2).Value = price
Else
price = "empty"
ThisWorkbook.Worksheets("sheet1").Cells(r, 2).Value = price
End If
Next r
End Sub
XML 和 HTML 引用处于活动状态
【问题讨论】:
-
在
Next r之前添加DoEvents。现在检查? -
找出崩溃的临界点在哪里,或者分批处理(在这一点之下),或者尝试在某个步骤添加等待(比如每 500 个或其他)....
标签: excel vba web-scraping xmlhttprequest