【问题标题】:Creating a function that loops through page numbers创建一个遍历页码的函数
【发布时间】:2020-06-18 23:34:57
【问题描述】:

我有一个导入数据的脚本,如下所示:

library(tidyverse)
library(rvest)
library(magrittr)

page_number <- 1:20

base_url <- read_html("https://247sports.com/Season/2021-Football/CompositeRecruitRankings/?ViewPath=~%2FViews%2FSkyNet%2FPlayerSportRanking%2F_SimpleSetForSeason.ascx&Page=1")

rankings <- base_url %>% html_nodes(".meta , .score , .position , .rankings-page__name-link") %>%
  html_text() %>% 
  str_trim %>% 
  str_split("   ") %>% 
  unlist %>%
  matrix(ncol = 4, byrow = T) %>% 
  as.data.frame

您会在base_url 中注意到,在最后,它包括&amp;Page=1。好吧,我正在尝试这样做 20 页,因此:

page_number &lt;- 1:20

在无需编写 20 组不同代码的情况下,将这些数字循环到 URL 中的最有效方法是什么?

【问题讨论】:

    标签: r web-scraping dplyr tidyverse rvest


    【解决方案1】:

    您可以使用paste0sprintf 来构造所有的网址

    all_urls <- paste0("https://247sports.com/Season/2021-Football/CompositeRecruitRankings/?ViewPath=~%2FViews%2FSkyNet%2FPlayerSportRanking%2F_SimpleSetForSeason.ascx&Page=", 1:20)
    

    然后您可以遍历每个 URL 并提取所需的数据。

    library(tidyverse)
    library(rvest)
    
    rankings <- map(all_urls, ~.x %>% read_html %>%
                html_nodes(".meta , .score , .position , .rankings-page__name-link") %>%
                html_text() %>% 
                str_trim %>% 
                str_split("   ") %>% 
                unlist %>%
                matrix(ncol = 4, byrow = T) %>% 
                as.data.frame)
    

    【讨论】:

    • 谢谢,但知道为什么我不断收到此错误吗? Error in UseMethod("xml_find_all") : no applicable method for 'xml_find_all' applied to an object of class "character"
    • 抱歉,我忘了包含read_html。我已经更新了答案。
    • 正确的图例。谢谢你。如果您不介意,还有一个问题:最后将其转换为数据框的最有效方法是什么?当我运行rankings[1:20] %&gt;% as.data.frame() 时,它并没有满足我的需要。
    • 如果你想把它放到一个数据框中使用map_df代替map,它会绑定所有的行。
    猜你喜欢
    • 2016-08-09
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    相关资源
    最近更新 更多