Получает ли это то, что вы хотите?
library(tidyverse)
library(rvest)
df <- read_html("https://mountwashingtonavalanchecenter.org/hermit-lake-snow-plot-data-all/") %>%
html_table() %>%
flatten_df()
df
#> # A tibble: 50 x 12
#> Date HN24 `HN24W(SWE)` `Density (%)` HST Total `Air T` `T Max`
#> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
#> 1 "02/~ Trace Trace "" NC 201 ~ -14.5 C -9.0 C
#> 2 "02/~ Trace Trace "" Trace 204 ~ -16.5 C -9.5 C
#> 3 "02/~ 13 CM 10.7 MM 12% 13CM 205 ~ -10.0 C -2.0 C
#> 4 "02/~ Trace 0.1 MM "" 30CM 195 ~ -7.0 C -5.0 C
#> 5 "02/~ 11 CM 6.5 MM 10% NC 196 ~ -14.0 C -6.0 C
#> 6 "02/~ 24 CM 29.0 MM 17% NC 187 ~ -8.0 C -7.0 C
#> 7 "02/~ 0 CM 0 MM "" 0CM 164 ~ -16.0 C -13.0 C
#> 8 "02/~ 0 CM 0 MM "" 0CM 164 ~ -15.0 C -14.0 C
#> 9 "02/~ 0 CM 0 MM "" 0CM 164 ~ -19.0 C -17.0 C
#> 10 "02/~ Trace Trace "" NC 164 ~ -18.0 C 6.0 C
#> # ... with 40 more rows, and 4 more variables: `T Min` <chr>, Sky <chr>,
#> # Precip <chr>, Comments <chr>
Чтобы увидеть таблицу, попробуйте, View(df)
.
И так как это выглядит так, как будто у нее несколько страниц результатов, вы можетеВы хотите очистить все страницы следующим образом:
base_url <- "https://mountwashingtonavalanchecenter.org/hermit-lake-snow-plot-data-all/?frm-page-11115="
make_tbl <- function(pg_nbr) {
read_html(paste0(base_url, pg_nbr)) %>%
html_table() %>%
flatten_df()
}
1:5 %>%
set_names(.) %>%
map(~ make_tbl(.)) %>%
bind_rows(.id = 'page_number')
# A tibble: 226 x 13
page_number Date HN24 `HN24W(SWE)` `Density (%)` HST Total `Air T` `T Max` `T Min` Sky Precip Comments
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 1 "02/18/19~ Trace Trace "" NC 201 CM -14.5 C -9.0 C -16.5 C Overc~ Snow ""
2 1 "02/17/19~ Trace Trace "" Trace 204 CM -16.5 C -9.5 C -16.5 C Clear No preci~ ""
3 1 "02/16/19~ 13 CM 10.7 MM 12% 13CM 205 CM -10.0 C -2.0 C -10.0 C Overc~ No preci~ ""
4 1 "02/15/19~ Trace 0.1 MM "" 30CM 195 CM -7.0 C -5.0 C -15.0 C Overc~ No preci~ ""
5 1 "02/14/19~ 11 CM 6.5 MM 10% NC 196 CM -14.0 C -6.0 C -15.0 C Overc~ Snow ""
6 1 "02/13/19~ 24 CM 29.0 MM 17% NC 187 CM -8.0 C -7.0 C -16.0 C Overc~ Snow View
7 1 "02/12/19~ 0 CM 0 MM "" 0CM 164 CM -16.0 C -13.0 C -18.0 C Clear No preci~ ""
8 1 "02/11/19~ 0 CM 0 MM "" 0CM 164 CM -15.0 C -14.0 C -20.0 C Clear No preci~ ""
9 1 "02/10/19~ 0 CM 0 MM "" 0CM 164 CM -19.0 C -17.0 C -19.0 C Clear No preci~ ""
10 1 "02/09/19~ Trace Trace "" NC 164 CM -18.0 C 6.0 C -18.0 C Overc~ Snow View
# ... with 216 more rows
Наконец, чтобы сделать функцию read_html
более надежной, вы можете изменить ее с помощью purrr::possibly
, чтобы она работала изящно.Например, нет page = 6
(по крайней мере, пока), но следующее все равно будет «работать»:
possible_read <- possibly(read_html, otherwise = NULL)
make_tbl <- function(pg_nbr) {
possible_read(paste0(base_url, pg_nbr)) %>%
html_table() %>%
flatten_df()
}
1:6 %>%
set_names(.) %>%
map(~ make_tbl(.)) %>%
bind_rows(.id = 'page_number')