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

使用R爬取Glassdoor医院评论:特定字段提取技术求助

Glassdoor医院评论数据提取完善方案

以下是针对你需求的R代码优化版本,可精准提取Pros、Cons、管理层建议、推荐意愿、CEO认可度、业务前景及分项小评分:

library(rvest)
library(tidyverse)
library(stringr)

# 目标页面URL
url <- "https://www.glassdoor.com/Reviews/Montefiore-Nyack-Hospital-Reviews-E2312619.htm?sort.sortType=RD&sort.ascending=false&filter.iso3Language=eng"
page <- read_html(url)

# 先抓取所有评论节点,避免内容错位
review_nodes <- page %>% html_nodes("li.empReview")

# 1. 评论标题
review_titles <- review_nodes %>% 
  html_node(".reviewLink") %>% 
  html_text(trim = TRUE)

# 2. 评论日期(清理前缀)
review_dates <- review_nodes %>% 
  html_node(".middle.common__EiReviewDetailsStyle__newGrey") %>% 
  html_text(trim = TRUE) %>% 
  str_remove("Reviewed ")

# 3. Pros
review_pros <- review_nodes %>% 
  html_node("[data-test='pros']") %>% 
  html_text(trim = TRUE)

# 4. Cons
review_cons <- review_nodes %>% 
  html_node("[data-test='cons']") %>% 
  html_text(trim = TRUE)

# 5. 给管理层的建议
review_advice <- review_nodes %>% 
  html_node("[data-test='advice-management']") %>% 
  html_text(trim = TRUE)

# 6. 总体评分
review_ratings <- review_nodes %>% 
  html_node(".ratingNumber.mr-xsm") %>% 
  html_text(trim = TRUE) %>% 
  as.numeric()

# 7. 推荐意愿(转换为数值:推荐=1,不推荐=-1,中立=0)
recommendations_text <- review_nodes %>% 
  html_node(".recommends") %>% 
  html_text(trim = TRUE)
recommendations_numeric <- case_when(
  str_detect(recommendations_text, "Recommend") ~ 1,
  str_detect(recommendations_text, "Not Recommend") ~ -1,
  TRUE ~ 0
)

# 8. CEO认可度(提取百分比)
ceo_approval <- review_nodes %>% 
  html_node("[data-test='ceo']") %>% 
  html_text(trim = TRUE) %>% 
  str_extract("\\d+%")

# 9. 业务前景
business_outlook <- review_nodes %>% 
  html_node("[data-test='business-outlook']") %>% 
  html_text(trim = TRUE)

# 10. 分项小评分(工作生活平衡、薪酬福利等5项)
sub_ratings <- review_nodes %>% 
  html_nodes(".subRatings .ratingNumber") %>% 
  html_text(trim = TRUE) %>% 
  as.numeric() %>% 
  matrix(ncol = 5, byrow = TRUE)
sub_ratings_df <- as.data.frame(sub_ratings) %>% 
  set_names(c("WorkLifeBalance", "CompBenefits", "JobSecurity", "Management", "Culture"))

# 合并所有数据为完整数据框
reviews <- tibble(
  Title = review_titles,
  Date = review_dates,
  OverallRating = review_ratings,
  Pros = review_pros,
  Cons = review_cons,
  AdviceToManagement = review_advice,
  Recommend = recommendations_numeric,
  CEOApproval = ceo_approval,
  BusinessOutlook = business_outlook
) %>% 
  bind_cols(sub_ratings_df)

# 查看结果
print(reviews)

关键说明

  • 使用data-test属性选择器:Glassdoor为核心评论元素设置了该属性,比动态class更稳定,不易随页面更新失效
  • 基于单评论节点提取:先抓取所有评论的父节点,再从每个节点内提取字段,彻底避免不同评论内容错位
  • 文本清理:对日期、百分比等字段做了格式整理,直接得到可用数据
  • 分项评分处理:将连续的小评分数值按固定列数拆分为数据框,匹配对应分项名称

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 02:12:42