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()
移动到循环之后以防止冗余进程。
我想跨多个页面抓取 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()
移动到循环之后以防止冗余进程。