【发布时间】:2020-12-23 05:19:12
【问题描述】:
我正在尝试从篮球参考下载球员信息。
我有一个 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"))
}
【问题讨论】:
-
为 3 位玩家分享您的 csv。循环工作得很好,我创建了自己的 csv,它写得很好。
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$full_name[i] write.csv(Data_scrape, paste0(Report1_Name,".csv")) } -
感谢您修复我的循环中的错误,非常感谢,它工作正常,但现在我有一个不同的问题,它在 75 次迭代后返回错误。
-
open.connection(x, "rb") 中的错误:HTTP 错误 500。
-
其实没问题,我意识到我的 csv 中的一些 url 不正确,我现在已经修复它,似乎工作正常。再次感谢
标签: r loops web-scraping