R 使用 rvest 抓取多个页面

R Scraping multiple pages using rvest

我想跨多个页面抓取 table 中包含的数据。我使用下面的代码来抓取第一个 table,但我不确定如何抓取其他页面中的 table:

library (rvest)
library(dplyr)
    
WA_link<-"https://www.worldathletics.org/records/toplists/sprints/100-metres/outdoor/women/senior/2021?page=1"
WA_page<-read_html(WA_link)
    
WA_table<-WA_page  %>% html_nodes("table.records-table") %>%
      html_table() %>% . [[1]]

我希望抓取所有 table(或给定数量的 table),然后将其合并到一个数据框中。如何调整我的代码以实现此目的?

谢谢。

这是一个用于抓取和合并第 1-4 页的循环。我不确定如何抓取网站以查看集合中有多少页,所以现在应该手动更改页数。

pages <- 1:4 # where 4==whatever the number of pages is..

WA_list=list()
for(i in seq_along(pages)){
  WA_link<-paste0("https://www.worldathletics.org/records/toplists/sprints/100-metres/outdoor/women/senior/2021?page=",pages[i])
  WA_page<-read_html(WA_link)

  WA_list[[i]] <- WA_page  %>% html_nodes("table.records-table") %>%
    html_table() %>% . [[1]]

}
WA_table <- dplyr::bind_rows(WA_list)

或者,您可以扫描比预期更多的内容。

pages <- c(1:100)

WA_list=vector("list", length(pages))
  ## "pre-allocate" an empty list of length 5
for(i in seq_along(pages)){
  print(i)
  WA_link<-paste0("https://www.worldathletics.org/records/toplists/sprints/100-metres/outdoor/women/senior/2021?page=",pages[i])
  WA_page<-read_html(WA_link)

  WA_list[[i]] <- WA_page  %>% html_nodes("table.records-table") %>%
    html_table() %>% . [[1]]
  WA_table <- dplyr::bind_rows(WA_list) # this is a crude solution to creating a data frame while allowing the loop to stop when the max page has been reached. ideally, there would be a logical here for when no data is retrieved on pages[i]
}

注意:希望有人可以编辑此答案以在 WA_page %>% html_nodes("table.records-table") %>% html_table() %>% . [[1]] 中不存在数据的 i 处退出循环。然后,此解决方案会将 bind_rows() 移动到循环之后以防止冗余进程。