R:rvest:如何对节点使用ifelse?

时间:2017-02-19 05:17:46

标签: r rvest

我正在废弃这个页面:

https://www.linio.com.pe/c/tv-y-video/televisores

我想提取目前的电视价格。问题是某些价格在<div>标签内,而其他价格在<span>标签内。

我想知道是否可以使用'ifelse'结构来获取电视的所有当前价格。

#Reads Linio's HTML

linio <- read_html("https://www.linio.com.pe/c/tv-y-video/televisores", encoding = "ISO-8859-1")


#Extracts prices inside the div tag


linio %>% html_nodes("div.price-section div.price-secondary") %>% html_text()


#Extracts prices inside the span tag

linio %>% html_nodes("div.price-section span.price-secondary") %>% html_text()

我试图将div和span标签的价格结合起来:

linio %>% ifelse(length(html_nodes("div.price-section div.price-secondary") %>% html_text())==0, html_nodes("div.price-section span.price-secondary") %>% html_text(), html_nodes("div.price-section div.price-secondary")) %>% html_text()

没有成功......为什么你不能成为Linio的前端开发者......!

1 个答案:

答案 0 :(得分:1)

有多种方法可以实现这一目标:

完全放弃div / span

linio %>% html_nodes("div.price-section .price-secondary") %>% html_text()

这将选择内部具有类price-secondary的所有元素    div.price-section

更具体
只能在div中选择您可以使用的spandiv.price-section标记:

linio %>% 
  html_nodes("div.price-section div.price-secondary, div.price-section span.price-secondary") %>% 
  html_text

有关完整的CSS选择器参考,请参阅    https://www.w3schools.com/cssref/css_selectors.asp

最小的CSS选择器
要查找最小的CSS选择器,请查看http://selectorgadget.com/

在你的情况下,这将是:

   linio %>% html_nodes(".price-secondary") %>% html_text

这将选择类price-secondary

的所有元素

测试所有返回相同的结果

res1 <- linio %>% html_nodes("div.price-section .price-secondary") %>% html_text()
res2 <- linio %>% 
  html_nodes("div.price-section div.price-secondary, div.price-section span.price-secondary") %>% 
  html_text
res3 <- linio %>% html_nodes(".price-secondary") %>% html_text
all(res1 == res2) # TRUE 
all(res2 == res3) # TRUE