【问题标题】:R - rvest - scrape all data from p (directors on IMDb page)R - rvest - 从 p 中抓取所有数据(IMDb 页面上的目录)
【发布时间】: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(和 scraperscrapingscraped)而不是 scrap

标签: r web-scraping rvest


【解决方案1】:

您可以在应用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 2019-02-16
    • 2016-10-05
    • 2018-03-20
    • 1970-01-01
    • 2022-08-14
    • 1970-01-01
    相关资源
    最近更新 更多