
本文详解如何绕过 kununu 动态加载限制,直接调用其后端 rest api 分页获取全部员工评价(含完整文本、评分、时间等),避免 selenium 点击“查看更多”导致的 json 数据滞后问题。
本文详解如何绕过 kununu 动态加载限制,直接调用其后端 rest api 分页获取全部员工评价(含完整文本、评分、时间等),避免 selenium 点击“查看更多”导致的 json 数据滞后问题。
Kununu 的评论页面(如 https://www.kununu.com/de/adidas/kommentare)采用典型的客户端动态渲染 + 服务端分页策略:初始 HTML 中嵌入的 #__NEXT_DATA__ JSON 仅包含首屏(通常为前10条)评论;后续内容通过 Ajax 异步请求加载,而这些请求不会自动更新 #__NEXT_DATA__ 的内容——这正是你遇到“Soup 能看到展开后的内容,但 JSON 始终只有10条”的根本原因。
与其依赖不稳定且易被反爬干扰的浏览器自动化点击(如 show_more_reviews(driver, 2)),更可靠的方式是逆向分析并直接调用 Kununu 的内部评论 API。该 API 设计规范、响应结构清晰,且无需登录或复杂鉴权,是规模化、高稳定性采集的理想路径。
✅ 正确做法:直连评论 API,按页拉取全量数据
首先,需从主页提取企业唯一标识 ID(即 URL 中的 company-id)。Kununu 将其隐藏在任意一条评论链接中(如 <a href="/review/abc123/..."></a>),可通过 BeautifulSoup 快速解析:
from bs4 import BeautifulSoup
import requests
url = "https://www.kununu.com/de/adidas/kommentare"
soup = BeautifulSoup(requests.get(url).content, "html.parser")
# 提取 company ID(位于任意评论链接的第5段路径)
id_ = soup.select_one('a[href*="/review/"]')["href"].split("/")[5]随后,构造 API 请求地址与参数。Kununu 的评论接口格式为:https://www.kununu.com/middlewares/profiles/{country}/{company-slug}/{company-id}/reviews
关键参数说明:
-
fetchFactorScores: 设为"0"表示不拉取维度评分(如工作氛围、薪酬福利等子项),仅主评论; -
reviewType:"employees"(员工评价)或"former_employees"(前员工); -
page: 页码(从1开始),每页默认返回 10 条。
完整示例(获取前2页共20条评论):
api_url = "https://www.kununu.com/middlewares/profiles/de/adidas/{id_}/reviews"
params = {
"fetchFactorScores": "0",
"reviewType": "employees",
"urlParams": "",
"page": "1",
}
for page in range(1, 3): # 可扩展至所需页数,如 range(1, 6) 获取前50条
params["page"] = str(page)
response = requests.get(api_url.format(id_=id_), params=params)
response.raise_for_status()
data = response.json()
for review in data.get("reviews", []):
# 提取核心字段
rating = review.get("rating", 0) # 总体评分(1–5)
date = review.get("date", "")
author_role = review.get("role", "")
# 逐段提取评论正文(支持多段文本,如“优点”“缺点”“建议”)
texts = []
for text_obj in review.get("texts", []):
if text_obj.get("text"):
texts.append(text_obj["text"].strip())
print(f"[评分: {rating}] [{date}] {author_role}")
print("\n".join(texts))
print("-" * 80)⚠️ 注意事项与优化建议
-
分页健壮性:API 返回
data["pagination"]["totalPages"]字段,建议先请求第1页获取总页数,再循环拉取,避免硬编码页数; -
请求头与频率:添加
User-Agent头(如'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'),并控制请求间隔(如time.sleep(1)),降低被限流风险; -
异常处理:
requests.get()应包裹try/except,捕获网络错误、JSON 解析失败及空响应; -
数据完整性:部分评论可能含 HTML 标签(如
<br>),需用html.unescape()或BeautifulSoup(text, "html.parser").get_text()清洗; -
替代方案:若 API 路径变更,可使用浏览器开发者工具(Network → XHR)实时捕获
reviews请求,复现最新 endpoint 与参数。
通过此方法,你将彻底摆脱 Selenium 渲染延迟与 DOM 同步难题,以轻量、高效、可维护的方式获取 Kununu 全量结构化评论数据。

















