我正在尝试从IMDb网页上删除电影详细信息。 问题出在Directors数据上。我只可以抓取第一名导演,但想在每部电影中抓取所有这些。
在下面提到的位置10的页面上,我们有“复仇者联盟-无限战争”,其中的导演是安东尼·鲁索和乔·鲁索。
代码的原始版本。 如您所见,有一个特定的子级设置为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)
}
没有任何错误。只是想扩展功能。
答案 0 :(得分:0)
在应用html_text()
之后,您可以通过字符串操作来获取值。即使看起来有些混乱,它也可以解决问题。
...
...
directors_data <- szczegoly_filmu %>%
html_node('.text-muted+ p') %>%
html_text()%>%
gsub("[|]","",.) %>%
gsub(".*Directors:","",.) %>%
gsub(".*Director:","",.) %>%
gsub("Stars:.*","",.)%>%
gsub("[\n]", "", .) %>%
gsub("^\\s+|\\s+$", "", .)
...
...
给予
Dir Rank IMDBid Title Directors
1 James Wan 1 tt1477834 Aquaman James Wan
2 David Raymond 2 tt6533240 Nomis David Raymond
3 Bob Persichetti 3 tt4633694 Spider-Man: Into the Spider-Verse Bob Persichetti, Peter Ramsey, Rodney Rothman
4 Quentin Tarantino 4 tt0361748 Inglourious Basterds Quentin Tarantino
5 Quentin Tarantino 5 tt0110912 Pulp Fiction Quentin Tarantino
6 Andy Muschietti 6 tt1396484 It Andy Muschietti
7 Lesli Linka Glatter 7 tt0114011 Now and Then Lesli Linka Glatter
8 Bryan Singer 8 tt1727824 Bohemian Rhapsody Bryan Singer
9 Quentin Tarantino 9 tt3460252 The Hateful Eight Quentin Tarantino
10 Anthony Russo 10 tt4154756 Avengers: Infinity War Anthony Russo, Joe Russo