我刚刚开始在 R 中进行网页抓取,但我很难找到如何从具有多个页面的网站中抓取特定信息,而不必为每个单独的 URL 运行代码。到目前为止,我已经成功地使用以下示例在第一页上完成了此操作:https://towardsdatascience.com/tidy-web-scraping-in-r-tutorial-and-resources-ac9f72b4fe47 .
我还设法使用以下代码根据页码生成网址:
list_of_pages <- str_c(url, '?page=', 1:32)
问题是集成它并使用生成的 url 来使用一个函数获取我需要的信息并将其存储在数据框中。这是我用于抓取信息的代码:
hot100page <- "https://www.billboard.com/charts/hot-100"
hot100 <- read_html(hot100page)
rank <- hot100 %>%
rvest::html_nodes('body') %>%
xml2::xml_find_all("//span[contains(@class, 'chart-element__rank__number')]") %>%
rvest::html_text()
这是我计划使用该功能的网站结构示例:https://www.amazon.com/s?k=statistics&ref=nb_sb_noss_2 .
最佳答案
这里有一种使用 rvest 来完成此操作的方法。请记住,特定网站 (hot100) 实际上并不使用分页,因此 url 的 ?page=1
等部分毫无意义(它只是不断加载主页)。但对于有分页的网站,这可行
library(tidyverse)
library(rvest)
hot100page <- "https://www.billboard.com/charts/hot-100"
hot100 <- read_html(hot100page)
df <- data.frame(rank=character(), somethingelse=character())
rank <- c()
for(i in 1:32) {
print(paste0("Scraping page ", i))
temp <- paste0(hot100page, '?page=', i) %>%
read_html %>%
rvest::html_nodes('body') %>%
xml2::xml_find_all("//span[contains(@class, 'chart-element__rank__number')]") %>%
rvest::html_text()
rank <- c(rank, temp)
}
df$rank <- rank
df
关于r - 如何在R中从具有多个页面的网站中抓取特定信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65157831/