html_nodes返回不同的行数(R)

时间:2017-05-15 15:34:45

标签: html r web-scraping rvest

我是R的新手并试图抓一个网站。该网站包含许多产品及其价格。当我刮掉这个时,不知何故,价格的数量超过了产品的数量。

library(rvest)
url        <- 'https://website'
webpage    <- read_html(url)
SKU_data   <- html_nodes(webpage,'.title') %>% html_text()
Price_data <- html_nodes(webpage,'.price') %>% html_text()
res        <- data.frame(SKU_data,Price_data)

执行时我收到错误

  

data.frame(SKU_data,Price_data)中的错误:         参数意味着不同的行数:511,521

网站上的产品数量是511,但有521个价格。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

不同长度的原因是网站为某些产品提供了多种价格。你想要最低的一个,对吧?最低价格包含在<span style="position:relative;">3 486,-<span class="grn">грн.</span></span>的元素中。使用Xpath,您可以提取:

 SKU_data    <- html_nodes(webpage,'.title') %>% html_text()

 price_xpath <- "//span[contains(@style, 'position:relative')]"
 Price_data  <- html_nodes(webpage, xpath = price_xpath) %>% 
                   html_text()

 res         <- data.frame(SKU_data, Price_data)
 head(res)                                                                                            
 #    SKU_data                                          Price_data
 # 1  Кресло Чинция Пластик Неаполь N-20                1 699,-грн.
 # 2  Стул Луиза хром Неаполь N-20                        479,-грн.
 # 3  OM-100 Стол письменный (1350х600х750мм) бук/бук     659,-грн.