我正在废弃这个页面:
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的前端开发者......!
答案 0 :(得分:1)
有多种方法可以实现这一目标:
完全放弃div
/ span
:
linio %>% html_nodes("div.price-section .price-secondary") %>% html_text()
这将选择内部具有类price-secondary
的所有元素
div.price-section
。
更具体
只能在div
中选择您可以使用的span
和div.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