使用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
相关产品推荐
相关产品推荐

