You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Python版LinkedIn爬虫以获取职位技能信息

解决LinkedIn爬虫无法获取职位技能信息的问题

问题分析

你当前调用的职位详情API(https://www.linkedin.com/voyager/api/jobs/jobPostings/{}?decorationId=com.linkedin.voyager.deco.jobs.web.shared.WebFullJobPosting-65)返回的JSON里不包含技能数据——LinkedIn的技能模块属于独立动态加载内容,不会随主职位详情接口一次性返回,需要单独发起请求获取。

解决方案

1. 定位技能信息的专属API接口

打开浏览器开发者工具(F12),进入目标职位详情页后点击技能菜单,观察Network面板的请求,会发现一个专门返回技能列表的接口,格式类似:

https://www.linkedin.com/voyager/api/jobs/jobPostings/{job_id}/skillRequirements?decorationId=com.linkedin.voyager.deco.jobs.web.shared.WebJobSkillRequirements-3

2. 修改代码添加技能获取逻辑

在你的类中新增获取技能的方法,或者在get_job_details里追加请求逻辑:

新增技能获取方法

def get_job_skills(self, job_id):
    try:
        skill_url = "https://www.linkedin.com/voyager/api/jobs/jobPostings/{}/skillRequirements?decorationId=com.linkedin.voyager.deco.jobs.web.shared.WebJobSkillRequirements-3"
        response = self.sessions[self.session_index].get(skill_url.format(job_id), headers=self.headers[self.session_index])
        if response.status_code == 200:
            return response.json()
        else:
            print(f"获取职位{job_id}技能失败,状态码:{response.status_code}")
            return None
    except Exception as e:
        print(f"获取职位{job_id}技能时出错:{str(e)}")
        return None

在原方法中合并技能数据

修改get_job_details里的else代码块,把技能数据合并到职位详情中:

else:
    self.error_count = 0
    job_data = details.json()
    # 调用方法获取技能并合并
    job_skills = self.get_job_skills(job_id)
    if job_skills:
        job_data['skill_requirements'] = job_skills
    job_details[job_id] = job_data
    print('Job {} done'.format(job_id))

3. 关键注意点

  • 确保技能接口的请求头和主接口完全一致,尤其是Cookie、Csrf-Token、X-Li-Track这些验证字段,避免被LinkedIn拦截。
  • 保持会话切换和请求间隔逻辑,防止触发反爬机制。
  • 不同场景下的decorationId可能有变动,建议通过浏览器抓包确认最新值。

内容的提问来源于stack exchange,提问作者Pablo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 12:52:56