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

请求评审Skytrax网站Rvest爬虫代码及星级评分转数值方法

阿联酋航空Skytrax评论爬虫代码评审与星级评分转换方案

一、现有代码问题与优化建议

原代码存在选择器冗余、数据污染的问题,导致抓取的字段长度不一致、包含无效内容,以下是针对性优化:

  1. 移除冗余选择器.grippy-host
    这个类是页面的拖拽交互元素,不属于评论数据,所有包含它的选择器都会混入无关文本,导致数据混乱。优化后各字段选择器:
library(rvest)
library(dplyr)

link <- "https://www.airlinequality.com/airline-reviews/emirates/page/1/sortby=post_date%3ADesc&pagesize=100"
page <- read_html(link)

# 乘客姓名:精准选择用户状态区的姓名
pax_name <- page %>% html_nodes(".userStatusWrapper span") %>% html_text()

# 评论日期:直接取time标签的文本
date <- page %>% html_nodes("time") %>% html_text()

# 整体评分:取.rating-10下的数值
pax_rating <- page %>% html_nodes(".rating-10 .value") %>% html_text()

# 旅客类型:精准匹配.type_of_traveller的兄弟元素
traveller_type <- page %>% html_nodes(".type_of_traveller + .review-value") %>% html_text()

# 行程验证状态:取评论头部的em标签
trip_verified <- page %>% html_nodes(".review-header em") %>% html_text()

# 机组服务评分:保留星级节点后续处理
crew_service <- page %>% html_nodes(".cabin_staff_service + .stars")

# 是否推荐:修复选择器(原t.recommended错误,应为.recommended)
pax_recommended <- page %>% html_nodes(".recommended + .review-value") %>% html_text()

# 餐饮评分、地面服务评分:保留星级节点后续处理
food_drinks <- page %>% html_nodes(".food_and_beverages + .stars")
ground_service <- page %>% html_nodes(".ground_service + .stars")

# 旅行舱位
travel_class <- page %>% html_nodes(".cabin_flown + .review-value") %>% html_text()
  1. 字段长度一致性处理
    部分评论可能缺失某些字段(如未填写舱位、无地面服务评分),建议用purrr::map配合ifelse处理空值,确保所有字段长度相同,避免数据框创建失败。

二、星级评分转换为数值的方法

Skytrax的星级通过<span class="star fill"></span>表示已填充的星级,未填充的为<span class="star"></span>,可以通过统计每个星级容器下的fill类数量获取数值:

通用转换函数

# 定义星级转换函数:输入stars节点,返回数值评分
star_to_num <- function(star_node) {
  star_node %>% 
    html_nodes(".star.fill") %>% 
    length() %>% 
    as.numeric()
}

# 批量转换各星级字段
crew_service_num <- sapply(crew_service, star_to_num)
food_drinks_num <- sapply(food_drinks, star_to_num)
ground_service_num <- sapply(ground_service, star_to_num)

整合到数据框

将转换后的数值字段替换原字段,创建最终数据框:

emirates_reviews <- data.frame(
  pax_name, 
  date, 
  pax_rating = as.numeric(pax_rating),
  traveller_type, 
  trip_verified,
  crew_service = crew_service_num,
  pax_recommended, 
  food_drinks = food_drinks_num,
  ground_service = ground_service_num,
  travel_class, 
  stringsAsFactors = FALSE
)

额外技术建议

  • 分页爬取:如果需要爬取多页评论,可通过循环修改链接中的page/1为page/2、page/3,并添加延迟(Sys.sleep(2))避免触发反爬机制。
  • 异常处理:添加tryCatch捕获页面加载失败的情况,避免程序中断。
  • 数据清洗:对日期字段用lubridate::dmy转换为日期格式,对pax_recommended转换为布尔值(pax_recommended == "Yes")。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 16:27:20