克服 HTTP 错误 403 - Web 抓取循环

问题描述 投票:0回答:0

我正在运行一个网络抓取 for 循环,在大约 300 次迭代后,我继续收到“open.connection(x, "rb") 错误:HTTP 错误 403。”错误。我明白为什么会发生错误,该网站因提出太多请求而将我踢出局。因此,我将等待几分钟,然后更新 i 编号并再次运行它。然后这个过程一遍又一遍地重复,这很痛苦。我想知道是否有办法克服这个错误。我读过假用户代理,但不知道如何实施。我目前正在使用 RVest。循环数据只是日期和统计名称。我正在使用的代码如下:

   for (i in 1:nrow(Team_Rankings_Stat_Names)) {
  stat_name1 <- Team_Rankings_Stat_Names[[i,"Stat_Name"]]
  date <- Team_Rankings_Stat_Names[[i,"Date"]]
  game_stat <- read_html(paste0("https://www.teamrankings.com/nba/stat/",stat_name1,"?date=",date))
  game_stat <- game_stat %>% html_table(fill = TRUE)
  game_stat <- game_stat[[1]]
  game_stat[-(2)] <- lapply(game_stat[-(2)],function(x)as.numeric(gsub("%","",x)))
  game_stat[is.na(game_stat)] <- 0
  game_stat$stat <- stat_name1
  game_stat$Date <- date
  colnames(game_stat)[c(9,10)] <- c("Stat","Date")
  game_stat <- game_stat[,c(2,10,3,4,5,6,7,8,9)]
  colnames(game_stat)[c(3,4,5,8)] <- c("Value","X3","X1","PY")
  game_stat$Date <- as.Date(as.character(game_stat$Date))
  Data_Set <- rbindlist(list(Data_Set,game_stat))
  cat(paste0(round(i / nrow(Team_Rankings_Stat_Names) * 100), '% completed'))
  Sys.sleep(.01)
  if (i == nrow(Team_Rankings_Stat_Names)) cat(': Done')
  else cat('\014') 
}
r web-scraping rvest http-status-code-403
© www.soinside.com 2019 - 2024. All rights reserved.