【发布时间】:2015-09-16 19:33:02
【问题描述】:
Sub DownloadFile()
Dim myURL As String
myURL = "http://data.bls.gov/timeseries/LNS14000000"
Dim WinHttpReq As Object
Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
WinHttpReq.Open "GET", myURL, False, "username", "password"
WinHttpReq.send
myURL = WinHttpReq.responseBody
If WinHttpReq.Status = 200 Then
Set oStream = CreateObject("ADODB.Stream")
oStream.Open
oStream.Type = 1
oStream.Write WinHttpReq.responseBody
oStream.SaveToFile "C:\Downloads\abc.xlsx", 2
oStream.Close
End If
End Sub
我正在尝试使用 VBA 下载数据,发现此代码运行良好。我试图从中下载数据的网页 URL 是我在代码中使用的那个。请花点时间打开网页,因为我尝试下载的 Excel 文件链接在图像中,因此我无法找到从该图像下载文件的 URL。请指教。谢谢
【问题讨论】:
-
IMO 您应该使用 POST 请求,而不是 GET 在您的情况下。打开页面,例如在 Chrome 开发人员工具中(按 F12),在 Elements 选项卡上,找到表单
excel,删除target="_blank"并单击文件图标,下载文件后,转到 Network 选项卡,您会看到出现 @987654329 @POST 请求。考虑example of retrieving csv data via XHR。 -
@omegastripes 我尝试将 URL 输入为“data.bls.gov/pdq/SurveyOutputServlet”并按照您的建议使用 POST,但随后我收到错误消息,指出文件扩展名无效,并且我将网页内容输入excel表而不是数据。如果可以的话,请发表评论。感谢您的帮助。
-
看看my screenshot,有一堆典型的 POST XHR 表单数据参数。我将其中一些与页面选项链接起来只是为了展示它们的共同目的。因此,您必须通过请求发送所有这些参数。按查看源代码 (
output_type=default&years_option=specific_years&from_year=2005&...),您将了解如何创建要发送的字符串。通过上面的链接查看我的示例。
标签: vba excel web-scraping automation