转眼秋招快到了, 今天来学习一下如何用Python采集全网招聘数据,并进行可视化分析,为就业准备~

话不多说开始造
源码和详细的视频讲解我都打包好了,文末名片自取
 
准备工作
首先你需要准备这些
环境
Python 3.10
 Pycharm
模块
 DrissionPage -> pip install DrissionPage
 csv
新建一个临时 py 文件,并输入以下代码,填入您电脑里的 Chrome 浏览器可执行文件路径,然后运行。
from DrissionPage import ChromiumOptions
path = r'D:\Chrome\Chrome.exe' # 请改为你电脑内Chrome可执行文件路径
ChromiumOptions().set_browser_path(path).save()
爬虫实现的基本流程
一、数据来源分析
1.明确需求
明确采集的网站以及数据内容
- 网址: https://****/web/geek/job?query=python&city=100010000
- 数据: 职位信息
2.抓包分析
通过浏览器开发者工具分析对应的数据位置
- 打开开发者工具 
  - F12 / 右键点击检查选择 network (网络)
 
- 刷新网页
- 通过关键字搜索找到对应的数据位置 
  - 关键字: 需要什么数据就搜什么数据
 

数据包地址:
https://***/wapi/zpgeek/search/joblist.json?scene=1&query=pyth
on&city=100010000&experience=&payType=&partTime=°ree=&industry=&scale=&stage=&p
osition=&jobType=&salary=&multiBusinessDistrict=&multiSubway=&page=1&pageSize=30
二、代码实现步骤
requests基本实现步骤基本步骤分为四步:
1.发送请求: 模拟浏览器对于url地址发送请求
 2.获取数据: 获取服务器返回响应数据
 3.解析数据: 提取我们需要的数据内容
 4.保存数据: 提取的数据保存表格/文本/数据库/json文件中
为什么不选择使用requests去请求获取数据呢?
某些网站数据内容(请求), 存在加密内容->需要JS逆向
 比如: 今晚案例boss -> cookie 中 zp_stoken 时效性
drissionpage 自动化模块
模拟人的行为操作浏览器
- 点击 输入 拖拽 获取数据
1.可以直接通过元素面板, 进行元素定位获取相关数据内容
2.可以直接监听数据, 获取响应数据
 监听数据->在执行动作之前
注意细节:
a.需要配置浏览器可执行文件路径
 b.通过抓包分析找到的数据包链接地址进行的监听, 并且监听数据->在执行动作之前
3.解析数据: 提取我们需要的数据内容
 4.保存数据: 提取的数据保存表格/文本/数据库/json文件中
点击下一页按钮:
1.定位按钮元素
 2.进行相关操作
dp.ele(‘css:.ui-icon-arrow-right’).click()
 -dp.ele() 通过元素定位
 -css:.ui-icon-arrow-right 使用css语法查找元素
 -click() 点击操作
数据可视化
简单使用可视化
# 导入数据处理模块
import pandas as pd
# 导入配置项
from pyecharts import options as opts
# 导入图形
from pyecharts.charts import Pie, Bar, Line
# 导入数据(随机生成数据)
from pyecharts.faker import Faker
 
# 读取csv文件
df = pd.read_csv('data.csv')
# print(df.head())
# 获取x轴数据内容
x_city = df['城市'].value_counts().index.to_list()
# 获取y轴数据内容
y_city = df['城市'].value_counts().to_list()
 
c = (
    Pie()
    .add(
        "",
        [
            list(z)
            for z in zip(
                x_city, # x轴数据
                y_city, # y轴数据
            )
        ],
        center=["40%", "50%"],
    )
    .set_global_opts(
        # 设置可视化标题
        title_opts=opts.TitleOpts(title="Python招聘城市分布情况"),
        legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    # 导出可视化效果: 保存html文件
    .render("pie_Python招聘城市分布情况.html")
)
# 获取x轴数据内容
x_edu = df['学历'].value_counts().index.to_list()
# 获取y轴数据内容
y_edu = df['学历'].value_counts().to_list()
c_bar = (
    Bar()
    .add_xaxis(x_edu)
    .add_yaxis("学历", y_edu, stack="stack1")
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    .set_global_opts(title_opts=opts.TitleOpts(title="Bar-Python招聘学历要求分布情况"))
    .render("bar_Python招聘学历要求分布情况.html")
)
 
# 获取x轴数据内容
x_exp = df['经验'].value_counts().index.to_list()
# 获取y轴数据内容
y_exp = df['经验'].value_counts().to_list()
c_Line = (
    Line()
    .add_xaxis(x_exp)
    .add_yaxis("经验", y_exp, is_connect_nones=True)
    .set_global_opts(title_opts=opts.TitleOpts(title="Line-Python招聘经验要求分布"))
    .render("line_Python招聘经验要求分布.html")
)
效果展示

![[解决方法]git上传的项目markdown文件的图片无法显示](https://i-blog.csdnimg.cn/direct/24780736917a486cacbb6800b86b7c26.png)


















