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,你得先搞定几个关键点:登录、反爬、还有数据解析。直接用requestsBeautifulSoup可能不够,因为Glassdoor的反爬挺严的。这里给你个基础框架,用requestsselenium结合的方式,但注意,这只是一个起点,实际用的时候你得自己处理验证码、动态加载这些麻烦事。

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()

核心要点:

  1. 反爬应对:Glassdoor会用JavaScript加载内容,所以单纯requests不行。这里用selenium模拟浏览器。但更稳定的方案可以考虑用requests-htmlplaywright,并合理设置请求头、使用代理IP池。
  2. 数据定位:网页结构经常变,代码里的class_='gdReview'这些选择器几乎肯定会失效。你必须自己用浏览器的开发者工具(F12)检查元素,找到最新的正确选择器。
  3. 登录与道德:爬需要登录的数据可能违反Glassdoor的服务条款。确保你了解相关法律和网站规定,控制爬取速度,避免对服务器造成压力。
  4. 这个代码只是个架子,实际运行前你得:安装selenium, beautifulsoup4, pandas;下载匹配你Chrome版本的chromedriver;替换代码中的邮箱、密码、公司URL;并亲自去网站上查看最新的HTML结构,更新所有选择器

一句话建议:爬Glassdoor核心是动态页面处理和持续维护选择器。

我试了一下 我怎么不会

可是还是一样的

反调试用的,你 ctrl+s,报错页面源代码,把里面的 location、debugger 之类的代码注释掉看看。
很多网站都有反调试的。

并没有报错啊 360 极速浏览器

有成功爬到么?对你的这个主题很感兴趣,希望一起研究!

glassdoor 数据你也信。。。公司花钱就能改的

那有证据没…

自己写的评论莫名被删,网上搜一下,一大把相关的。glassdoor 说穿了就是公司的 branding,和 yelp 没区别。

但是打分应该是可以保留的吧…

doubt

回到顶部