转眼秋招快到了, 今天来学习一下如何用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")
)
效果展示