【问题标题】:Scraping data from public Google sheet - same url for different tabs从公共 Google 工作表中抓取数据 - 不同标签的相同 url
【发布时间】:2020-03-15 19:27:53
【问题描述】:

我想从 Google 表格的公共网页中抓取数据。这是link

我对第 4 个选项卡“美国东部时间下午 4 点”中的数据特别感兴趣,但是该选项卡的 url 与所有其他选项卡的 url 相同(至少根据浏览器的地址栏)我试过了——Chrome 和 Firefox)。当我尝试使用 R 中的 rvest 包抓取数据时,我最终得到了第二个选项卡“States current”中的数据。

我右键单击检查第一个选项卡“README”,看看我是否能弄清楚选项卡名称。看起来第 4 个选项卡的名称是 sheet-button-916628299。但是在我的浏览器中输入以 /pubhtml#gid=sheet-button-916628299 或 /pubhtml#gid=916628299 结尾的 URL 并没有将我带到第四个标签。

如何找到将我(以及更重要的是 R 中的 rvest 包)带到第 4 个选项卡中数据的 URL?

【问题讨论】:

    标签: r web-scraping rvest


    【解决方案1】:

    相当直截了当:所有选项卡的数据已经加载到页面上,而不是由 xhr 请求加载。每个选项卡的内容只是被 css 隐藏或取消隐藏。

    如果您在浏览器中使用开发者面板,您可以看到每个选项卡都在一个 div 中,其数字 id 由每个选项卡的 id 中的数字给出。

    我们可以获取页面并制作一个包含正确 css 选择器的数据框来获取每个选项卡的内容,如下所示:

    library(rvest)
    
    url <- paste0("https://docs.google.com/spreadsheets/u/2/d/e/",
                  "2PACX-1vRwAqp96T9sYYq2-i7Tj0pvTf6XVHjDSMIKBdZ",
                  "HXiCGGdNC0ypEU9NbngS8mxea55JuCFuua1MUeOj5/pubhtml#")
    
    page <- read_html(url)
    tabs <- html_nodes(page, xpath = "//li")
    tab_df <- data.frame(name = tabs %>% html_text, 
                         css = paste0("#", gsub("\\D", "", html_attr(tabs, "id"))),
                         stringsAsFactors = FALSE)
    tab_df
    #>                   name         css
    #> 1               README #1600800428
    #> 2       States current #1189059067
    #> 3           US current  #294274214
    #> 4 States daily 4 pm ET  #916628299
    #> 5     US daily 4 pm ET  #964640830
    #> 6               States #1983833656
    

    所以现在我们可以像这样获取第四个标签的内容:

    html_node(page, tab_df$css[4]) %>% html_nodes("table") %>% html_table()
    #> [[1]]
    #>                                                             
    #> 1     1     Date State Positive Negative Pending Death Total
    #> 2    NA                                                     
    #> 3     2 20200314    AK        1      143                 144
    #> 4     3 20200314    AL        6       22      46          74
    #> 5     4 20200314    AR       12       65      26         103
    #> 6     5 20200314    AZ       12      121      50     0   183
    #> 7     6 20200314    CA      252      916             5 1,168
    #> 8     7 20200314    CO      101      712             1   814
    #> 9     8 20200314    CT       11      125                 136
    #> 10    9 20200314    DC       10       49      10          69
    #> 11   10 20200314    DE        6       36      32          74
    #> 12   11 20200314    FL       77      478     221     3   776
    #> 13   12 20200314    GA       66                      1    66
    #> 14   13 20200314    HI        2                            2
    #> 15   14 20200314    IA       17       83                 100
    #> .... (535 rows in total)
    
    

    【讨论】:

      猜你喜欢
      • 2020-10-26
      • 2022-07-31
      • 2014-07-11
      • 1970-01-01
      • 2019-06-17
      • 2023-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多