Glassdoor爬虫评分项顺序变动问题及解决方案咨询
Glassdoor评论评分项动态匹配解决方案
针对Glassdoor评论中评分项顺序不固定的问题,核心思路是基于每个评分项的父容器关联文本标签和对应评分,而非依赖固定索引定位。以下是具体实现方案:
1. DOM结构逻辑梳理
每个评分项(如“工作生活平衡”“企业文化”)都会被包裹在独立容器中,容器内同时包含:
- 评分项的文本标签(如“Work/Life Balance”)
- 对应评分的星星元素(class为
css-xd4dom e1hd5jg10)
只要定位到每个评分项的父容器,就能确保文本和评分一一对应,不受项数变化影响。
2. 代码实现示例
方案一:使用BeautifulSoup(静态页面/已获取HTML源码)
from bs4 import BeautifulSoup # 假设已获取页面HTML并解析为soup对象 reviews = soup.find_all("div", class_="review") # 替换为实际评论容器的class或选择器 for review in reviews: # 定位当前评论下所有评分项的父容器 rating_containers = review.find_all("div", class_="css-1c33izo e1hd5jg11") # 替换为实际评分项容器的选择器 rating_result = {} for container in rating_containers: # 提取评分项文本 label = container.find("span", class_="css-1x2b9a8 e1hd5jg12").get_text(strip=True) # 提取评分值(从星星元素的aria-label属性中获取,格式通常为"4.0 stars") rating_elem = container.find("span", class_="css-xd4dom e1hd5jg10") rating_value = rating_elem.get("aria-label").split()[0] rating_result[label] = rating_value print("当前评论评分:", rating_result)
方案二:使用Selenium(动态渲染页面)
from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get("目标Glassdoor评论页面URL") # 定位所有评论容器 reviews = driver.find_elements(By.CLASS_NAME, "review") for review in reviews: # 定位当前评论下的所有评分项容器 rating_containers = review.find_elements(By.CSS_SELECTOR, "div.css-1c33izo.e1hd5jg11") rating_result = {} for container in rating_containers: # 提取评分项文本 label = container.find_element(By.CLASS_NAME, "css-1x2b9a8.e1hd5jg12").text.strip() # 提取评分值 rating_elem = container.find_element(By.CLASS_NAME, "css-xd4dom.e1hd5jg10") rating_value = rating_elem.get_attribute("aria-label").split()[0] rating_result[label] = rating_value print("当前评论评分:", rating_result) driver.quit()
关键注意事项
- 务必根据实际页面DOM调整选择器:不同地区/版本的Glassdoor可能有class名变化,建议用浏览器开发者工具查看真实元素结构
- 优先使用
aria-label提取评分值:相比解析星星样式或数量,这个属性的取值更直接可靠 - 处理异常场景:部分评论可能无评分项,需加判断避免报错
内容的提问来源于stack exchange,提问作者ULSTEVER
相关产品推荐
相关产品推荐

