我想从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)
}
但是它仅添加最新执行。