我正试图从wunderground中提取历史天气数据 - 最初我试图使用标准HTML元素等从主网页上删除网页数据。但是后来我发现如果你添加"?格式= 1"对于URL,浏览器将显示或多或少的csv,这更容易解析为数据表......
然而,我仍然使用IE浏览器,如果你需要大量数据,这可能会非常慢,所以我开始考虑使用XMLHTTP
对象来帮助更快地提取数据,这是我遇到的问题。问题 - 我提到添加"?format = 1"到URL的末尾会返回一个漂亮的纤薄csv,但是当我使用XMLHTTP时,它会拉出原始页面的HTML而不是CSV!
在我看来,当XMLHTTP发送请求时,响应是从父母那里回来的。网站,如果你愿意,而不是我指定的csv ...我注意到它从以.html结尾的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
以下是父网址和csv网址,如果有帮助的话 -
主页: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
提前致谢, TheSilkCode
答案 0 :(得分:1)
我认为您需要更改返回内容的编码,然后您可以在稍微清理一下格式后直接写入CSV。要更改格式,您需要设置一些请求标头。见下文。
Public Sub downloadWebDataToCSV()
Dim URL As String: URL = "https://www.wunderground.com/history/airport/KDAL/2003/10/15/DailyHistory.html?format=1"
Dim XMLHTTP As New MSXML2.XMLHTTP60
With XMLHTTP
.Open "GET", URL, False
.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
.setRequestHeader "content-type", "text/html; charset=UTF-8"
.send
End With
If XMLHTTP.Status = 200 Then
Dim fso As Object: Set fso = CreateObject("Scripting.FileSystemObject")
Dim Fileout As Object: Set Fileout = fso.CreateTextFile("C:\users\megatron\desktop\vba.txt")
Dim myText As String: myText = Replace(XMLHTTP.responseText, "<br />", vbCrLf)
Fileout.Write myText
Fileout.Close
End If
End Sub
答案 1 :(得分:0)
您可以通过示例网址通过Weather API获取数据:
http://api.wunderground.com/api/c991975b7f4186c0/history_20031015/q/airport/KDAL.json
如您所见,该网址由三个可变部分组成:API密钥c991975b7f4186c0
,日期20031015
和位置airport/KDAL
。如果你创建XHR,响应将以JSON格式返回。
如何获取API密钥并解析您在this answer中可以看到的JSON响应。
详细了解Weather API。