【发布时间】:2020-05-31 08:17:31
【问题描述】:
我正在从以下网站的表格中抓取数据
https://fantasy.nfl.com/research/scoringleaders?position=1&statCategory=stats&statSeason=2019&statType=weekStats&statWeek=1
我想创建一个耗时 17 周、所有四个位置(qb、rb、wr、te)的抓取,并占用前 4 页以获得前 100 行(一次仅显示 25 行) .
library(tidyverse)
library(rvest)
library(glue)
scrape_19 <- function(week, position, page) {
Sys.sleep(3)
cat(".")
url <- glue("https://fantasy.nfl.com/research/scoringleaders?{page}position={position}&sort=pts&statCategory=stats&statSeason=2019&statType=weekStats&statWeek={week}")
read_html(url) %>%
html_nodes("table") %>%
html_table(header = T) %>%
simplify() %>%
first() %>%
setNames(paste0(colnames(.), as.character(.[1,]))) %>%
slice(-1) %>%
list()
}
以下是胶水中每个调用的所有迭代:
week = 1:17;
position = 1:4;
page = c("", "offset=26&", "offset=51&", "offset=76&")
我遇到的问题是,当我尝试使用每周、位置和页面的所有数据制作一个 df 时。这是适用于周和位置的代码,但不适用于额外的嵌套 df。
scaffold <- tibble(week = weeks,
position = list(positions)) %>% tidyr::unnest()
scaffold
tbl_data <- scaffold %>%
mutate(data = purrr::map2(week, position, ~scrape_19(.x, .y)[[1]]))
基本上,我需要帮助来制作脚手架并将该脚手架转化为包含所有周、位置和页面的最终总数据集。
【问题讨论】:
-
@akrun 这是我想要描述的。
-
您似乎很想问有关抓取此网站的问题。如果您尝试使用所需的输出使您的问题尽可能清晰,这将很有帮助,以便可以测试和验证可能的解决方案以工作并解决您的问题。这真的甚至涉及刮削部分吗?你只是想用一些变量组合来构建一个字符串(url)列表吗?尝试一次只关注一个特定问题。删除与问题没有直接关系的任何内容。
-
@MrFlick 好吧,我很抱歉,因为我已尽力澄清。是的,我正在尝试学习用 rvest 和胶水刮擦,我只是想尽可能详细,这样人们就可以知道我想要达到什么目的。在一天结束时,所需的输出是一个 df,其中包含所有 17 周内所有四个位置(qb、rb、wr、te)的前 100 行(网站上一次仅显示 25 行) 2019 年。
-
到目前为止有两个拼写错误(和一个警告); 'week' != 'weeks' 和 'position' != 'positions' 。似乎脚手架只是这两者中的
expand.grid。最后出现一条错误消息,表明该网站需要{page}的值
标签: r web-scraping rvest