如何成功爬取 Payscale 大学薪资报告数据(解决空表与反爬问题)

雨墨小哥_6364

雨墨小哥_6364

2026-09-09

605人浏览

原创

如何成功爬取 Payscale 大学薪资报告数据(解决空表与反爬问题)

payscale 网站采用动态渲染与反爬机制,直接使用 requests + beautifulsoup 会返回空表格;需改用 undetected_chromedriver 模拟真实浏览器行为,并精准定位动态加载的表格结构。

payscale 网站采用动态渲染与反爬机制,直接使用 requests + beautifulsoup 会返回空表格;需改用 undetected_chromedriver 模拟真实浏览器行为,并精准定位动态加载的表格结构。

Payscale 的「College Salary Report」页面(如 majors-that-pay-you-back/bachelors/)并非纯静态 HTML,其核心表格内容由 JavaScript 动态注入,且服务器会检测请求头、User-Agent、JavaScript 执行环境等特征。因此,requests.get() 获取的响应中不包含实际表格 DOM 节点,导致 soup.find_all('table', class_='data-table') 返回空列表——这不是选择器错误,而是内容根本未加载。

✅ 正确方案:使用 undetected_chromedriver(UC)替代常规 Selenium 或 requests。UC 专为绕过 Cloudflare、Distil、PerimeterX 等主流反爬系统设计,能自动规避指纹检测,无需手动配置 headless 参数或 User-Agent。

以下是完整、可运行的爬取教程代码(支持单页解析,可轻松扩展为多页循环):

import time
import pandas as pd
from bs4 import BeautifulSoup
import undetected_chromedriver as uc

# ✅ 关键配置:启用可视化(便于调试),禁用自动化提示
options = uc.ChromeOptions()
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
# 可选:添加 --headless=new 实现无界面运行(生产环境推荐)

driver = uc.Chrome(options=options, headless=False)
url = "https://www.php.cn/link/6312c07423889fb5ff005880166214b1"

try:
    driver.get(url)
    # ⚠️ 必须等待 JS 渲染完成(建议用 WebDriverWait 显式等待更稳健)
    time.sleep(5)

    soup = BeautifulSoup(driver.page_source, "lxml")

    # ? 精准定位:表格在 <tbody> 内,每行 <tr> 包含 5 列关键字段
    rows = soup.select("table.data-table > tbody > tr")
    data = []

    for row in rows:
        try:
            data.append({
                "rank": row.select_one("td.csr-col--rank .data-table__value").get_text(strip=True),
                "major": row.select_one("td.csr-col--school-name .data-table__value").get_text(strip=True),
                "degree": row.select_one("td.csr-col--school-type .data-table__value").get_text(strip=True),
                "early_career_pay": row.select_one("td:nth-of-type(4) .data-table__value").get_text(strip=True),
                "mid_career_pay": row.select_one("td:nth-of-type(5) .data-table__value").get_text(strip=True),
            })
        except AttributeError:
            # 跳过缺失字段的异常行(如广告位、分隔行)
            continue

    df = pd.DataFrame(data)
    print(f"✅ 成功提取 {len(df)} 条专业薪资数据:")
    print(df.head(10))

finally:
    driver.quit()  # ? 务必关闭驱动,避免残留进程<p>? <strong>关键注意事项:</strong>  </p>
<ul>
<li>
<strong>安装依赖</strong>:执行 <code>pip install undetected-chromedriver pandas beautifulsoup4 lxml</code>;注意 UC v3+ 需配合 Chrome 114+,推荐使用 <code>pip install "undetected-chromedriver==3.5.5"</code> 锁定稳定版本。  </li>
<li>
<strong>反爬应对</strong>:切勿使用普通 <code>selenium.webdriver.Chrome</code> —— Payscale 会识别 <code>navigator.webdriver === true</code> 并拒绝响应。UC 自动修复该指纹。  </li>
<li>
<strong>稳定性增强</strong>:生产环境中应替换 <code>time.sleep(5)</code> 为显式等待,例如:  <pre class="brush:php;toolbar:false;">from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.CSS_SELECTOR, "table.data-table tbody tr")))
  • 多页扩展:只需将 URL 改为 f"https://.../bachelors/page/{page}",外层加 for page in range(1, 35) 循环,并合并各页 df 即可(注意添加 time.sleep(1–2) 防触发限速)。
  • 法律与伦理提醒:请遵守 robots.txt(Payscale 允许 /college-salary-report/ 路径抓取),仅用于个人学习或非商业分析,禁止高频请求或数据转售。
  • 通过以上方法,你将稳定获取结构化薪资数据,为后续分析(如专业薪酬趋势、学位回报率建模)奠定可靠基础。

    PHP速学视频免费教程(入门到精通)
    PHP速学视频免费教程(入门到精通)

    PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

    下载

    相关标签:

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    相关专题

    更多
    免费爬虫工具有哪些
    免费爬虫工具有哪些

    免费爬虫工具有Scrapy、Beautiful Soup、ParseHub、Octoparse、Webocton Scriptly、RoboBrowser和Goutte。更多关于免费爬虫工具的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

    2023.11.10

    3973

    9

    Python爬虫获取数据的方法
    Python爬虫获取数据的方法

    Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

    2023.11.13

    653

    12

    Vibeknow在线使用入口合集
    Vibeknow在线使用入口合集

    本专题汇总了Vibeknow在线创作视频的官方入口及网页版使用教程,涵盖PPT、PDF、Word等文档一键转讲解视频的核心操作,并整理了免费版水印规则与手机端浏览器访问指南,助你快速将知识内容视频化。

    2026.09.21

    0

    20

    NumPy随机数文件读写与dtype数据类型
    NumPy随机数文件读写与dtype数据类型

    本专题整理 NumPy 随机数、文件读写与 dtype 数据类型相关教程,覆盖 Generator/random、随机数种子、正态分布采样、npy/npz/CSV/TXT 保存读取、loadtxt/savetxt、memmap、大文件处理、astype 类型转换、结构化 dtype、整数溢出和精度丢失等场景。

    2026.09.21

    0

    24

    NumPy矩阵运算与线性代数计算
    NumPy矩阵运算与线性代数计算

    本专题整理 NumPy 矩阵运算与线性代数计算相关教程,覆盖矩阵乘法、dot 与 @ 运算符、逆矩阵、行列式、特征值与特征向量、SVD、线性方程组、欧氏距离、矩阵分解和大规模矩阵性能优化等内容,帮助读者掌握 np.linalg 与矩阵计算实战。

    2026.09.21

    0

    20

    NumPy广播机制数学运算与统计分析
    NumPy广播机制数学运算与统计分析

    本专题整理 NumPy 广播机制、数组数学运算与统计分析相关教程,覆盖广播规则、维度对齐、矩阵与数组加减除法、向量化计算、均值方差、分位数、中位数、直方图和 unique 频次统计等场景,帮助读者掌握 ndarray 高效计算与统计处理方法。

    2026.09.21

    0

    17

    NumPy数组创建索引切片与数据选择
    NumPy数组创建索引切片与数据选择

    本专题整理 NumPy 数组创建、索引、切片与数据选择相关教程,覆盖 np.array、zeros/ones、多维数组形状、基础切片、花式索引、布尔索引、条件筛选、视图与副本等常用场景,帮助读者系统掌握 ndarray 数据构造与高效提取方法。

    2026.09.21

    0

    12

    Aionclaw智能助手介绍
    Aionclaw智能助手介绍

    本专题汇总了AionClaw(AI龙虾助手)的功能介绍与在线使用入口。AionClaw是杭州趣猿人工智能有限公司推出的桌面级AI智能体,能直接在电脑上读写文件、运行脚本、操作浏览器,自动交付Word、PPT、Excel等成品。

    2026.09.20

    20

    13

    AionClaw AI智能体与电脑自动化任务执行功能使用教程
    AionClaw AI智能体与电脑自动化任务执行功能使用教程

    AionClaw专题整理AI智能体与电脑自动化相关功能使用教程,涵盖安装部署、AI任务执行、Skills技能、文件处理、浏览器控制、电脑操作、持久记忆、聊天工具连接以及办公、编程和内容创作等功能,帮助用户快速掌握AionClaw的实际使用方法。

    2026.09.20

    0

    15

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    热门推荐
    /
    最新课程
    phpStudy极速入门视频教程
    phpStudy极速入门视频教程

    共6课时 | 54.6万人学习

    独孤九贱(4)_PHP视频教程
    独孤九贱(4)_PHP视频教程

    共89课时 | 133.1万人学习