Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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
使用excel宏从网站上的图形读取值_Excel_Vba_Web Scraping - Fatal编程技术网

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

使用excel宏从网站上的图形读取值,excel,vba,web-scraping,Excel,Vba,Web Scraping,我有一个问题,我自己找不到解决办法。我试图从以下网站读取值:。我想我已经设法在网站的代码中找到了相应的部分 . 根据我的理解,这些值可以通过标记“span”或类“fg”找到,但它们似乎都不起作用。这是我在使用标记“span”的版本中使用的代码: 是否有人有想法,为什么这不起作用?这与图形上的值仅在您将鼠标悬停在图形的相应部分上方时才显示这一事实有关吗 谢谢你的帮助! 奥利弗 补充: 我想做的是: 读取excel工作表中标记“span”的所有值。每个值应在工作表中的连续单元格中写入,即A2、A3、

我有一个问题,我自己找不到解决办法。我试图从以下网站读取值:。我想我已经设法在网站的代码中找到了相应的部分 . 根据我的理解,这些值可以通过标记“span”或类“fg”找到,但它们似乎都不起作用。这是我在使用标记“span”的版本中使用的代码:

是否有人有想法,为什么这不起作用?这与图形上的值仅在您将鼠标悬停在图形的相应部分上方时才显示这一事实有关吗

谢谢你的帮助! 奥利弗

补充: 我想做的是: 读取excel工作表中标记“span”的所有值。每个值应在工作表中的连续单元格中写入,即A2、A3、

宏的作用是: 读取前4行标记“span”的值,然后传递11行没有值,然后再次显示元素“span”的网站剩余值。如果宏能够正常工作,我假设在11个空行中,图形的数字(这就是我需要的)会显示出来。我还将宣读结果的截图附在这篇文章上:

从该页面下载之前需要等待

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

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

因此,如果该页面上有其他您想要的内容,您可以访问构建的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

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

Public Const folderName As String = "C:\Users\<user>\Desktop\covid.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

Public Const folderName As String=“C:\Users\\Desktop\covid.csv”““它们似乎都不工作”不是有用的错误描述。相反,描述出了什么地方出了问题,出现了哪些错误,代码实际执行了什么操作,或者代码预期执行了什么操作。此外,了解已经起作用的内容也很有用。
WerteFG
是否包含任何元素?请注意,这个
ChromeBrowser.FindElementsByTag(“span”)
将在整个html代码中找到所有
span
元素。感谢您的回复,很抱歉在第一轮中不够精确,我们仍然需要学习如何在“程序员”社区中发布帖子。我知道我设计代码的方式会读出所有span元素。我只有有限的技能,没有太多的技能,所以设计很适合我。我在原来的帖子中添加了更多信息。非常感谢你的帮助!我非常喜欢下载CSV文件的过程,并将其实现到我的过程中,这正是我想要的方式。再次感谢!不客气
Public Const folderName As String = "C:\Users\<user>\Desktop\covid.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