नमस्कार, सब लोग!

काफी समय से मैं डेटा को परिमार्जन करने की कोशिश कर रहा हूं और किसी तरह लापता html_nodes को NA या किसी अन्य चीज़ से बदल देता हूं। हालाँकि, मैं असफल रहा हूँ।

क्या कोई कृपया मुझे यह पता लगाने में मदद कर सकता है कि इसे कैसे किया जाए? या इसे कैसे करना है यह समझने के लिए कहां देखना है?

स्क्रैपिंग के लिए मेरा वर्तमान कोड इस प्रकार है:

library('rvest')
header_bind <- c()
page <- 0
price <- c()
ebay <- c()
runtime <- c()
pages <- 2
for (i in 1:pages) {


    page <- page + 1
    link <- paste("https://www.ebay.com/b/Cell-Phones-Smartphones/9355/bn_320094?LH_BIN=1&LH_ItemCondition=1000&rt=nc&_from=R40&_pgn=",page, sep="")
    webpage <- read_html(link)


    #read the name of the item
    header <- html_nodes(webpage, ".s-item__title")
    header_Text <- html_text(header)

      header_bind <- rbind(header_bind,as.data.frame(header_Text))

    #i get the price
    prim_html <- html_nodes(webpage, ".s-item__price")
    text_prim <- html_text(prim_html)

      price <- rbind(price,as.data.frame(text_prim))

    #i get the (amount sold this is missing sometimes)
    runtime_html <- html_nodes(webpage, ".NEGATIVE")
    text_runtime <- html_text(runtime_html)

      runtime <- rbind(runtime,as.data.frame(text_runtime))

    #prints 0 so i know that it went throught the for(){}
    print(0)
}

पी.एस. मुझे पता है कि यह खराब दिखता है लेकिन मैं हर दिन सीख रहा हूं कि कैसे बेहतर तरीके से कोड किया जाए।

कोड कीमत और उत्पाद के नाम के लिए 48 ऑब्स का उत्पादन करता है, हालांकि, जब बेची गई या शेष मात्रा की बात आती है तो यह मुझे 43 देता है।

मैंने समान स्टैकअतिप्रवाह पोस्ट को देखकर यह जानने की कोशिश की कि दूसरे इसे कैसे कर रहे हैं, हालांकि, मैं किसी तरह उनके विचार को समझ नहीं पाया। मुझे यह विचार था कि मैं इस फ़ंक्शन का उपयोग उस तत्व के लिए कर सकता हूं जिसमें लापता नोड्स हैं लेकिन यह काम नहीं कर रहा था:

text_runtime<- webpage %>% 
      html_nodes(".NEGATIVE") %>% 
      html_text() %>% 
      {if(length(.) == 0) NA else .}

यह फ़ंक्शन मुझे 43 तत्व भी देता है और जहां नोड गुम है वहां कोई NA नहीं डालता है।

0
Ansis Jānis Ozoliņš 3 अप्रैल 2020, 23:16

1 उत्तर

सबसे बढ़िया उत्तर

आपको पहले html_nodes का उपयोग करके .s-item__details को निकालना चाहिए और प्रत्येक नोड से .NEGATIVE या .s-item__hotness को html_node (बिना s) का उपयोग करके निकालना चाहिए।

library('rvest')

pages <- 1
page <- 0
output <- data.frame(header = character(), price = character(), runtime = character())
for (i in 1:pages) {

  page <- page + 1
  link <- paste("https://www.ebay.com/b/Cell-Phones-Smartphones/9355/bn_320094?LH_BIN=1&LH_ItemCondition=1000&rt=nc&_from=R40&_pgn=",page, sep="")

  webpage <- read_html(link)


  #read the name of the item
  header <- html_nodes(webpage, ".s-item__title")
  header_text <- html_text(header)

  #i get the price
  prim_html <- html_nodes(webpage, ".s-item__price")
  text_prim <- html_text(prim_html)

  price <- rbind(price,as.data.frame(text_prim))

  #i get the (amount sold this is missing sometimes)

  item <- html_nodes(webpage, ".s-item__details")
  runtime_html <- html_node(item, ".s-item__hotness")
  text_runtime <- html_text(runtime_html)
  text_runtime[is.na(text_runtime)] <- "0"

  # combine
  out <- data.frame(header_text, text_prim, text_runtime)
  output <- rbind(output, out)

  #prints 0 so i know that it went throught the for(){}
  print(0)

}

output

output

#                                                                                  header_text          text_prim text_runtime
# 1                      Google Nexus 5X H791 32GB (FACTORY UNLOCKED) 5.2" HD - Mint Green LG              $44.88      42 sold
# 2                 Motorola Moto Z3 Play 32GB - Unlocked - Deep Indigo - Brand New - XT1929-4            $177.02   7 watching
# 3                                 LG V20 -Brand New - H915 - Unlocked - Ships Express Canada            $162.16   5 watching
# 4           Samsung Galaxy J3 Unlocked 5" 16GB GSM 4G LTE Android Smartphone Black SM-J320W8             $77.89         0
# 5  New ListingSamsung Galaxy A30s SM-A307GN/DS Dual Sim (FACTORY UNLOCKED) 6.4" 64GB 4GB RAM            $212.43         0
# ...
# ...
# 42                Black phone 2 - 32GB - Black (Unlocked) Smartphone (Rest of World Version)            $318.65   5 watching
# 43                                                                               Sagem MC939            $199.00         0
# 44                                                                        Nokia 6220 classic            $199.00         0
# 45   New ListingSmart Mini Wireless HD Dual WiFi Pocket Projector 2G RAM 16G ROM Android 7.1            $353.35         0
# 46                                                                                nokia 7260            $149.25         0
# 47                                                                                smartphone            $250.00         0
1
nurandi 3 अप्रैल 2020, 21:23