Очистка данных от publi c Google листа - один и тот же URL для разных вкладок - PullRequest
0 голосов
/ 15 марта 2020

Я хочу очистить данные с опубликованной c веб-страницы листа Google. Это ссылка .

. Меня особенно интересуют данные на 4-й вкладке «США ежедневно в 4 часа дня по восточному времени», однако URL-адрес этой вкладки такой же, как и для всех другие вкладки (по крайней мере, в соответствии с адресной строкой браузеров, которые я пробовал - и Chrome, и Firefox). Когда я пытаюсь очистить данные с помощью пакета rvest в R, я получаю данные из 2-й вкладки «Состояния текущие».

Я щелкнул правой кнопкой мыши, чтобы просмотреть 1-ю вкладку «README» msgstr ", чтобы увидеть, могу ли я что-то выяснить по поводу имен вкладок. Похоже, название 4-й вкладки - sheet-button-916628299. Но ввод URL-адресов в моем браузере, который заканчивался на / pubhtml # gid = sheet-button-916628299 или / pubhtml # gid = 916628299, не привел меня на четвертую вкладку.

Как найти URL, который занимает мне (и, что более важно, пакет rvest в R) к данным на 4-й вкладке?

1 Ответ

1 голос
/ 16 марта 2020

Это просто довольно : данные для всех вкладок загружаются уже на странице, а не по запросам xhr. * Содержание каждой вкладки скрыто или скрыто css.

Если вы используете панель разработчика в своем браузере, вы можете видеть, что каждая вкладка находится в элементе div с числовым идентификатором, который задается числом в идентификаторе каждой вкладки.

Мы можно получить страницу и создать фрейм данных с правильными селекторами 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)

...