R-for循环,可正确将变量传递给链接

时间:2019-07-11 07:45:56

标签: r for-loop rvest rselenium

我想从IMDB网页上获取带有电影评分列表的数据。 我想在多页上执行此操作,因此在从第一个页面抓取内容之后,我需要打开另一个页面并重复抓取过程。 第一页包含250部电影(这是可以显示的最大值),其排名是从1到250。下一页应该包含250部电影,从251到500。 起始编号可以在链接中传递,但是我在正确编写和使用for循环在第一次执行时传递1的问题上遇到了困难,而且编号增加了250。

背景: 我已经尝试过是否基于j值将数字增加250,但还不确定如何正确执行操作。

#install required packages
install.packages("rvest")
install.packages("RSelenium")
library(rvest)
library(RSelenium)

#open browser (Firefox in my case, but can be any, just change the value in line below from firefox to chrome, internet explorer)
rD <- rsDriver(browser=c("firefox"))
remDr <- rD[["client"]]

#set counter
counter=250

for (j in 1){
  j<-j+counter
  #set link for the webpage. 
  newURL<-"https://www.imdb.com/search/title/?title_type=feature&release_date=,2018-12-31&count=250&start="
  startNumberURL<-paste0(newURL,j)

#open webpage in the browser
remDr$navigate(startNumberURL)

#read html code
strona_int<-read_html(startNumberURL)

#read rank section from the page
rank_data<-html_nodes(strona_int,'.text-primary')
#konwersja rankingu na text
rank_data<-html_text(rank_data)
#konwersja na numeric
rank_data<-as.numeric(rank_data)
}

#close browser
remDr$close()
#stop server
rD[["server"]]$stop()

当前结果: 没有错误消息。

在循环中,初始链接应为: https://www.imdb.com/search/title/?title_type=feature&release_date=,2018-12-31&count=250&start=1

下一个: https://www.imdb.com/search/title/?title_type=feature&release_date=,2018-12-31&count=250&start=251

更新 谢谢!看起来它几乎完美。

ile<-seq(from=1, by=250, length.out = 3)
for (j in ile){ 
#open page in browser 
newURL<-"https://www.imdb.com/search/title/?title_type=feature&release_date=,2018-12-31&count=250&start=" 
startNumberURL<-paste0(newURL,j)

但是现在还有一个问题,如何将其正确添加到数据框中?

#create dataframe
filmy_df_temp<-data.frame(Rank=rank_data) 
filmy_df<-rbind(filmy_df_temp) 
} 

但是它仅添加最新执行。

0 个答案:

没有答案