Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 使用VBA从网站中刮取值_Html_Vba_Web Scraping - Fatal编程技术网

Html 使用VBA从网站中刮取值

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

需要帮助才能从网站上获取一些数据。 作为第一步,我设法访问网站并导入变量,但:

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 = "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