rvest::html_nodes 返回部分列表(仅少数项目)

标签 r web-scraping rvest imdb

使用 rvest 包,我尝试从电影《肯尼迪》( https://www.imdb.com/title/tt0102138/fullcredits?ref_=tt_ql_1 ) 的 IMDB 页面中抓取男女 Actor 的姓名。

SelectorGadget 说我想要查找每个人的名字的地方是“td:nth-child(2)”。

这是我正在使用的代码。

        library(rvest)
        library(stringr)

        startFilm <- "tt0102138" #JFK
        personsNames <- c()
        pagePath <- paste("https://www.imdb.com/title/", startFilm, "/?ref_=nv_sr_1?ref_=nv_sr_1", sep = "")
        moviePage <- read_html(pagePath)
        personNodes <- html_nodes(moviePage, "td:nth-child(2)")
        personText <- html_text(personNodes)
        for (i in 1:length(personText)){
                actor <- (unlist(str_split(personText[i], "\n")))[2]
                personsNames[i] <- substring(actor, 2, nchar(actor))
        }
        personsNames

根据网站https://www.imdb.com/title/tt0102138/fullcredits?ref_=tt_ql_1这个列表应该相当长。

然而,当我运行代码时,我只得到 15 个名字。

[1] "Sally Kirkland"  "Anthony Ramirez" "Ray LePere"      "Steve Reed"      "Jodie Farber"    "Columbia Dubose"
[7] "Randy Means"     "Kevin Costner"   "Jay O. Sanders"  "E.J. Morris"     "Cheryl Penland"  "Jim Gough"
[13] "Perry R. Russo"  "Mike Longman"    "Edward Asner"

为什么姓名列表被截断?

我应该如何调整我的代码以获得电影中 Actor 的完整列表?

最佳答案

这就是我所做的。如果您只需要 Actor ,您可以运行以下代码。我确定了具体位置。这样,您就可以准确获取男 Actor /女 Actor 的名字;不需要字符串操作。

library(rvest)
library(stringi)

read_html("https://www.imdb.com/title/tt0102138/fullcredits?ref_=tt_ql_1") %>% 
html_nodes("td.primary_photo") %>% 
html_nodes("img") %>% 
html_attr("alt")

#  [1] "Sally Kirkland"             "Anthony Ramirez"            "Ray LePere"                 "Steve Reed"                
#  [5] "Jodie Farber"               "Columbia Dubose"            "Randy Means"                "Kevin Costner"  
#[249] "Mark Edward Walters"        "Earl Warren"                "John B. Wells"              "Jim White"                 
#[253] "Phillip L. Willis"          "Rosemary Willis"            "Louis Steven Witt"          "Angus G. Wynne III"

作为奖励,如果您想创建一个包含姓名和角色姓名的数据框,您可以尝试以下操作。

mydf <- tibble(actors = read_html("https://www.imdb.com/title/tt0102138/fullcredits?ref_=tt_ql_1") %>% 
                 html_nodes("td.primary_photo") %>% 
                 html_nodes("img") %>% 
                 html_attr("alt"),
               characters = read_html("https://www.imdb.com/title/tt0102138/fullcredits?ref_=tt_ql_1") %>% 
                 html_nodes(".character") %>% 
                 html_text() %>% 
                 stri_replace_all_regex(pattern = "\\n|\\s{2,}", replacement = ""))

#  actors          characters                             
#   <chr>           <chr>                                  
# 1 Sally Kirkland  Rose Cheramie                          
# 2 Anthony Ramirez Epileptic                              
# 3 Ray LePere      Zapruder                               
# 4 Steve Reed      John F. Kennedy - Double               
# 5 Jodie Farber    Jackie Kennedy - Double(as Jodi Farber)
# 6 Columbia Dubose Nellie Connally - Double               
# 7 Randy Means     Gov. Connally - Double                 
# 8 Kevin Costner   Jim Garrison                           
# 9 Jay O. Sanders  Lou Ivon                               
#10 E.J. Morris     Plaza Witness #1    

关于rvest::html_nodes 返回部分列表(仅少数项目),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59817085/

相关文章:

arrays - 如何将数组/列表添加到对象

r - Likert 包 - include.histogram + ggsave 的问题

javascript - Puppeteer:从单击输入标签按钮后不刷新的页面中抓取 html

r - 网页抓取多页面问题

r - 使用 R 和 rvest 进行网络抓取

r - 如何使用 R(计算环境)创建合理的希尔伯特谱图

r - 计算列表 R 中的唯一组合

python - Selenium 与Python : collecting an email from a form with read only

python - 使用 Python/Selenium 进行 Webscrape Flashscore

r - 在 R 中从维基百科中抓取多个表