Python新手如何编写爬虫程序来爬取Glassdoor数据?
想找到那些股价被低估的公司做投资
在 glassdoor 公司评分界面按 F12 再按 F5 网页就跳转到报错页面是什么情况?
比如
https://www.glassdoor.com/Overview/Working-at-ASML-EI_IE5781.11,15.htm#trends-overallRating
浏览器是 chrome
Python新手如何编写爬虫程序来爬取Glassdoor数据?
12 回复
不用 F12,右键,检查。。再刷新
要爬Glassdoor,你得先搞定几个关键点:登录、反爬、还有数据解析。直接用requests和BeautifulSoup可能不够,因为Glassdoor的反爬挺严的。这里给你个基础框架,用requests和selenium结合的方式,但注意,这只是一个起点,实际用的时候你得自己处理验证码、动态加载这些麻烦事。
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup
import pandas as pd
# 设置Selenium,用Chrome,记得下对应对的chromedriver
driver = webdriver.Chrome(executable_path='你的chromedriver路径')
wait = WebDriverWait(driver, 10)
def login_glassdoor(email, password):
"""处理登录,Glassdoor登录页面经常变,这个选择器可能需要调整"""
driver.get("https://www.glassdoor.com/profile/login_input.htm")
try:
email_field = wait.until(EC.presence_of_element_located((By.ID, "inlineUserEmail")))
email_field.send_keys(email)
# 注意:Glassdoor有时是点“继续”按钮后出现密码框,这里简化处理
# 实际情况可能需要更复杂的步骤
continue_btn = driver.find_element(By.XPATH, "//button[@type='submit']")
continue_btn.click()
time.sleep(2)
password_field = wait.until(EC.presence_of_element_located((By.ID, "inlineUserPassword")))
password_field.send_keys(password)
submit_btn = driver.find_element(By.XPATH, "//button[@type='submit']")
submit_btn.click()
time.sleep(5) # 等登录完成
except Exception as e:
print(f"登录出错: {e}")
driver.quit()
def scrape_company_reviews(company_url):
"""爬取某个公司页面的评价,这里以评价列表为例"""
driver.get(company_url)
time.sleep(5) # 等页面加载,最好用显式等待替代
all_reviews = []
page_num = 1
while True:
print(f"正在爬取第 {page_num} 页...")
soup = BeautifulSoup(driver.page_source, 'html.parser')
# 找评价容器,Glassdoor的HTML结构可能会变,这个class需要你手动检查更新
review_containers = soup.find_all('div', class_='gdReview')
if not review_containers:
print("没找到评价,可能选择器过时了或者页面结构变了。")
break
for container in review_containers:
try:
# 提取数据,同样,这些class名需要你根据实际页面调整
title = container.find('a', class_='reviewLink').text.strip()
rating = container.find('span', class_='ratingNumber').text.strip()
pros = container.find('span', {'data-test': 'pros'}).text.strip()
cons = container.find('span', {'data-test': 'cons'}).text.strip()
all_reviews.append({
'标题': title,
'评分': rating,
'优点': pros,
'缺点': cons
})
except AttributeError as e:
print(f"解析一条评价时出错: {e}")
continue
# 尝试找“下一页”按钮
try:
next_button = driver.find_element(By.XPATH, "//button[@aria-label='下一页']")
if 'disabled' in next_button.get_attribute('class'):
break
next_button.click()
time.sleep(3) # 等下一页加载
page_num += 1
except:
print("没有下一页了。")
break
return pd.DataFrame(all_reviews)
# 使用示例 - 注意:你需要先有Glassdoor账号
EMAIL = "你的邮箱"
PASSWORD = "你的密码"
COMPANY_URL = "https://www.glassdoor.com/Reviews/公司名-Reviews-E公司ID.htm" # 替换成目标公司
login_glassdoor(EMAIL, PASSWORD)
df_reviews = scrape_company_reviews(COMPANY_URL)
print(df_reviews.head())
df_reviews.to_csv('glassdoor_reviews.csv', index=False, encoding='utf-8-sig')
driver.quit()
核心要点:
- 反爬应对:Glassdoor会用JavaScript加载内容,所以单纯
requests不行。这里用selenium模拟浏览器。但更稳定的方案可以考虑用requests-html或playwright,并合理设置请求头、使用代理IP池。 - 数据定位:网页结构经常变,代码里的
class_='gdReview'这些选择器几乎肯定会失效。你必须自己用浏览器的开发者工具(F12)检查元素,找到最新的正确选择器。 - 登录与道德:爬需要登录的数据可能违反Glassdoor的服务条款。确保你了解相关法律和网站规定,控制爬取速度,避免对服务器造成压力。
- 这个代码只是个架子,实际运行前你得:安装
selenium,beautifulsoup4,pandas;下载匹配你Chrome版本的chromedriver;替换代码中的邮箱、密码、公司URL;并亲自去网站上查看最新的HTML结构,更新所有选择器。
一句话建议:爬Glassdoor核心是动态页面处理和持续维护选择器。
我试了一下 我怎么不会
可是还是一样的
反调试用的,你 ctrl+s,报错页面源代码,把里面的 location、debugger 之类的代码注释掉看看。
很多网站都有反调试的。
并没有报错啊 360 极速浏览器
有成功爬到么?对你的这个主题很感兴趣,希望一起研究!
glassdoor 数据你也信。。。公司花钱就能改的
那有证据没…
自己写的评论莫名被删,网上搜一下,一大把相关的。glassdoor 说穿了就是公司的 branding,和 yelp 没区别。
但是打分应该是可以保留的吧…
doubt

