Я очищаю веб-страницу для образовательных целей.
Я получаю следующие значения: producto
(продукт), precio_antes
(цена_перед), * 1005 * (цена_в настоящее время) и marca
(торговая марка).
Я правильно понимаю продукты, но:
precio_antes
возврат S / 1 399,00 для всех товаров, когда цены различаются precio_actual
возвратNA для всех элементов. marca
возвращает «lg» для всех элементов.
Ожидаемый результат:
| ecommerce | marca | producto | precio_antes | precio_actual | |
|-----------|-------|------------------------------------------|--------------|---------------|---|
| wong | lg | LG Smart TV 49" Full HD 49LK5400 | S/1,399.00 | S/1,299.00 | |
| wong | lg | LG Smart TV 60" 4K UHD 60UK6200 ThinQ AI | S/2,599.00 | S/2,299.00 | |
Current Ouput
| ecommerce | marca | producto | precio_antes | precio_actual | |
|-----------|-------|------------------------------------------|--------------|---------------|---|
| wong | lg | LG Smart TV 49" Full HD 49LK5400 | S/1,399.00 | NA | |
| wong | lg | LG Smart TV 60" 4K UHD 60UK6200 ThinQ AI | S/1,399.00 | NA | |
Я использую RSelenium
, я думаю, мои навыки выбора CSS должны стать лучше.
library(RSelenium)
library(rvest)
library(dplyr)
library(stringr)
#start RSelenium
rD <- rsDriver(port = 4570L, browser = "chrome", version = "latest", chromever = "75.0.3770.90",
geckover = "latest", iedrver = NULL, phantomver = "2.1.1",
verbose = TRUE, check = TRUE)
remDr <- rD[["client"]]
#navigate to your page
remDr$navigate("https://www.wong.pe/tecnologia/televisores/tv")
#scroll down 10 times, waiting for the page to load at each time
for(i in 1:10){
remDr$executeScript(paste("scroll(0,",i*10000,");"))
Sys.sleep(3)
}
#get the page html
page_source<-remDr$getPageSource()
product_info <- function(node){
precio_antes <- html_nodes(node, 'span.product-prices__value') %>% html_text
precio_actual <- html_nodes(node, 'span.product-prices__value product-prices__value--best-price') %>% html_text
marca <- html_nodes(node,"p.brand") %>% html_text
producto <- html_nodes(node,"a.product-item__name") %>% html_text
precio_antes <- gsub("\\S\\/\\. ", "", precio_antes)
precio_actual <- gsub("\\S\\/\\. ", "", precio_actual)
data.frame(
ecommerce = "wong",
marca = ifelse(length(marca)==0, NA, marca),
producto = producto,
precio_antes = ifelse(length(precio_antes)==0, NA, precio_antes),
precio_actual = ifelse(length(precio_actual)==0, NA, precio_actual),
stringsAsFactors=F
)
}
doc <- read_html(iconv(page_source[[1]]), to="UTF-8") %>%
html_nodes("div.category-shelf-wrapper")
wong_tvs <- lapply(doc, product_info) %>%
bind_rows()
Бонус:
Я получаю испанские символы неправильно, даже когда использую:
LG Control Remoto Mágico AN-MR18BA #Should be Mágico
doc <- read_html(iconv(page_source[[1]]), to="UTF-8") %>%
html_nodes("div.category-shelf-wrapper")
Почему?