簡體   English   中英

在 Web 中用 NA 替換缺失值 用 R 抓取

[英]Replace Missing Values with NA in Web Scraping with R

我第一次嘗試使用 web 和 R (rvest) 進行抓取。 我正在嘗試用“NA”替換缺失值,但它似乎根本不起作用。 你們可以檢查下面的代碼,請幫助我嗎?

library(rvest)
library('purrr')


link= "https://www.imdb.com/search/title/?title_type=feature&num_votes=25000,&genres=action&sort=user_rating,desc&start=1&ref_=adv_nxt"
page=read_html(link)

movies<-data.frame(name = page %>% html_nodes(".lister-item-header a") %>% html_text,
year = page %>% html_nodes(".text-muted.unbold") %>% html_text(),
certificate = page %>% html_nodes(".certificate") %>% html_text(),
runtime = page %>% html_nodes(".runtime") %>% html_text(),
genre = page %>% html_nodes(".genre") %>% html_text(),
imdb_rating = page %>% html_nodes(".ratings-imdb-rating strong") %>% html_text(),
director = page %>% html_nodes(".text-muted+ p a:nth-child(1)") %>% html_text(),
number_of_votes = page %>% html_nodes(".sort-num_votes-visible span:nth-child(2)") %>% html_text(),
gross = page %>% html_nodes(".ghost~ .text-muted+ span") %>% html_text())

某些電影缺少證書和總值。 我嘗試了以下方法用 N/A 替換缺失值

certificate = page %>% 
  html_nodes(".certificate") %>% html_text() %>%  gsub('\\s+', ' ', .)
gross = page %>% html_nodes(".ghost~ .text-muted+ span") %>% html_text() %>% replace(!nzchar(.),NA)
certificate = page %>% html_nodes(".certificate") %>% 
  html_text(trim = TRUE) %>%  {if(length(.) == "") NA else .}

他們都不適合我。 命令執行時沒有錯誤,但不會用 NA 替換缺失值,我得到的條目數量較少。

在不替換缺失值的情況下,我無法制作電影數據框,因為出現以下錯誤:

error in data.frame(name = page %>% html_nodes(".lister-item-header a") %>%  : 
  arguments imply differing number of rows: 50, 49, 37

我建議將您的 web 抓取重點縮小到特定的父元素,例如圖像中顯示的卡片,然后遍歷這些元素以提取感興趣的特定子元素。 這種方法將使該過程更有效率和更有針對性。 如果在某些卡片中沒有找到元素,將返回 NA。

在此處輸入圖像描述

library(tidyverse) 
library(rvest)

movies <-
  "https://www.imdb.com/search/title/?title_type=feature&num_votes=25000,&genres=action&sort=user_rating,desc&start=1&ref_=adv_nxt" %>%
  read_html()

movies %>%
  html_elements(".lister-item-content") %>% # the cards
  map_dfr(~ tibble( # interate through the list and grab the elements:
    title = .x %>% 
      html_element(".lister-item-header a") %>% 
      html_text2(), 
    year = .x %>% 
      html_element(".text-muted.unbold") %>% 
      html_text2(), 
    certificate = .x %>% 
      html_element(".certificate") %>% 
      html_text2(), 
    runtime = .x %>% 
      html_element(".runtime") %>% 
      html_text2(), 
    genre = .x %>% 
      html_element(".genre") %>% 
      html_text2(), 
    rating = .x %>% 
      html_element(".ratings-imdb-rating strong") %>% 
      html_text2(), 
    director = .x %>% 
      html_element(".text-muted+ p a:nth-child(1)") %>% 
      html_text2(), 
    votes = .x %>% 
      html_element(".sort-num_votes-visible span:nth-child(2)") %>%  
      html_text2(), 
    gross = .x %>% 
      html_element(".ghost~ .text-muted+ span") %>% 
      html_text2()
  )) 

結果

# A tibble: 50 × 9
   title                           year  certi…¹ runtime genre rating direc…² votes gross
   <chr>                           <chr> <chr>   <chr>   <chr> <chr>  <chr>   <chr> <chr>
 1 "The Dark Knight"               (200… 15      152 min Acti… 9.0    Christ… 2,66… $534…
 2 "Ringenes herre: Atter en kong… (200… 12      201 min Acti… 9.0    Peter … 1,85… $377…
 3 "Inception"                     (201… 15      148 min Acti… 8.8    Christ… 2,36… $292…
 4 "Ringenes herre: Ringens brors… (200… 12      178 min Acti… 8.8    Peter … 1,88… $315…
 5 "Ringenes herre: To t\u00e5rn"  (200… 12      179 min Acti… 8.8    Peter … 1,67… $342…
 6 "The Matrix"                    (199… 15      136 min Acti… 8.7    Lana W… 1,92… $171…
 7 "Star Wars: Episode V - Imperi… (198… 9       124 min Acti… 8.7    Irvin … 1,29… $290…
 8 "Soorarai Pottru"               (202… NA      153 min Acti… 8.7    Sudha … 117,… NA   
 9 "Stjernekrigen"                 (197… 11      121 min Acti… 8.6    George… 1,37… $322…
10 "Terminator 2 - Dommens dag"    (199… 15      137 min Acti… 8.6    James … 1,10… $204…
# … with 40 more rows, and abbreviated variable names ¹​certificate, ²​director
# ℹ Use `print(n = ...)` to see more rows

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM