首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >编辑14天天气预报Excel以包括降水

编辑14天天气预报Excel以包括降水
EN

Stack Overflow用户
提问于 2021-07-08 14:45:18
回答 1查看 112关注 0票数 0

我发现下面的代码工作得很好,我想我可以根据我的需要重新使用它,但不包括沉淀。我对HTML比较陌生,所以很难理解每一行代码的目的是什么。我去了网站,查看了元素和控制台,但找不到"pdata-testid='wxPhrase'“或单词”child“或”child“。

我推测降水只是另一个子元素,所以在编辑第一个子部分的列标题之后,尝试添加这样的行:

代码语言:javascript
运行
复制
Results(r + 1, 3) = Children(r).FirstChild.innerText 

Results(r + 1, 4) = Children(r).PreviousSibling.PreviousSibling.PreviousSibling.FirstChild.innerText

但是它给出了运行时错误'438':Object不支持这个属性或方法。我非常感谢一些帮助和教育。谢谢,提前!

代码语言:javascript
运行
复制
Sub MiamiWeather()
Dim Data As Variant
Data = MiamiWeatherData

Range("A1:B1").Value = Array("Date", "Temperature")
Range("A2").Resize(UBound(Data), 2).Value = Data
    
End Sub

Function MiamiWeatherData()
    Const URL = "https://weather.com/weather/tenday/l/3881cd527264bc7c99b6b541473c0085e75aa026b6bd99658c56ad9bb55bd96e"
    Dim responseText As String
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", URL, False
        .send
    responseText = .responseText
End With

Dim Document As HTMLDocument
Set Document = CreateObject("HTMLFILE")
Document.body.innerHTML = responseText

Dim Children As IHTMLDOMChildrenCollection
Set Children = Document.querySelectorAll("p[data-testid='wxPhrase']")
Dim Results As Variant
ReDim Results(1 To Children.Length, 1 To 2)
Dim r As Long

For r = 0 To Children.Length - 1
    Results(r + 1, 1) = Children(r).PreviousSibling.PreviousSibling.FirstChild.innerText
    Results(r + 1, 2) = Children(r).PreviousSibling.FirstChild.innerText
Next

MiamiWeatherData = Results
End Function
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-08 15:08:04

假设您需要百分比,则需要调整数组的大小以容纳额外的维度,然后在循环中添加额外的选择器。该选择器可以按属性=值进行选择,并且需要处理.Children(r).PreviousSibling。假设您有一个仍在维护的微软设置,您可以在此时链接querySelector,如下所示。

对于旧版本,例如,<= Windows 7,然后使用Results(r + 1, 3) = Children(r).PreviousSibling.Children(2).Children(0).Children(1).innerText

代码语言:javascript
运行
复制
Option Explicit

Public Sub MiamiWeather()
    Dim Data As Variant
    Data = MiamiWeatherData

    Range("A1:C1").value = Array("Date", "Temperature", "Precipitation")
    Range("A2").Resize(UBound(Data), 3).value = Data
    
End Sub

Function MiamiWeatherData()
    Const URL = "https://weather.com/weather/tenday/l/3881cd527264bc7c99b6b541473c0085e75aa026b6bd99658c56ad9bb55bd96e"
    Dim responseText As String
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", URL, False
        .send
        responseText = .responseText
    End With

    Dim Document As HTMLDocument
    Set Document = CreateObject("HTMLFILE")
    Document.body.innerHTML = responseText

    Dim Children As IHTMLDOMChildrenCollection
    Set Children = Document.querySelectorAll("p[data-testid='wxPhrase']")
    Dim Results As Variant
    ReDim Results(1 To Children.length, 1 To 3)
    Dim r As Long

    For r = 0 To Children.length - 1
        Results(r + 1, 1) = Children(r).PreviousSibling.PreviousSibling.FirstChild.innerText
        Results(r + 1, 2) = Children(r).PreviousSibling.FirstChild.innerText
        Results(r + 1, 3) = Children(r).PreviousSibling.querySelector("[data-testid=PercentageValue]").innerText
    Next

    MiamiWeatherData = Results
End Function
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68303860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档