r - 如何在R中从具有多个页面的网站中抓取特定信息

标签 r function web-scraping

我刚刚开始在 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/

相关文章:

r - 如何获得每列的平均值,按某组分组?

python mechanize/requests/selenium 用于弹出登录?

python - Scrapy只提取一部分url

r - 使用 R 中的汇总查找汇总度量、非 NA 值和特定值进行分组

R中虚拟变量的回归

javascript - 在一个html页面中使用javascript计算2组输入类型

c++ - 打印不同类型成员的函数

python - 仅抓取整个网站的图像 URL

r - .data 和 cur_data() 之间的区别

javascript - JavaScript 会自动跳过空函数吗?