如何在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
相关产品推荐
相关产品推荐

