学妹刚毕业那天,我连夜用Python采集了上万份岗位数据,只为给她找一份好工作

news2024/12/22 23:58:26

记得学妹刚毕业那天,为了不让学妹毕业就失业,连夜我就用Python采集了上万份岗位,分析出最合适她的工作。

为此,学妹连夜来我家表示感谢😍

我们开始今天的正题吧

首先要准备这些

软件

  • Python 3.8
  • Pycharm

模块使用

  • requests # 数据请求模块 pip install requests
  • execjs # 编译js代码模块 pip install PyExecJS
  • csv 保存表格模块

前两个需要手动安装,win + R 输入cmd 输入安装命令 pip install 模块名 (如果你觉得安装速度比较慢, 你可以切换国内镜像源)

如何实现爬虫程序:

一. 数据来源分析

  1. 明确需求: 明确采集的网站以及数据内容
    - 网址: 猎-聘
    - 数据: 职位信息
  2. 抓包分析: 通过浏览器开发者工具进行抓包分析
    - 打开开发者工具: F12
    - 刷新网页
    - 通过关键字搜索找到对应的数据包
    职位数据包: 猎聘

二. 代码实现步骤

  1. 发送请求 -> 模拟浏览器对于url地址发送请求
  2. 获取数据 -> 获取服务器返回响应数据
  3. 解析数据 -> 提取我们需要的数据内容
  4. 保存数据 -> 保存表格文件中

代码解析

发送请求

# 模拟浏览器
headers = {
    'Cookie': '__uuid=1697715537830.29; __tlog=1697715537842.14%7C00000000%7C00000000%7Cs_00_t00%7Cs_00_t00; XSRF-TOKEN=2Uk6ks7eQzClntAW4e3-rg; __gc_id=b3d87325dfce4ed2a845c293e7719666; _ga=GA1.1.511850321.1697715541; acw_tc=2760828916977155414545948ecf12c457b2d8550e00549caffbda5e0ffef1; Hm_lvt_a2647413544f5a04f00da7eee0d5e200=1697715542; __session_seq=3; __uv_seq=3; Hm_lpvt_a2647413544f5a04f00da7eee0d5e200=1697715546; __tlg_event_seq=52; _ga_54YTJKWN86=GS1.1.1697715541.1.1.1697717226.0.0.0',
    'Host': 'api-c.***网址屏蔽了***.com',
    'Origin': 'https://www.***网址屏蔽了***.com',
    'Referer': 'https://www.***网址屏蔽了***.com/',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
    'X-Client-Type': 'web',
    'X-Fscp-Bi-Stat': '{"location": "https://www.***网址屏蔽了***.com/zhaopin/?inputFrom=www_index&workYearCode=0&key=python&scene=input&ckId=z66s3wh10u4fpsartgqu6hpk0uadh1kb&dq="}',
    'X-Fscp-Fe-Version': '',
    'X-Fscp-Std-Info': '{"client_id": "40108"}',
    'X-Fscp-Trace-Id': '8a1776f0-6366-46c1-88e6-8439dd8e7f2b',
    'X-Fscp-Version': '1.1',
    'X-Requested-With': 'XMLHttpRequest',
    'X-XSRF-TOKEN': '2Uk6ks7eQzClntAW4e3-rg',
}
for page in range(1, 6):
    # 请求链接
    url = 'https://api-c.***网址屏蔽了***.com/api/com.liepin.searchfront4c.pc-search-job'
    # 读取js代码文件
    f = open('猎聘.js', mode='r', encoding='utf-8').read()
    # 编译JS代码文件
    js_code = execjs.compile(f)
    # 调用JS函数获取ckId值
    ckId = js_code.call('r', 32)
    print(ckId)
    # 请求参数
    data = {
        "data":
            {
                "mainSearchPcConditionForm":
                    {
                        "city": "410",
                        "dq": "410",
                        "pubTime": "",
                        "currentPage": page,
                        "pageSize": 40,
                        "key": "python",
                        "suggestTag": "",
                        "workYearCode": "0",
                        "compId": "",
                        "compName": "",
                        "compTag": "",
                        "industry": "",
                        "salary": "",
                        "jobKind": "",
                        "compScale": "",
                        "compKind": "",
                        "compStage": "",
                        "eduLevel": ""
                    },
                "passThroughForm":
                    {
                        "ckId": ckId,
                        "fkId": "yng225lwgtfiy60pn8auwftcpe0c304b",
                        "scene": "page",
                        "sfrom": "search_job_pc",
                        "skId": "yng225lwgtfiy60pn8auwftcpe0c304b",
                    }
            }
    }
    # 发送请求
    response = requests.post(url=url, json=data, headers=headers)

获取响应json数据

json_data = response.json()

解析数据, 提取我们需要职位信息

    job_list = json_data['data']['data']['jobCardList']
    # for循环遍历
    for job in job_list:
        # 提取城市信息 1. 上海 2. 上海-浦东新区
        city_info = job['job']['dq'].split('-')  # --> ['上海'] / ['上海', '浦东新区']
        if len(city_info) == 2:
            # 有两个元素说明含有区域
            city = city_info[0]  # 城市
            area = city_info[1]  # 区域
        else:
            city = city_info[0]  # 城市
            area = '未知'  # 区域
        # 薪资
        salary_info = job['job']['salary'].split('·')
        if len(salary_info) == 2:
            salary = salary_info[0]
            year_money = salary_info[-1]
        else:
            salary = salary_info[0]
            year_money = '12薪'
        # 字典取值提取数据内容
        dit = {
            '职位': job['job']['title'],
            '城市': city,
            '区域': area,
            '薪资': salary,
            '年薪': year_money,
            '经验': job['job']['requireWorkYears'],
            '学历': job['job']['requireEduLevel'],
            '公司': job['comp']['compName'],
            '领域': job['comp']['compIndustry'],
            '规模': job['comp']['compScale'],
            '标签': ','.join(job['job']['labels']),
            '公司详情页': job['comp']['link'],
            '职位详情页': job['job']['link'],
        }
        csv_writer.writerow(dit)
        print(dit)

创建文件对象

csv_file = open('data.csv', mode='w', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(csv_file, fieldnames=[
    '职位',
    '城市',
    '区域',
    '薪资',
    '年薪',
    '经验',
    '学历',
    '公司',
    '领域',
    '规模',
    '标签',
    '公司详情页',
    '职位详情页',
])

写入表头

csv_writer.writeheader()

对本文我还录制了详细的视频讲解,跟代码一起打包好了,文末名片自取即可。

可以看到数据已经获取到,保存在表格里了~

好了,本次分享到这结束了,大家快去试试吧~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1190498.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

棱镜七彩加入UOS主动安全防护计划(UAPP),共建信创生态

近日,在统信UOS主动安全防护计划(UAPP)技术沙龙上,2023年度第二期UAPP合作伙伴授牌发布仪式正式举行。棱镜七彩作为国内专注开源安全与软件供应链安全的创新型厂商,正式获得官方授牌,成为 UAPP 成员单位。 …

2021年09月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 对于数列3,8,11,15,17,19,25,30,44,采用“二分查找”法查找8,需要查找多少次? A:5 B:4 C:3 D:2 答案:D 按二分查找法的规律,每次先查找中间值,进行比较。 第2题…

在vue中如果头像为空时用姓名第一个字当头像

业务场景:当个人资料或者用户头像没有图片时&#xff0c;默认使用户名字中第一个汉字做头像。 效果图&#xff1a; 完整代码&#xff1a; <el-avatarsize"large" style"width: 45px; height: 45px; line-height: 45px; font-size: 24px"v-if"…

无需开发,精臣云可轻松连接用户运营、广告推广等行业应用

精臣智慧标识科技有限公司简介 武汉精臣智慧标识科技有限公司&#xff0c;是国内便携式标签打印机创新品牌和实物管理解决方案服务商。在物品标签还处在繁琐的PC打印时代&#xff0c;精臣公司便创造性地从智能便携角度出发&#xff0c;顺应移动互联时代趋势&#xff0c;推出了…

HarmonyOS开发:回调实现网络的拦截

前言 上一篇文章&#xff0c;分享了一个基于http封装的一个网络库&#xff0c;里面有一个知识点&#xff0c;在初始化的时候&#xff0c;可以设置请求头拦截和请求错误后的信息的拦截&#xff0c;具体案例如下&#xff1a; Net.getInstance().init({netErrorInterceptor: new M…

1995-2020年全国各省二氧化碳排放量面板数据

1995-2020年全国各省二氧化碳排放面板数据 1、时间&#xff1a;1995-2020 2、范围&#xff1a;全国、30省 3、来源&#xff1a;中国能源统计NJ 4、指标&#xff1a; 统计年度、地区代码、地区名称、煤炭二氧化碳排放量、焦炭二氧化碳排放量、原油二氧化碳排放量、汽油二氧…

苹果Apple ID忘了或者咨询其他问题如何让苹果客服打电话给你

环境&#xff1a; iPhone11 Apple ID 问题描述&#xff1a; 苹果Apple ID忘了或者咨询其他问题如何让苹果客服打电话给你 上次公司苹果设备&#xff0c;忘了激活锁的账户密码要向苹果申请解锁&#xff0c;打了很长电话&#xff0c;平时语音超套餐了&#xff0c;想着让他们…

python 删除特定字符所在行

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 查询文件中含有特殊字符串的行 #!/usr/bin/python # -*- coding:utf-8 -*- import re file1 open(test.txt,r) istxt re.compile(r.*if.*,re.I) for line in file1.readlines():line line.strip()ifstr re.findall(istxt…

【好书推荐】计算机考研精炼1000题——考研408不可或缺

《计算机考研精炼1000题》简介 本书根据最新《全国硕士研究生招生考试计算机学科专业基础考试大纲》编写。参考过去十多年的真题&#xff0c;本书精心编排了单项选择题和综合应用题&#xff0c;共约1000道&#xff08;分为上下两册&#xff0c;共24章。上册&#xff08;1&#…

安卓三防手持终端 二维码扫描识别器 pda条码手持机

PDA条码手持机是一种快速的数据采集设备&#xff0c;具备多种数据采集功能并且可以进行二次开发&#xff0c;可以针对性的进行定制服务&#xff0c;满足各种业务需求。因其体积小&#xff0c;易操作、功能全、效率高深受物联网行业的青睐。 条码扫描是PDA重要的功能之一&#…

Java Web 学习笔记(四) —— MyBatis

目录 1 MyBatis 概述2 MyBatis 快速入门3 Mapper 代理开发4 配置文件实现CRUD4.1 环境准备4.2 查询所有数据4.2.1 编写接口方法4.2.2 编写 SQL 语句4.2.3 编写测试方法4.2.4 结果映射问题 4.3 查询详情4.3.1 编写接口方法4.3.2 编写SQL语句4.3.3 编写测试方法 4.4 多条件查询4.…

11月11日|欢迎参加Sui Meetup泰国活动!

现在是Sui基金会与泰国Sui社区见面的时候啦&#xff0c;我们诚邀每个人参加今年最大的Sui Meetup泰国活动&#xff0c;主题是“Summer Paradise&#xff08;夏日天堂&#xff09;”。在活动中&#xff0c;您将会见到来自Sui基金会、ContributionDAO、KX、Inspex、Cryptomind、A…

解决问题:-1: error: LNK1104: 无法打开文件“D3dx9.lib”

解决问题:-1: error: LNK1104: 无法打开文件“D3dx9.lib” 先安装Microsoft DirectX SDK (June 2010)&#xff0c;安装包名字叫DXSDK_Jun10.exe&#xff0c; Microsoft DirectX SDK 2010 版本下载 http://www.microsoft.com/en-us/download/details.aspx?id6812 Version: Date…

Vue 循环el-select 并且不能重复选择相同数据

根据已选择的属性 , 禁用相同属性的选项 ,如果重复则不能再选择 <template><div class"container"><h3>需求&#xff1a;一共4台车 每人只能选择不一样的车 选过的不能再选</h3><divv-for"(item, index) in person.model.selectList…

NFT合约部署

部署合约&#xff1a; 1.web3 NFT合约部署工具 https://remix.ethereum.org/ 2.tron NFT合约部署工具 https://www.tronide.io/ 3.部署 web3 ERC721代码&#xff1a; // SPDX-License-Identifier: MIT pragma solidity ^0.8.2;import "openzeppelin/contracts/token/ERC7…

利用三次样条插值调整鱼眼扭曲程度

本文利用三次样条插值算法&#xff0c;改变鱼眼扭曲程度。效果如下图所示&#xff1a; 源码下载地址&#xff1a;利用三次样条插值算法更改鱼眼特效的扭曲程度资源-CSDN文库 &#xff08;说明&#xff1a;源码基于QT和opencv &#xff09; 主要代码 鱼眼扭曲 void fisheye(…

动态翻页的电子画册制作,原来这么简单!

大家平时有没有见过那种动态翻页效果的电子画册&#xff1f;它要比传统纸质版的画册要时尚且富有质感多了。因为它不仅外观精致&#xff0c;还带有背景音乐、有清脆的翻书声&#xff0c;以及可以插入视频、动画等特效&#xff0c;这么丰富且有趣的动态电子画册谁不喜欢看呢&…

easyscholar配置秘钥连接Zotero-style,更方便的了解文献!

如果你不知道什么是easyScholar,以及怎么安装easyScholar? 请参见文章 easyScholar 一、easyscholar配置秘钥 1.首先打开easyscholar插件&#xff0c;并登录 2.点击自定义数据集 3.依次点击 用户信息-开放接口 4.点击刷新 5.在Zoter中 编辑-首选项-高级-编辑器 6.点击…

文件夹重命名:解决文件夹名称难题,批量将中文翻译成英文

在日常生活和工作中&#xff0c;我们经常需要处理各种各样的文件和文件夹。然而&#xff0c;有时候我们会遇到文件夹名称混乱或者无法识别的问题&#xff0c;这给我们的文件管理和查找带来了很大的不便。为了解决这些问题&#xff0c;我们可以使用文件夹批量重命名技巧&#xf…

Direct3D粒子系统

粒子和点精灵 粒子(是种微小的物体,在数学上通常用点来表示其模型。所以显示粒子时,使用点图元(由 D3 DPRIMITIVETYPE类型的D3 DPT POINTLIST枚举常量表示)是一个很好的选择。但是光栅化时,点图元将被映射为一个单个像素。这样就无法为我们提供很大的灵活性,因为实际应用…