如何成功爬取 Payscale 大学薪资报告数据(含反爬应对与结构化解析)

千墨同学_5393

千墨同学_5393

2026-09-09

583人浏览

原创

如何成功爬取 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、行为特征等,常规 requests.get() 极易被拦截或返回无数据的骨架页——这正是你调用 soup.find_all('table', class_='data-table') 得到空列表的根本原因。

✅ 正确方案:使用 undetected_chromedriver(UC)替代 Selenium 原生驱动。它专为绕过 Cloudflare、Distil、PerimeterX 等主流反爬系统设计,能有效模拟真实 Chrome 浏览器指纹,避免被识别为自动化工具。

以下是完整、可运行的教程级实现(支持单页解析,可轻松扩展至多页循环):

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

# ✅ 关键配置:启用无头模式(生产环境推荐),并设置合理等待
options = uc.ChromeOptions()
options.add_argument("--headless")  # 可选:关闭图形界面提升效率
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")

# 启动浏览器(自动下载匹配版本 chromedriver)
driver = uc.Chrome(options=options, use_subprocess=True)

try:
    url = "https://www.php.cn/link/6312c07423889fb5ff005880166214b1"
    driver.get(url)

    # ⚠️ 必须等待 JS 渲染完成!推荐用显式等待(此处简化用 sleep)
    time.sleep(5)  # 实际项目建议用 WebDriverWait 等待 table.data-table 出现

    # 解析页面源码(此时已含动态生成的表格)
    soup = BeautifulSoup(driver.page_source, "lxml")

    # ? 精准定位:先找 tbody,再遍历每行 tr(避免误抓 header 或广告行)
    table_body = soup.select_one("table.data-table > tbody")
    if not table_body:
        raise ValueError("未找到目标表格主体,请检查页面结构是否变更")

    data = []
    for row in table_body.select("tr"):
        try:
            # 使用 CSS 选择器按列语义提取(更稳定,优于位置索引)
            rank = row.select_one("td.csr-col--rank .data-table__value").get_text(strip=True)
            school = 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 = row.select_one("td.csr-col--early-career .data-table__value").get_text(strip=True)
            mid_career = row.select_one("td.csr-col--mid-career .data-table__value").get_text(strip=True)

            data.append({
                "Rank": rank,
                "Major": school,
                "Degree": degree,
                "Early_Career_Pay": early_career,
                "Mid_Career_Pay": mid_career
            })
        except AttributeError:
            # 跳过不完整行(如空行、广告占位符)
            continue

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

finally:
    driver.quit()  # 务必关闭驱动,释放资源

? 关键注意事项与进阶提示:

  • 安装依赖:执行 pip install undetected-chromedriver pandas beautifulsoup4 lxml;首次运行会自动下载 Chromium。
  • 多页抓取:将 URL 改为 f"https://www.payscale.com/.../bachelors/page/{page}",外层加 for page in range(1, 35) 即可,但务必在每次请求后添加 time.sleep(1–2) 避免触发频率限制。
  • 字段健壮性:Payscale 页面结构可能更新(如 class 名变动),建议用 soup.find() + print(soup.prettify()[:2000]) 快速调试 DOM 结构。
  • 法律与伦理:请严格遵守 robots.txthttps://www.php.cn/link/1fbb2eea262d495600ec66f03aea9cfb)及网站 Terms of Service;本教程仅用于学习与个人研究,禁止高频采集或商业用途。
  • 替代方案:若因环境限制无法使用 UC,可尝试添加 headers(含真实 User-Agent、Accept-Language)+ session.cookies.set() 模拟登录态,但成功率远低于浏览器自动化。

掌握此方法,你不仅能稳定获取 Payscale 数据,更能迁移应用于绝大多数现代 SPA(Single Page Application)网站的爬取场景。

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

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

下载

相关标签:

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

相关专题

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

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

2023.11.10

3993

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万人学习