Html 使用VBA从网站中刮取值
需要帮助才能从网站上获取一些数据。 作为第一步,我设法访问网站并导入变量,但: 1.我不知道怎么按“兑换货币”按钮 2.然后将“转换金额”和“汇率”转换为excel 任何帮助都将不胜感激Html 使用VBA从网站中刮取值,html,vba,web-scraping,Html,Vba,Web Scraping,需要帮助才能从网站上获取一些数据。 作为第一步,我设法访问网站并导入变量,但: 1.我不知道怎么按“兑换货币”按钮 2.然后将“转换金额”和“汇率”转换为excel 任何帮助都将不胜感激 Sub Test() Dim IE As InternetExplorer Dim Amount As String Dim Source As String Dim Target As String Dim Datestring As String Amount = 10000 Source = "Eu
Sub Test()
Dim IE As InternetExplorer
Dim Amount As String
Dim Source As String
Dim Target As String
Dim Datestring As String
Amount = 10000
Source = "Euro"
Target = "UK pound sterling"
Datestring = "03-08-2018"
'Open Browser and download data
Set IE = New InternetExplorer
With IE
.Visible = True
.Navigate "http://sdw.ecb.europa.eu/curConverter.do?sourceAmount=" & _
Amount & _
"&sourceCurrency=" & _
Source & _
"&targetCurrency=" & _
Target & _
"&inputDate=" & _
Datestring & _
"&submitConvert.x=209&submitConvert.y=10"
submitConvert.Click
While .Busy Or .readyState < 4: DoEvents: Wend
End With
子测试()
Dim IE作为InternetExplorer
将金额变为字符串
将源设置为字符串
将目标变暗为字符串
将日期字符串设置为字符串
金额=10000
来源=“欧元”
Target=“英国镑”
Datestring=“03-08-2018”
'打开浏览器并下载数据
Set IE=新的InternetExplorer
与IE
.Visible=True
.导航“http://sdw.ecb.europa.eu/curConverter.do?sourceAmount=" & _
金额,_
“&sourceCurrency=“&_
来源,_
“&targetCurrency=“&_
目标,_
“&inputDate=“&_
日期字符串&_
“&submitConvert.x=209&submitConvert.y=10”
提交转换。单击
当.Busy或.readyState<4:DoEvents:Wend时
以
端接头
在没有浏览器打开的地方使用XHR更快
Option Explicit
Public Sub GetRates()
Dim sResponse As String, i As Long, html As New HTMLDocument, clipboard As Object
Dim sourceAmount As String, sourceCurrency As String, targetCurrency As String, inputDate As String
sourceAmount = "10000"
sourceCurrency = "EUR"
targetCurrency = "GBP"
inputDate = "03-08-2018"
Dim url As String
url = "http://sdw.ecb.europa.eu//curConverter.do?sourceAmount=" & sourceAmount & "&sourceCurrency=" & sourceCurrency & _
"&targetCurrency=" & targetCurrency & "&inputDate=" & inputDate & "&submitConvert.x=52&submitConvert.y=8"
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", url, False
.send
sResponse = StrConv(.responseBody, vbUnicode)
End With
sResponse = Mid$(sResponse, InStr(1, sResponse, "<!DOCTYPE "))
With html
.body.innerHTML = sResponse
Set clipboard = New MSForms.DataObject
clipboard.SetText .querySelectorAll("table.tableopenpage").item(1).outerHTML
clipboard.PutInClipboard
ActiveSheet.Cells(1, 1).PasteSpecial
End With
End Sub
和比率:
.querySelectorAll("table.tableopenpage").item(1).getElementsbytagname("td")(10).innertext
输出:
.querySelectorAll("table.tableopenpage").item(1).getElementsbytagname("td")(7).innertext
Microsoft Forms Object Library (or add a userform to your project)
Microsoft HTML Object Library
Microsoft Internet Controls
Microsoft HTML Object Library
Microsoft Forms Object Library
参考文献:
.querySelectorAll("table.tableopenpage").item(1).getElementsbytagname("td")(7).innertext
Microsoft Forms Object Library (or add a userform to your project)
Microsoft HTML Object Library
Microsoft Internet Controls
Microsoft HTML Object Library
Microsoft Forms Object Library
Internet Explorer: 由于URL中使用的查询字符串,数据已经存在。不需要点击 只需使用正确的货币缩写
Option Explicit
Public Sub Test()
Dim IE As InternetExplorer, Amount As String, Source As String, Target As String
Dim Datestring As String, hTable As HTMLTable
Amount = 10000
Source = "EUR"
Target = "GBP"
Datestring = "03-08-2018"
Dim url As String
url = "http://sdw.ecb.europa.eu/curConverter.do?sourceAmount=" & _
Amount & _
"&sourceCurrency=" & _
Source & _
"&targetCurrency=" & _
Target & _
"&inputDate=" & _
Datestring & _
"&submitConvert.x=209&submitConvert.y=10"
Set IE = New InternetExplorer
With IE
.Visible = True
.navigate url
While .Busy Or .readyState < 4: DoEvents: Wend
Dim clipboard As Object
Set clipboard = New MSForms.DataObject
clipboard.SetText .document.getElementsByClassName("tableopenpage")(1).outerHTML
clipboard.PutInClipboard
ActiveSheet.Cells(1, 1).PasteSpecial
End With
End Sub
它使用了一个CSS选择器
input[name=submitConvert]
这是说
带有input
标记的元素,其属性name
的值为submitconvert
3) 然后你需要一个
While .Busy Or .readyState < 4: DoEvents: Wend
这将使用标签table
和类tableopenpage
收集所有元素。您需要第二个,在基于0的索引系统中为1
所需参考资料:
.querySelectorAll("table.tableopenpage").item(1).getElementsbytagname("td")(7).innertext
Microsoft Forms Object Library (or add a userform to your project)
Microsoft HTML Object Library
Microsoft Internet Controls
Microsoft HTML Object Library
Microsoft Forms Object Library
其他:
.querySelectorAll("table.tableopenpage").item(1).getElementsbytagname("td")(7).innertext
Microsoft Forms Object Library (or add a userform to your project)
Microsoft HTML Object Library
Microsoft Internet Controls
Microsoft HTML Object Library
Microsoft Forms Object Library
我发现一次抓取表格更简单,但您可以将比率设定为目标,例如,更具体地说,使用CSS选择器:
a[target*=quickview]
请注意,Excel可能会在输出时将日期从dd/mm/yyyy切换到mm/dd/yyyy,因此您需要更正这一点,或者至少要注意这一点。@QHarr有什么想法吗?非常感谢您的快速回放。有没有办法不粘贴所有这些数据,而只获得这两个值:1。8905.00英镑2英镑。1欧元=0.8905英镑我尝试使用您的Internet Explorer方法更新,但收到界面错误。为什么不使用其他方法?Internet Explorer的确切错误消息是什么?使用Dim IE作为InternetExplorerMedia解决了这个问题吗?我设法找到了一个解决方案@下次你能救我的背吗!非常感谢您的帮助。我刮取这些值并将它们用作货币转换器用户表单上的标题:frmcurrencyconverted.lblConverted.caption=.document.getElementsByClassName(“tableopenpage”).Item(1.getElementsByTagName(“td”)(7.innerText rmCurrencyConverter.lblrate.caption=.document.getElementsByClassName(“tableopenpage”).Item(1).getElementsByTagName(“td”)(10).innerText