r - 遍历 url 列表并下载 html 表 R
问题描述
我正在尝试从篮球参考下载球员信息。
我有一个 csv,我已将其作为数据框 (data_allplayers) 导入,它有两列,一列带有 url,另一列带有我想将该文件另存为的名称。
https://www.basketball-reference.com/players/g/gordoaa01/gamelog/2020
Aaron Gordon
2
https://www.basketball-reference.com/players/h/holidaa01/gamelog/2020
Aaron Holiday
3
https://www.basketball-reference.com/players/n/naderab01/gamelog/2020
Abdel Nader
等529行。
我想遍历它并将该位置的每个 url 和主数据表保存到一个数据框,然后将其与玩家姓名一起存储。
我可以完美下载这些表格,但我手动/单独使用:
#player1
webpage <- read_html("https://www.basketball-reference.com/players/g/gordoaa01/gamelog/2020")
tbls <- html_nodes(webpage, "table") %>%
html_table(fill = TRUE)
Aaron_Gordon <- as.data.frame(tbls[8])
但是我不喜欢使用列表中已经填充的 url 将它变成一个循环。我尝试过的完整代码如下,非常感谢任何帮助!
# Load libraries
library(dplyr)
library(readxl)
library(rvest)
library(data.table)
library(readr)
library(plyr)
data_allplayers <- read_csv("NBA_rebounds - players1.csv")
#delete the unwanted columns, add headers
data_allplayers <- select(data_allplayers, url, full_name)
header <- c("url", "name")
setnames(data_allplayers, header)
#removes first row
data_allplayers <- data_allplayers[-c(1), ]
#attempt at loop that doesn't work
for(i in 1:nrow(data_allplayers)){
webpage <- read_html(data_allplayers$url[[i,]])
tbls <- html_nodes(webpage, "table") %>%
html_table(fill = TRUE)
Data_scrape <- as.data.frame(tbls[8])
Report1_Name <- data_allplayers$name[[i,]]
write.csv(Data_scrape, paste0(Report1_Name,".csv"))
}
解决方案
这是一种方法Map
:
library(rvest)
Map(function(x, y) {
read_html(x) %>%
html_nodes('table') %>%
html_table(fill = TRUE) %>%
.[[8]] %>%
write.csv(paste0(y, '.csv'), row.names = FALSE)
}, data_allplayers$url, data_allplayers$name)
对于您共享的 3 个值,这对我来说很好。
data_allplayers <- structure(list(url = c("https://www.basketball-reference.com/players/g/gordoaa01/gamelog/2020 ",
"https://www.basketball-reference.com/players/h/holidaa01/gamelog/2020 ",
"https://www.basketball-reference.com/players/n/naderab01/gamelog/2020 "
), name = c(" Aaron Gordon", " Aaron Holiday", " Abdel Nader"
)), class = "data.frame", row.names = c(NA, -3L))
推荐阅读
- javascript - 如何使用 excel.js 库编辑 Multer 发布的文件?
- c++ - 链表插入,指针混淆
- python - 使用 OpenCV 检测文档扫描中的矩形签名字段
- mysql - 如何将 sql join 查询转换为 sequelizejs 查询
- node.js - SPFX 站点(SharePoint 2016 本地站点与反应)不断重新加载。该怎么办?
- docker - 使用 ENV 参数设置容器 PATH
- django - 如何在django中借助Forign Key访问其他模型的所有字段
- spring - 如何使用 Spring Pageable 在自定义查询 JPQL 上对多个字段执行排序
- android - Flutter:显示 PDF 封面图片
- selenium - 如何参考第一列中的名称启用第二列中的复选框?