Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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
VBA HTML元素到Excel_Excel_Vba_Web Scraping - Fatal编程技术网

VBA HTML元素到Excel

VBA HTML元素到Excel,excel,vba,web-scraping,Excel,Vba,Web Scraping,我正在编写一个使用VBA Excel导航到网站并将一些值复制到Excel的代码 我可以打开网站并导航,但我无法将“沉淀”值保存在excel表格中 Sub accuweather() Dim ie As InternetExplorer Dim pagePiece As Object Dim webpage As HTMLDocument Set ie = New InternetExplorer ie.Visible = True ie.navigate ("http://www.acc

我正在编写一个使用VBA Excel导航到网站并将一些值复制到Excel的代码

我可以打开网站并导航,但我无法将“沉淀”值保存在excel表格中

Sub accuweather()

Dim ie As InternetExplorer
Dim pagePiece As Object
Dim webpage As HTMLDocument

Set ie = New InternetExplorer
ie.Visible = True 

ie.navigate ("http://www.accuweather.com/en/pt/abadia/869773/daily-weather-forecast/869773?day=2")

Do While ie.readyState = 4: DoEvents: Loop
Do Until ie.readyState = 4: DoEvents: Loop

While ie.Busy
    DoEvents
Wend

Set webpage = ie.document
Set mtbl = webpage.getElementsByTagName("details-card card panel details allow-wrap")
Set table_data = mtbl.getElementsByTagName("div")(1)

For itemNum = 1 To 240
    For childNum = 0 To 5
        Cells(itemNum, childNum + 1) = table_data.Item(itemNum).Children(childNum).innerText
    Next childNum
Next itemNum

ie.Quit
Set ie = Nothing

End Sub

您使用的方法是
getElementsByTagName
,但该引用用于多值类。因此正确的方法应该是
getElementsByClassName

但是,您不需要浏览器,因为内容是静态的,您可以使用更快的xmlhttp请求和单个(更健壮、更快速)类作为目标

这个

正在检索具有各种p标记子节点的两个父节点。两种情况下的第一个孩子

.Item(i).FirstChild
是降水信息

Option Explicit

Public Sub GetPrecipitationValues()
    Dim html As MSHTML.HTMLDocument, i As Long

    Set html = New MSHTML.HTMLDocument

    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", "https://www.accuweather.com/en/pt/abadia/869773/daily-weather-forecast/869773?day=2", False
        .setRequestHeader "User-Agent", "Mozilla/5.0"
        .send
        html.body.innerHTML = .responseText
    End With

    With html.querySelectorAll(".list")
        For i = 0 To .Length - 1
            Debug.Print .Item(i).FirstChild.innerText
        Next
    End With
End Sub

您使用的方法是
getElementsByTagName
,但该引用用于多值类。因此正确的方法应该是
getElementsByClassName

但是,您不需要浏览器,因为内容是静态的,您可以使用更快的xmlhttp请求和单个(更健壮、更快速)类作为目标

这个

正在检索具有各种p标记子节点的两个父节点。两种情况下的第一个孩子

.Item(i).FirstChild
是降水信息

Option Explicit

Public Sub GetPrecipitationValues()
    Dim html As MSHTML.HTMLDocument, i As Long

    Set html = New MSHTML.HTMLDocument

    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", "https://www.accuweather.com/en/pt/abadia/869773/daily-weather-forecast/869773?day=2", False
        .setRequestHeader "User-Agent", "Mozilla/5.0"
        .send
        html.body.innerHTML = .responseText
    End With

    With html.querySelectorAll(".list")
        For i = 0 To .Length - 1
            Debug.Print .Item(i).FirstChild.innerText
        Next
    End With
End Sub

运行代码时会发生什么情况?这不是标记名详细信息卡片面板详细信息允许换行看起来像多值类运行代码时会发生什么情况?这不是标记名详细信息卡片面板详细信息允许换行看起来像多值类打印结果到即时窗口Ctrl+G,但很容易写入。谢谢QHarr。如何将这些结果打印到excel?Qharr抱歉,但我需要为每行URL(多个URL)添加一个循环。stackoverflow上有很多示例向您展示了如何执行此操作。我将分享一个链接到下面的一些,这样你可以有一个尝试在它第一。看看这些:我把这些问题贴在了网上。如果你能帮忙,我将不胜感激。又来了!我正在将结果打印到即时窗口Ctrl+G,但很容易写入SheetQharr。如何将这些结果打印到excel?Qharr抱歉,但我需要为每行URL(多个URL)添加一个循环。stackoverflow上有很多示例向您展示了如何执行此操作。我将分享一个链接到下面的一些,这样你可以有一个尝试在它第一。看看这些:我把这些问题贴在了网上。如果你能帮忙,我将不胜感激。又来了!