You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rvest爬取时未找到CSS选择器返回指定值?

修改Rvest爬虫函数以处理缺失价格的情况

你可以通过在get_price函数里添加判断逻辑,来处理未找到.price选择器的情况。修改后的代码如下:

link <- page %>% html_nodes(".product-item-link") %>% html_attr("href") 

get_price <- function(link){
  item_page <- read_html(link)
  # 获取价格节点文本,用html_text2()自动清理多余空格换行
  item_price <- item_page %>% html_nodes(".price") %>% html_text2() 
  # 判断是否获取到有效价格
  if(length(item_price) == 0){
    return("No Price Info.")
  } else {
    # 若有多个.price节点(比如原价/现价),取第一个结果,可根据需求调整
    return(item_price[1])
  }
}

price <- sapply(link, FUN = get_price, USE.NAMES = FALSE)

关键修改说明:

  • 缺失价格判断:当html_nodes(".price")没有匹配到任何元素时,item_price会是长度为0的向量,此时返回指定提示文本,避免无输出或报错。
  • 文本优化:替换html_text()为html_text2(),这是rvest 1.0.0+版本的新函数,能自动去除文本中的多余空格、换行和制表符,让价格格式更整洁。
  • 多匹配处理:如果页面存在多个.price节点(比如同时显示原价和促销价),代码默认返回第一个匹配结果,你可以根据需求调整为取最后一个、合并文本等逻辑。

如果担心个别链接无法正常加载导致爬取中断,可以进一步添加错误捕获逻辑:

get_price <- function(link){
  tryCatch({
    item_page <- read_html(link)
    item_price <- item_page %>% html_nodes(".price") %>% html_text2() 
    if(length(item_price) == 0){
      return("No Price Info.")
    } else {
      return(item_price[1])
    }
  }, error = function(e){
    # 页面加载失败时返回的提示
    return("Failed to Load Page")
  })
}

这样即使遇到无效链接,整个爬取过程也不会中断,而是返回对应的错误提示。

内容的提问来源于stack exchange,提问作者S C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 09:07:39