本文将详细介绍如何使用Python爬取招聘网站数据,并对数据进行分析和报告的生成。
一、网站数据的爬取
在爬取数据之前,我们需要确定需要的数据,并选择一个招聘网站。这里我们以拉勾为例。拉勾的数据格式较为规范,且提供了数据API,可以直接获取JSON格式的数据。
下面是使用Python的编码过程:
import requests import json import pandas as pd url = 'https://www.lagou.com/jobs/positionAjax.json' headers = { 'Referer': 'https://www.lagou.com/jobs/list_', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0;Win64;x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} params = { 'pn': 1, 'kd': 'python' } session = requests.Session() s = session.post(url, headers=headers, params=params) json_data = json.loads(s.text) df = pd.json_normalize(json_data['content']['positionResult']['result']) df.to_csv('lagou_data.csv', index=False)
代码说明:
使用requests库进行会话管理。headers是请求头,params是请求参数(pn为页码,kd为搜索关键字)。拉勾需要发送POST请求,因此使用session.post()方法进行请求,返回的是JSON格式数据。使用json库将JSON格式数据解析为字典类型,并使用pandas的json_normalize方法将数据规范化为DataFrame类型,保存为CSV文件。
二、数据的清洗和处理
爬取下来的数据中可能存在缺失值、重复值、噪声值,因此需要进行数据的清洗与处理。
我们使用Pandas进行数据的清洗和处理,主要涉及以下几个步骤:
1. 删除不需要的列
2. 删除重复值
3. 删除缺失值
4. 对数据进行类型转换
下面是清洗和处理数据的Python代码:
import pandas as pd df = pd.read_csv('lagou_data.csv') df.drop(['companyId', 'positionType'], axis=1, inplace=True) df.drop_duplicates(subset=['positionId'], keep='first', inplace=True) df.dropna(subset=['salary'], inplace=True) df['salary'] = df['salary'].apply(lambda x: x.split('-')) df['salary_min'] = df['salary'].apply(lambda x: int(x[0].replace('k', ''))*1000) df['salary_max'] = df['salary'].apply(lambda x: int(x[1].replace('k', ''))*1000) df.to_csv('lagou_clean_data.csv', index=False)
代码说明:
使用Pandas中的read_csv方法读取CSV文件,drop()方法可以删除指定的行和列,inplace=True表示直接在原DataFrame中操作。使用subset参数选择去重的列,keep参数选择删除重复项后保留哪一个(first表示保留第一个)。使用dropna()方法删除包含NaN值的行,对于salary列的清洗,使用split方法将工资拆分为最低工资和最高工资,使用lambda表达式进行类型转换和数值处理,最后将清洗后的数据保存为CSV文件。
三、可视化报告的生成
数据清洗完成后,我们可以对数据进行分析和可视化。这里我们使用Matplotlib和Seaborn库来生成可视化报告。主要涉及以下几个步骤:
1. 数据的分组和统计(如对工资进行分组统计)
2. 使用Seaborn生成各种可视化图表(如饼图、直方图、散点图、热力图)
以下是代码实现:
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt df = pd.read_csv('lagou_clean_data.csv') salary_data = df.groupby(['workYear', 'education'])['salary_min', 'salary_max'].mean().reset_index() plt.figure(figsize=(10, 8)) sns.barplot(x='education', y='salary_min', hue='workYear', data=salary_data) plt.title('各学历阶段不同年限岗位最低薪资对比') plt.legend(title='工作年限') plt.show() plt.figure(figsize=(10, 8)) sns.scatterplot(x='salary_min', y='salary_max', data=df) plt.title('最低工资与最高工资散点图') plt.show() plt.figure(figsize=(10, 8)) sns.heatmap(df.corr(), annot=True, cmap='YlGnBu') plt.title('数据相关性分析') plt.show()
代码说明:
使用groupby()方法对workYear和education两个列进行分组,并统计salary_min和salary_max的平均值。使用reset_index()方法将原DataFrame转换为新的DataFrame。使用Seaborn绘制条形图、散点图、热力图等图表,使用Matplotlib设置图表的标题、图例等参数。
四、总结
本文介绍了使用Python爬取招聘网站数据的方法,并对数据进行清洗和处理,最终生成了可视化报告。Python具有强大的数据分析和处理能力,为数据科学家和分析师提供了便捷的数据工具。