【发布时间】:2023-03-30 10:28:01
【问题描述】:
我正在尝试从 wunderground 中提取历史天气数据 - 最初我尝试使用标准 HTML 元素等从主网页上抓取 Web 数据。但是后来我发现如果您添加“?format = 1”到 URL,浏览器将或多或少显示一个 csv,它更容易解析成数据表......
但是,我仍在使用 IE 浏览器,如果您要提取大量数据,这可能会很慢,因此我开始研究使用 XMLHTTP 对象来帮助更快地提取数据,这就是我遇到问题的地方-正如我提到的,在 URL 的末尾添加“?format=1”会返回一个漂亮的 csv,但是当我使用 XMLHTTP 时,它会提取原始页面的 HTML 而不是 CSV!
在我看来,当 XMLHTTP 发送它的请求时,如果你愿意的话,响应会从“父”站点返回,而不是我指定的 csv……我注意到它从结束的 URL 中提取 HTML在 .html 中,就像它在 .html 处截断一样,这就是为什么响应来自 .html 页面而不是 CSV 页面的原因。所以我尝试查看 URL 协议,看看是否有办法强制 XMLHTTP 请求csv URL,但我离我的元素很远,找不到任何东西..
下面的代码-感谢您能给我的任何帮助:
Public Sub downloadWebDataToCSV(URL As String)
Dim ADOStream As ADODB.Stream
Dim XMLHTTP As MSXML2.XMLHTTP60
Set XMLHTTP = New MSXML2.XMLHTTP60
XMLHTTP.Open "GET", URL, False
XMLHTTP.send
If XMLHTTP.Status = 200 Then
Set ADOStream = New ADODB.Stream
With ADOStream
.Open
.Type = adTypeBinary
.Write XMLHTTP.responseBody
.SaveToFile "C:\datafile.csv", 2
.Close
End With
End If
End Sub
如果有帮助,这里还有父 URL 和 csv URL -
主页:https://www.wunderground.com/history/airport/KDAL/2003/10/15/DailyHistory.html CSV: https://www.wunderground.com/history/airport/KDAL/2003/10/15/DailyHistory.html?format=1
提前致谢, 丝绸代码
【问题讨论】:
标签: html vba web-scraping xmlhttprequest wunderground