尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

招聘市场数据分析:用 OpenClaw 采集公开招聘信息、分析岗位需求、生成薪资报告

发布时间:2026/9/25 14:32:45

资讯中心
01
ARTICLE

招聘市场数据分析:用 OpenClaw 采集公开招聘信息、分析岗位需求、生成薪资报告

招聘市场数据分析:用 OpenClaw 采集公开招聘信息、分析岗位需求、生成薪资报告
1. 招聘市场数据分析的真实痛点为什么手工整理岗位信息根本跑不通招聘市场数据分析这件事听起来像是把招聘网站上的岗位信息扒下来统计一下就行但真正动过手的人都知道这条链路里埋着好几个坑。我最初的想法也很朴素打开招聘平台搜索目标岗位把岗位名称、薪资、地点、技能要求复制到表格里然后做透视表。结果第一天就发现一个城市一个关键词就有几百条岗位翻页翻到手酸复制粘贴到眼花而且薪资格式五花八门——15-25K·14薪20K-40K面议薪资open根本没法直接统计。更麻烦的是招聘平台的岗位信息是动态渲染的。你用浏览器右键查看源代码会发现岗位列表和详情内容大多是 JavaScript 异步加载出来的静态抓取拿到的只是一个空壳。加上平台对访问频率有控制短时间密集请求很容易触发验证采集任务直接中断。所以想要稳定地做招聘市场数据分析必须有一套能处理动态页面、能控制采集节奏、能把半结构化文本转成结构化字段的管线。这篇文章要解决的就是这条完整链路用 OpenClaw 采集公开招聘信息做字段映射和清洗分析岗位需求最后生成一份可复用的薪资报告。适合谁看如果你是会一点 Python、想搭建招聘数据管线的开发者或者是 HR、行业研究员需要定期产出岗位需求和薪资分析这套流程都能直接拿去改。下面我会把可复制的采集配置、字段映射规则、报告模板和数据校验动作都拆开讲尽量做到跟着做就能跑通。2. 前置准备TaoToken 接入与 OpenClaw 环境搭建2.1 为什么这条管线需要 TaoTokenOpenClaw 负责采集和调度但岗位描述里的技能提取、薪资文本的语义归一化、报告文字的自动生成这些环节需要大模型能力。直接调用模型 API 会碰到两个问题一是不同模型的接口格式不统一切换模型要改代码二是密钥管理和额度控制比较分散。TaoToken 在这里的角色是统一的大模型接入层它提供 OpenAI 兼容的接口格式你可以在一个地方管理密钥、切换模型、查看用量。对招聘数据分析这个场景来说TaoToken 的实用价值在于技能标签提取可以用一个模型薪资报告的文字生成可以换另一个模型而你的采集和清洗代码不用动只需要改配置里的模型名称。这对于需要长期跑、定期出报告的管线来说省去了很多维护成本。2.2 获取 API Key 与配置环境变量先到 TaoToken 控制台创建一个 API Key。地址是 https://taotoken.net/api-keys 登录后新建密钥复制保存好这个 Key 只在创建时完整显示一次。拿到 Key 之后不要硬编码在脚本里用环境变量管理# Linux / macOS export TAOTOKEN_API_KEYsk-你的密钥 export TAOTOKEN_BASE_URLhttps://taotoken.net/api # Windows PowerShell $env:TAOTOKEN_API_KEYsk-你的密钥 $env:TAOTOKEN_BASE_URLhttps://taotoken.net/api如果你用的是 Python建议再装一个 dotenv 来管理本地开发环境pip install python-dotenv requests beautifulsoup4 pandas openpyxl然后在项目根目录建一个.env文件TAOTOKEN_API_KEYsk-你的密钥 TAOTOKEN_BASE_URLhttps://taotoken.net/api2.3 OpenClaw 的安装与基础配置OpenClaw 的安装方式取决于你拿到的发行版本常见的是通过 pip 或者直接克隆仓库。这里以 pip 安装为例pip install openclaw安装完成后初始化一个采集项目openclaw init recruitment-pipeline cd recruitment-pipeline初始化后会生成一个config.yaml这是采集任务的核心配置文件。先看一下默认结构后面我们会针对招聘平台做具体修改。如果你在安装或初始化阶段遇到依赖冲突优先检查 Python 版本OpenClaw 一般要求 3.9 以上。配置模型接入时在config.yaml里加上 TaoToken 的配置段llm: provider: openai-compatible base_url: https://taotoken.net/api api_key: ${TAOTOKEN_API_KEY} model: gpt-4o-mini timeout: 60这里base_url用 TaoToken 的 API 地址model可以先填一个通用模型后面做技能提取和报告生成时再按需切换。配置完成后可以先跑一个连通性测试确认密钥和地址没问题。3. 可复制配置OpenClaw 采集公开招聘信息的完整参数3.1 采集目标与页面结构分析在写采集配置之前先要搞清楚目标页面的结构。以主流综合招聘平台的搜索列表页为例通常包含这些区域搜索框和筛选条件、岗位列表每条包含岗位名称、公司、地点、薪资、发布时间、分页控件。详情页则包含岗位职责、任职要求、公司介绍等长文本。OpenClaw 的采集配置分为两部分列表页采集和详情页采集。列表页负责拿到岗位的 URL 列表和简要字段详情页负责抓取完整描述。下面是一个针对招聘列表页的配置示例tasks: - name: job_list start_urls: - https://example-job-site.com/search?keyword数据分析city北京page1 render: true wait_until: networkidle wait_timeout: 15000 pagination: type: click selector: .pagination .next max_pages: 50 delay: 3 extract: - name: job_title selector: .job-list-item .job-name type: text - name: company selector: .job-list-item .company-name type: text - name: location selector: .job-list-item .job-area type: text - name: salary_raw selector: .job-list-item .salary type: text - name: detail_url selector: .job-list-item .job-name type: attr attr: href几个关键参数说明render: true表示启用无头浏览器渲染这是处理动态页面的核心开关wait_until: networkidle表示等网络请求基本停止后再提取内容避免抓到半渲染的页面pagination里的delay: 3是翻页间隔单位秒这个值不要设太小否则容易触发平台的风控。3.2 详情页采集与字段映射列表页拿到detail_url之后需要进入详情页抓取完整信息。OpenClaw 支持从列表页结果自动派生详情页任务- name: job_detail input_from: job_list.detail_url render: true wait_until: networkidle concurrency: 3 delay: 2 extract: - name: job_title selector: h1.job-title type: text - name: salary_raw selector: .salary-range type: text - name: job_description selector: .job-detail-section .description type: text - name: requirements selector: .job-detail-section .requirements type: text - name: company_info selector: .company-info type: text - name: publish_date selector: .publish-time type: text字段映射的核心思路是把不同平台的字段名统一到一套标准模型上。比如 A 平台的职位名称、B 平台的岗位名、C 平台的job title在输出时都映射为job_title。这样后续分析代码只需要处理一套字段名不用为每个平台写分支。标准字段模型建议包含这些标准字段含义来源示例job_title岗位名称列表页/详情页标题company公司名称列表页公司名location工作地点列表页地区salary_raw原始薪资文本列表页/详情页薪资salary_min薪资下限元/月清洗后生成salary_max薪资上限元/月清洗后生成experience经验要求详情页要求段education学历要求详情页要求段skills技能标签列表模型提取生成publish_date发布时间详情页detail_url详情页链接列表页3.3 采集节奏与合规控制采集配置里最容易出问题的就是节奏控制。我的经验是列表页翻页间隔不低于 3 秒详情页并发不超过 3单次任务总请求量控制在合理范围内。OpenClaw 支持在配置里设置全局的请求间隔和重试策略global: request_interval: 2.5 max_retries: 3 retry_delay: 10 user_agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 respect_robots: truerespect_robots: true表示遵守目标网站的 robots.txt 协议这是合规采集的基本要求。另外采集到的数据只用于内部分析不要对外传播原始岗位信息尤其是涉及公司和个人联系方式的内容。4. 数据清洗与岗位需求分析从原始文本到结构化字段4.1 薪资文本的归一化处理采集到的salary_raw是最脏的字段。常见格式有15-25K、20K-40K·14薪、1.5-2.5万、面议、薪资open、3000-5000元/月。归一化的目标是把这些文本转成统一的月薪数值区间。下面是一段可复用的清洗代码import re def parse_salary(raw): if not raw or any(k in raw for k in [面议, open, Open, OPEN]): return None, None text raw.replace(·, -).replace(薪, ) # 匹配 K 或 万 为单位 match re.search(r(\d\.?\d*)\s*[-~到]\s*(\d\.?\d*)\s*([Kk万wW]), text) if match: low, high, unit float(match.group(1)), float(match.group(2)), match.group(3).lower() if unit in [k, w] and unit k: return int(low * 1000), int(high * 1000) if unit 万 or unit w: return int(low * 10000), int(high * 10000) # 匹配单一数值 single re.search(r(\d\.?\d*)\s*([Kk万wW]), text) if single: val, unit float(single.group(1)), single.group(2).lower() if unit k: return int(val * 1000), int(val * 1000) if unit in [万, w]: return int(val * 10000), int(val * 10000) return None, None这段代码覆盖了大部分常见格式但实际数据里总会有意外。建议在清洗后统计一下salary_min为空的记录占比如果超过 30%说明要么采集字段选错了要么清洗规则需要补充。4.2 用 TaoToken 提取技能标签岗位描述和任职要求是长文本技能标签藏在里面。传统的关键词匹配只能覆盖写出来的技能名但很多岗位会写熟悉主流前端框架而不具体列出 React 或 Vue。这时候用大模型做语义提取效果更好。调用 TaoToken 做技能提取的代码示例import os import requests import json def extract_skills(text): url f{os.getenv(TAOTOKEN_BASE_URL)}/v1/chat/completions headers { Authorization: fBearer {os.getenv(TAOTOKEN_API_KEY)}, Content-Type: application/json } prompt f从下面的岗位描述中提取技能标签只输出 JSON 数组不要解释。 技能包括编程语言、框架、工具、数据库、软技能等。 岗位描述 {text[:2000]} payload { model: gpt-4o-mini, messages: [{role: user, content: prompt}], temperature: 0.1 } resp requests.post(url, headersheaders, jsonpayload, timeout60) content resp.json()[choices][0][message][content] try: return json.loads(content) except json.JSONDecodeError: return []这里把temperature设成 0.1是为了让输出更稳定减少模型自由发挥。提取结果建议再做一次标准化比如把JS和JavaScript统一成同一个标签把React.js和React合并。4.3 岗位需求的多维度统计数据清洗完之后就可以做岗位需求分析了。最基础的几个维度岗位数量按城市分布、按行业分布、技能标签的词频统计、经验要求和学历要求的分布。用 pandas 做技能词频统计import pandas as pd from collections import Counter df pd.read_csv(cleaned_jobs.csv) all_skills [] for skills in df[skills].dropna(): all_skills.extend(eval(skills) if isinstance(skills, str) else skills) skill_counts Counter(all_skills) top_skills pd.DataFrame(skill_counts.most_common(30), columns[skill, count]) print(top_skills)技能组合分析可以用简单的共现统计统计两个技能同时出现在同一个岗位里的次数找出高频组合。这对求职者规划学习路径很有参考价值——比如Python SQL Tableau经常一起出现说明数据分析岗位对这套组合有稳定需求。5. 验证请求与成功结果确认管线跑通5.1 采集结果的完整性校验采集任务跑完之后不要急着做分析先做数据校验。校验分几个层面第一记录数量校验。列表页显示有多少条岗位实际采集到多少条详情两者差距如果超过 10%说明详情页采集有遗漏。可以在 OpenClaw 的日志里查看失败的任务和失败原因。第二字段完整性校验。统计每个字段的空值率import pandas as pd df pd.read_csv(raw_jobs.csv) null_rate df.isnull().mean().sort_values(ascendingFalse) print(null_rate)如果job_title或detail_url这种核心字段空值率超过 5%说明选择器可能失效了需要检查目标页面是否改版。第三重复数据校验。按detail_url去重后看剩余数量print(f去重前: {len(df)}, 去重后: {len(df.drop_duplicates(detail_url))})5.2 模型调用的结果验证技能提取的结果需要抽样验证。随机抽 20 条岗位人工看一下提取出的技能标签是否准确、有没有遗漏明显技能。如果准确率低于 80%可以调整 prompt比如增加只提取明确要求的技能不要推断这样的约束。薪资归一化的验证更直接抽 50 条记录把salary_raw和salary_min/salary_max并排打印出来人工核对换算是否正确。这一步能发现很多边界情况比如15K以下这种表述正则可能匹配不到。5.3 报告生成的成功标准薪资报告生成后检查几个关键点报告里的统计数字和原始数据是否一致比如岗位总数、平均薪资图表是否正常渲染文字描述里的数字有没有和图表对不上。我一般会在报告生成脚本里加一个自检函数把报告里引用的关键指标和数据库里的计算结果做一次比对不一致就报警。6. 本篇常见错排查采集和分析中的高频问题6.1 采集任务失败或数据为空最常见的原因是页面选择器失效。招聘平台改版频率不低class 名称一变选择器就抓不到内容。排查方法是用浏览器的开发者工具重新定位目标元素更新config.yaml里的 selector。另一个原因是动态渲染没等够时间把wait_timeout从 15000 调到 25000 试试。如果采集任务频繁触发验证检查request_interval和concurrency是不是设得太激进。把并发降到 1间隔加到 5 秒先跑通再逐步提速。6.2 薪资解析结果异常如果大量薪资解析为 None先看原始文本长什么样。可能是单位写法不在正则覆盖范围内比如元/天、年薪30万。这时候需要扩展解析规则把日薪、年薪都换算成月薪。另外注意14薪16薪这类表述它影响的是年薪总额如果要做月薪对比需要把年终奖部分摊到月薪里或者单独标注。6.3 模型调用超时或返回格式错误TaoToken 的接口调用超时先检查网络和timeout设置。如果返回的内容不是合法 JSON可能是模型在 JSON 外面加了说明文字。可以在 prompt 里强调只输出 JSON不要任何其他文字或者在代码里做容错用正则把 JSON 部分抠出来。6.4 报告数字对不上报告里的统计数字和数据库不一致通常是数据版本问题——报告用的是缓存数据而数据库已经更新了。检查报告生成脚本的数据源确保它读取的是最新清洗结果。另外如果报告里用了四舍五入注意累计误差关键指标保留原始精度。7. 语义一致 CTA把管线接到实际工作流里这套管线跑通之后你可以把它接到不同的工作流里。如果主要是做采集和接入调试建议先把 API Key 和接入文档过一遍地址在 https://taotoken.net/api-keys 和 https://taotoken.net/doc 把模型调用和采集配置调稳。如果重点是验证不同模型在技能提取和报告生成上的效果可以直接在模型对话里试 prompt地址是 https://taotoken.net/chat 快速对比不同模型的输出质量。如果打算长期跑这套招聘分析管线甚至做成定时任务或 Agent 自动执行那 Coding Plan 更适合地址是 https://taotoken.net/coding-plan 它针对长期编码和自动化场景做了额度和管理上的优化。实际用下来这套管线最大的价值不是一次性的报告而是可复用。采集配置改一下关键词和城市清洗规则扩展一下薪资格式报告模板换一下章节就能快速产出新的分析。招聘市场变化快能持续跑、持续出结果的管线比一次性的手工分析有用得多。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。