【发布时间】:2021-04-23 05:40:08
【问题描述】:
我正在尝试从 IMDb 网页抓取电影详细信息。 问题在于董事数据。我只能刮第一导演,但想刮每部电影的所有导演。
在下面提到的第 10 位页面上,我们有“复仇者联盟 - 无限战争”,其中导演有 Anthony Russo 和 Joe Russo。
代码的原始版本。 如您所见,将特定子集设置为 1,因此它读取第一个导演。
directors_data<- html_node(szczegoly_filmu,'.text-muted+ p a:nth-child(1)')
directors_data <- html_text(directors_data)
我可以将其更改为 2,但结果将是大多数行将是空的,因为只提到了一个主管。而且只有少数电影有不止一位导演。
我已尝试更新代码。
director_data<- html_node(szczegoly_filmu,'.text-muted+ p a')
director_data <- html_text(director_data)
但它也只读取第一个条目。
完整代码
library(rvest)
url<-"https://www.imdb.com/search/title/?title_type=feature&release_date=,2018-12-31&count=250&start="
ile<-seq(from=1, by=250, length.out = 2)
filmy_df=data.frame()
for (j in ile){
#otworzenie strony w przegladarce
newURL<-"https://www.imdb.com/search/title/?title_type=feature&release_date=,2018-12-31&count=250&start="
startNumberURL<-paste0(newURL,j)
#odczytanie kodu strony
strona_imdb<-read_html(startNumberURL)
#ograniczenie do czesci zawierajacej szczegoly
szczegoly_filmu <- html_nodes(strona_imdb, '.lister-item-content')
#odczytanie sekcji z rankingiem
rank_data<-html_node(szczegoly_filmu,'.text-primary')
#konwersja rankingu na text
rank_data<-html_text(rank_data)
#usuniecie przecinka rozdzielajacego tysiace
rank_data<-gsub(",","",rank_data)
#konwersja na numeric
rank_data<-as.numeric(rank_data)
link<-html_node(szczegoly_filmu,'.lister-item-header a')%>%html_attr(.,'href')
link<-url_absolute(link,"https://www.imdb.com")
#odczytanie unikatowego IMDBid (tytuly moga sie powtarzac, a linkow nie bedziemy zliczac)
imdbID<-sapply(strsplit(link, '/'),function(x) x[5])
#odczytanie tytulu
title_data<-html_node(szczegoly_filmu,'.lister-item-header a')
#konwersja tytulu na text
title_data<-html_text(title_data)
#title_data<-as.character(title_data)
directors_data<- html_node(szczegoly_filmu,'.text-muted+ p a:nth-child(1)')
directors_data <- html_text(directors_data)
director_data_h<- html_node(szczegoly_filmu,'.text-muted+ p a')
director_data <- html_text(director_data_h)
#utworzenie tymczasowej ramki dla iteracji
filmy_df_temp<-data.frame(Dir=director_data,Rank=rank_data,IMDBid=imdbID,Title=title_data,Directors=directors_data)
#wczytanie df z iteracji do koncowej ramki
filmy_df<-rbind(filmy_df,filmy_df_temp)
}
没有任何错误。只是想扩展功能。
【问题讨论】:
-
仅供参考,它是 scrape(和 scraper、scraping、scraped)而不是 scrap
标签: r web-scraping rvest