如何利用Python爬虫采集招聘网站的薪资分布数据_通过正则表达式提取数字并计算平均值

浅枫小哥_5643

浅枫小哥_5643

2026-05-15

673人浏览

原创

直接用正则匹配薪资常为空,因html结构混乱、格式多样(如“15k-25k”“面议”“1.2万/月”),单一正则如r'\d+-\d+'会漏单值、带单位或年薪条目;需先清洗文本、再分步提取并归一化数值,最后用iqr等方法过滤异常值。

如何利用python爬虫采集招聘网站的薪资分布数据_通过正则表达式提取数字并计算平均值

为什么直接用正则匹配薪资经常拿到空结果

招聘网站的薪资字段 HTML 结构混乱,常见形式如 "15K-25K"、"面议"、"8000-12000元/月"、"20k·14薪",甚至混有空格、中文顿号、斜杠。正则若只写 r'\d+-\d+',会漏掉单值(如 "18K")、带单位(如 "1.2万")、含年薪标识的条目。

真正有效的做法是分三步清洗:先统一文本为小写并替换中文符号,再提取所有可能的数字片段,最后按上下文判断是否为月薪数值。例如把 "1.5万-2万/月" → "15000-20000",再拆成两个整数。

  • 避免用 re.search(r'(\d+)-(\d+)', text) 直接捕获——它不匹配 "25K" 这类单值
  • 优先用 re.findall(r'[\d.]+[kK\u4e07]?', text) 提取带单位的数字块,再逐个标准化
  • 遇到 "面议"、"薪资面谈" 等明确无数字的字段,直接跳过,别强行转 0

如何把“15K-25K”、“8K”、“1.2万”统一转成月薪整数

关键不是一步正则搞定,而是建立一个转换函数,对每个匹配到的原始字符串做归一化处理。重点在于识别单位(K、k、万)和数量级,并区分是否含“年薪”字样(如 "20k·15薪" 要除以 12)。

python-pro
python-pro

高级 Python 特性、异步编程、性能调优、静态类型、内存管理、Python 内部机制及生态库方面的专家。

下载

示例函数逻辑:

def parse_salary(s):
    s = s.strip().lower().replace(' ', '')
    if '面议' in s or 'negotiable' in s:
        return None
    # 提取数字部分(支持小数、带k/万)
    num_match = re.search(r'([\d.]+)([kK\u4e07]?)', s)
    if not num_match:
        return None
    num, unit = float(num_match.group(1)), num_match.group(2)
    # 单位换算
    if unit == 'k' or unit == 'K':
        base = int(num * 1000)
    elif unit == '万' or unit == '\u4e07':
        base = int(num * 10000)
    else:
        base = int(num)
    # 检查是否含年薪线索(如“14薪”、“年薪”字样)
    if '年薪' in s or '·' in s and any(c in s for c in ['薪', 'x']):
        base = base // 12
    return base
  • 注意 re.search 比 re.findall 更适合单值提取,避免误抓“联系人电话”里的数字
  • 不要用 float() 直接转 "1.5万"——必须先分离数字和单位
  • 实际采集中,建议对每个页面薪资字段单独调用该函数,返回 None 的条目不参与后续统计

计算平均值前必须过滤异常值

爬下来的数据里常混入明显错误值:比如 "3K"(可能是实习生岗但被误标为正式岗)、"99999"(爬虫错位抓到 ID 或时间戳)、"0"(解析失败填充的默认值)。直接求均值会让结果严重失真。

  • 用四分位距(IQR)法过滤:计算 Q1、Q3,剔除 或 <code>> Q3 + 1.5×IQR 的值
  • 设定业务合理区间,如初级岗位排除 或 <code>> 30000 的值(根据城市和职位调整)
  • 保留原始字符串与解析后数值的映射关系,出问题时可快速定位是哪类 HTML 结构导致解析偏差

绕过反爬时,正则提取比 CSS 选择器更稳定吗

不是更稳定,而是更底层、更容错。当网站频繁改 class 名或 DOM 结构时,BeautifulSoup.select('.salary-text') 会大面积失效;而正则作用于原始 HTML 字符串,只要薪资数字还在页面源码里,哪怕被包在 <div data-v-xxx> 或注释中,也能靠模式匹配捞出来。<ul> <li>但代价是:必须用 <code>response.text 而非 response.json() ——现在很多招聘站用 Ajax 加载数据,得先找到真实接口(如 /api/job/search),再对返回 JSON 中的 salary 字段做正则

  • 不要在未解密的 JS 文件里硬扒薪资——有些站点把数字拆成数组再拼接,正则无法还原
  • 如果目标站用了字体图标或 canvas 渲染薪资,正则完全无效,此时需 OCR 或逆向字体映射,不属于本方案范畴
  • 真正难的从来不是写对一行正则,而是确认你拿到的 HTML 片段确实包含未经混淆的明文薪资数字——这步验证比写代码花的时间多得多。

    Python免费学习笔记(深入):立即使用
    在学习笔记中,你将探索 Python 的核心概念和高级技巧!

    相关文章

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

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

    下载

    相关标签:

    python 正则表达式 爬虫

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

    相关专题

    更多
    python打包成可执行文件
    python打包成可执行文件

    本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

    2023.07.20

    1691

    4

    python能做什么
    python能做什么

    python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

    2023.07.25

    4264

    7

    format在python中的用法
    format在python中的用法

    Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

    2023.07.31

    1689

    3

    python教程
    python教程

    Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

    2023.08.03

    24777

    23

    python环境变量的配置
    python环境变量的配置

    Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

    2023.08.04

    3027

    5

    python eval
    python eval

    eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

    2023.08.04

    3047

    5

    scratch和python区别
    scratch和python区别

    scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

    2023.08.11

    1163

    5

    python合并两个列表
    python合并两个列表

    Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

    2023.08.10

    596

    4

    python是前端还是后端
    python是前端还是后端

    Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

    2023.08.11

    2363

    5

    热门下载

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

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程