使用 excel 宏从网站上的图形中读取值



我有一个问题,我自己找不到解决方案。我试图从以下网站读出值:https://datawrapper.dwcdn.net/6E03v/580/。我想我已经设法在网站代码中找到了相应的部分,即 这个。根据我的理解,可以使用标签"span"或类"fg"找到这些值,但它们似乎都不起作用。这是我在使用标签"span"的版本中使用它的代码:

Dim WertFG As Selenium.WebElement
Dim WerteFG As Selenium.WebElements
Dim strTargetTab As String
Dim lgNaechsteFreieZeileZwiSpTblFaelleNachAlter As Long
Dim lgSpalte As Long
Dim lgNaechsteFreieZeileReiterNTVCoronadaten As Long

'Wertzuweisung Variablen
Set ChromeBrowser = New Selenium.ChromeDriver

'Chrome starten und auf die relevante Seite für die gesuchte TabelleCoronaVirusPandemieParameter gehen
ChromeBrowser.Start baseUrl:="https://datawrapper.dwcdn.net/"
ChromeBrowser.Get "/6E03v/577/"


'Werte auslesen
strTargetTab = ThisWorkbook.Worksheets("ZwiSp Tbl Fälle nach Alter").Name
ThisWorkbook.Worksheets(strTargetTab).Activate
ThisWorkbook.Worksheets(strTargetTab).Range("A1:A50").ClearContents

Application.Wait (Now + TimeValue("00:00:03"))

'Tabellenwerte auslesen
Set WerteFG = ChromeBrowser.FindElementsByTag("span")
lgNaechsteFreieZeileZwiSpTblFaelleNachAlter = ThisWorkbook.Worksheets(strTargetTab).Cells(Rows.Count, 1).End(xlUp).Row + 1
lgSpalte = 1


For Each WertFG In WerteFG
ThisWorkbook.Worksheets(strTargetTab).Cells(lgNaechsteFreieZeileZwiSpTblFaelleNachAlter, lgSpalte).Value = WertFG.Text
lgNaechsteFreieZeileZwiSpTblFaelleNachAlter = lgNaechsteFreieZeileZwiSpTblFaelleNachAlter + 1
Next WertFG


ChromeBrowser.Close

有人有想法吗,为什么这行不通?这是否与以下事实有关,即仅当您将鼠标悬停在图表的相应部分上方时,才会显示图表上的值?

感谢您的帮助! 奥利弗

加法: 我想做什么: 在Excel中读出标记"span"的所有值到工作表。每个值都应写入工作表中的连续单元格中,即 A2、A3、....

宏的作用: 读出前 4 行的标签"span"的值,然后提供 11 行没有值,然后再次显示元素"span"的网站剩余值。我假设在 11 个空行中,如果宏正常工作,将显示图形的数字(这是我需要的)。我还在这篇文章中附上了读出结果的屏幕截图: 读出结果 Excel 工作表

在从该页面提取下载之前需要等待。

此外,最好针对特定的跨度,例如

Dim values As webelements, labels As webelements, r As Long
Set values = chromebrowser.FindElementsByCss(".dontshow span")
Set labels = chromebrowser.FindElementsByCss(".series span")
r = 0
For i = 1 To labels.Count Step 2
Debug.Print labels.Item(i).Text
Debug.Print values(i).Text
Debug.Print values(i + 1).Text
r = r + 1
Next

但是,数据来自您可以下载的 csv。csv 有一个时间戳参数,可能有助于缓存。我怀疑服务器对它做了很多事情。@TimWilliams写了一个非常好的小函数来生成Unix时间戳,您可以使用它来构建csv下载URL。

因此,如果该页面上还有其他您想要的内容,您只需chromebrowser.get到构建的url,它将下载:

Public Sub GetCovidNumbers()

Dim downloadUrl As String

downloadUrl = "https://static.dwcdn.net/data/6E03v.csv?v=" & CStr(toUnix(Now))
Debug.Print downloadUrl

'd.get downloadUrl
End Sub
Public Function toUnix(dt) As Long
'https://stackoverflow.com/a/12326121 @TimWilliams
toUnix = DateDiff("s", "1/1/1970", dt)
End Function

或者,如果你只需要它,你可以设置一个下载路径并使用urlmon从构造的url下载,例如

Public Const folderName As String = "C:Users<user>Desktopcovid.csv" '<=Change as required
Public Sub downloadCSV()
Dim ret As Long
ret = URLDownloadToFile(0, "https://static.dwcdn.net/data/6E03v.csv?v=" & CStr(toUnix(Now)), folderName, BINDF_GETNEWESTVERSION, 0)
End Sub

在所有情况下,您都需要整理输出中的标题和年龄类别 5-9。我会简单地忽略它们,因为它们是常量,因此您可以将它们存储在其他地方。

相关内容

  • 没有找到相关文章

最新更新