如何修改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
相关产品推荐
相关产品推荐

