我目前正处于硕士论文的数据准备阶段,但遇到了一个问题。我正在尝试使用R循环中的for循环和rvest软件包(基于约90k ID的向量)来抓取网站。 如何在for循环中添加时间间隔以防止HTML-请求过多错误?
我还有两个小问题,我需要一些帮助:
如果我仅使用10个ID的向量来测试循环,则循环将继续覆盖结果,从而覆盖观察值1-9,并且仅显示观察值10。
我可以成功地刮取一个元素(名字),但是当我尝试刮取第二个元素并将其添加到另一列中时,代码失败。
我已经修改了一段时间,所以我已经进行了很多迭代,这是我唯一可以使用的版本。为了覆盖观察结果,我尝试在[playernames]之后添加[i],但会产生错误“新列将在现有列之后留下漏洞”。
# playerid is a vector of ~90k different IDs. (wouldn't work as a list)
# I successfully manage to scrape the first name of the player, although it keeps overwriting the observation.
for(i in playerid){
websiteX <- paste("http://www.X.com/id=",i, sep="")
websiteX <- read_html(websiteX)
playernames <- data.frame(first =websiteX %>% html_node("dd:nth-child(2)") %>% html_text() ,
stringsAsFactors=FALSE)
playernames$playerid <- i
}
# I want to also scrape the surname using: sur =websiteX %>% html_node(websiteX, "dd:nth-child(4)") %>% html_text() ,
简而言之,我想要的是一个90k播放器ID的数据框,然后是名字的第一列和名字的第二列。
如果我使用整个90k ID集并且仅尝试刮取名字,我将得到一个HTML重载错误。如果我仅抓取几个名称(例如10),它将不断覆盖观察结果。
我没有办法实现对姓氏的抓取,也不清楚如何添加时间间隔以防止出现过载错误。
# Changing
playernames <- data.frame~...
# to
playernames[i] <- data.frame~...
# produces the new columns would leave holes after existing columns error.