毕业将近,大部分学生面临找工作的压力,如何快速的找到自己心仪的岗位并且及时投递简历成为同学们关心的问题,我们设计和实现一个爬取boss直聘,招聘网站招聘信息的爬虫。功能有:对boss直聘网站招聘信息详情进行爬取,对爬取出的详情数据进行存储,将其储存到csv表格中,以及数据分析与数据展示。我在本项目中担任了数据爬取与数据存储模块。
--对boss直聘网站招聘信息详情进行爬取,对爬取出的详情数据进行存储。这部分包括搜索想要爬取的工作岗位:
(1)打开指定浏览器、打开制定城市的boss直聘网站、找到搜索框、输入搜索内容、找到搜索按钮、点击搜索。
jobName = 'Java'
cityName = 'chengdu'
url = f'https://www.zhipin.com/{cityName}/'
def main():
web = webdriver.Edge()#选择浏览器
web.get(url) # 打开获取url
searchEle = web.find_element(By.CLASS_NAME, 'ipt-search') # 找到输入框
searchEle.send_keys(jobName) # 输入框中填上工作名称
btnSearch = web.find_element(By.CSS_SELECTOR, 'button.btn.btn-search')
btnSearch.click() # 模拟点击搜索按钮
(2)获取页面内容:获取弹出第一页页面内容、点击岗位详情、打印数据 将字符串转为数组储存到csv中,进行点击下一页。
pageS = 1
while pageS < 100: # page循环
def getOnePage(web, writer):#获取一页内容并写入表格
jobInfos = web.find_elements_by_class_name('job-primary') # 模拟点击岗位详情
for info in jobInfos: # 迭代取出数据
print(info.text) # 打印岗位详情
strText = info.text
arrTxt = strText.split("\n")
tmp = arrTxt[2].split("-") # 将字符串变成数组
arrTxt.insert(2, tmp[0])
writer.writerow(arrTxt) # 将数组写入表格
(3)创建新的csv表格进行数据存储:创建csv表格、写入表头数据、调用getonepage中的数据。
headerRow = [
'岗位名称',
'工作地点',
'起薪',
'薪资区间',
'学历要求',
'联系人',
'公司名称',
'业务范围',
'岗位职责',
'福利待遇',
]
def tableCreater():##创建新的csv表格
with open(fileName, 'a', encoding='utf-8-sig', newline='') as csvfile:
csv_writer = csv.DictWriter(csvfile, fieldnames=headerRow)
csv_writer.writeheader() # 写入表头数据
def getOnePage(web, writer):#获取一页内容并写入表格
三、 数据分析与展示
我们可以通过数据分析清晰的了解到问题发生的原因,整体情况,帮助我们做出合理的规划。
1、首先进行数据清洗
#数据清洗
import pandas as pd
from bar import Bar
content = pd.read_csv(r'D:\PythonWorks\jobwzw\招聘数据.csv', encoding='utf-8')
welfare = content['福利待遇']
welfare_1 = welfare[welfare.notnull()]
welfare_count = pd.value_counts(welfare_1)
#学历要求
content = pd.read_csv(r'D:\PythonWorks\jobwzw\招聘数据.csv', encoding='utf-8')
educational_background = content['学历要求']
educational_background_1 = educational_background[educational_background.notnull()]
educational_background_count = pd.value_counts(educational_background_1).head()
print(educational_background_count)
bar=Bar
bar.add_xaxis(educational_background_count.index.tolist())
bar.add_yaxis("学历要求", educational_background_count.values.tolist())
bar.render('bar.html')
2、将学历要求 以柱状图展示出来
import matplotlib.pyplot as plt
import numpy as np
# 创建一个点数为 8 x 6 的窗口, 并设置分辨率为 80像素/每英寸
plt.figure(figsize=(8, 6), dpi=80)
# 再创建一个规格为 1 x 1 的子图
plt.subplot(1, 1, 1)
# 柱子总数
N = 6
# 包含每个柱子对应值的序列
values = (1638,860,756,664,654,582)
# 包含每个柱子下标的序列
index = np.arange(N)#(0,1,2,3,4,5)分别代表3-5年大专、1-3年大专 、5天/周4个月本科 、5-10年本科 、5-10年大专 ,本科总和
# 柱子的宽度
width = 0.35
# 绘制柱状图, 每根柱子的颜色为紫罗兰色
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
p2 = plt.bar(index, values, width, label="学历要求", color="#87CEFA")
# 设置横轴标签
plt.xlabel('学历要求')
# 设置纵轴标签
plt.ylabel('频数')
# 添加标题
plt.title('各学历对应的频数柱状图')
# 添加纵横轴的刻度
plt.yticks(np.arange(0, 1800, 300))
# 添加图例
plt.legend(loc="upper right")
plt.show()
3、生成词云图
import numpy as np
import csv
# 取第4列
wind_sky_list = []
filename = '招聘数据.csv'
with open(filename, 'r', encoding='UTF-8') as f:
reader = csv.reader(f)
header_row = next(reader)
column1 = [row[4] for row in reader]
wind_sky_list.append(column1)
print(np.shape(wind_sky_list))
print(wind_sky_list)
# 转为txt文件
def text_save(filename, data): # filename为写入txt文件的路径,data为要写入数据列表.
file = open(filename, 'a')
for i in range(len(data)):
s = str(data[i])
s = s.replace("'",' ').replace(',',' ').replace('[',' ').replace(']',' ')+'\n' # 去除单引号,逗号,每行末尾追加换行符
file.write(s)
file.close()
text_save('wind_sky_list5.txt', wind_sky_list)
# 正式开始画词云图
from wordcloud import WordCloud
import PIL.Image as image
import jieba
import numpy as np
def trans_cn(text):
word_list = jieba.cut(text)
result = " ".join(word_list)
return result;
with open("wind_sky_list5.txt") as fp:
text = fp.read()
text = trans_cn(text)
print(text)
# 选了一张背景图片
mask = np.array(image.open("ciyun.png"))
WordCloud = WordCloud(
# 背景图片
mask=mask,
# txt里面有中文的话一定要加这一行代码,不然出来的图会是空的框框!!!
font_path="C:\\Windows\\Fonts\\msyh.ttc"
).generate(text)
image_produce = WordCloud.to_image()
image_produce.show()
4、总结分析:
在对数据爬取的代码编写前进行了html的学习 了解了网站是如何建立起来的;
在做数据分析前期进行了爬虫及数据分析的一些学习,在做数据分析过程中,遇到了许多问题,
比如,函数不是很清楚,写出来的代码老是报错,改了很长时间,请教了别人许多问题,收获颇多!