今年大学毕业生预计突破900万大关。
每年毕业的大学生数量是在逐年增加。
根据教育部最新官方数据,预测明年也就是2021年我国高校毕业生人数将达到909万人,首次突破900万人!到2022年,我国高校毕业生人数将超过1000万人!目前我国14亿多人口中,只有1.7亿名大学生,再过10年左右时间,随着各高校毕业生进入社会的各行各业,我国总人口中就会有3亿多名大学生!在这个大学生遍地走的时代,了解各种工作岗位的情况是非常有必要的。
什么是pyecharts?
pyecharts 是一个用于生成 Echarts 图表的类库。
echarts 是百度开源的一个数据可视化 JS 库,主要用于数据可视化。pyecharts 是一个用于生成 Echarts 图表的类库。实际上就是 Echarts 与 Python 的对接。
使用 pyecharts 可以生成独立的网页,也可以在 flask , Django 中集成使用。
pyecharts0.5和1.0在用法上有较大差异,本项目用的是0.5版本
先安装所需的库
pip install pyecharts==0.5.11
pip install echarts-countries-pypkg
pip install pyecharts-snapshot
pip install bs4
pip install pandas
pip install jieba
pip install requests
项目组成
本项目由两个py文件组成 ,最终结果如下
1.数据获取
进入前程无忧官网,随便输入一个关键词,根据分析URL,不难发现他的命名规律
获取数据并存为HTML文件
def getfront(page,item): #爬取函数,page是页数,item是输入的字符串
result = urllib.parse.quote(item)
ur1 = result+',2,'+ str(page)+'.html'
ur2 = 'https://search.51job.com/list/000000,000000,0000,00,9,99,'
res = ur2+ur1
a = urllib.request.urlopen(res)
html = a.read().decode('gbk')
html = html.replace('\\','')
html = html.replace('[', '')
html = html.replace(']', '')
f=open('51job.html','w',encoding='gbk')
f.write(html)
f.close()
# print(html)
return html
通过对HTML文件内容的分析,我们可以通过正则表达式获取其中有用的信息
def getInformation(html):
reg = re.compile(r'\{"type":"engine_search_result","jt":"0".*?"job_href":"(.*?)","job_name":"(.*?)".*?"company_href":"(.*?)","company_name":"(.*?)","providesalary_text":"(.*?)".*?"updatedate":"(.*?)".*?,'
r'"companytype_text":"(.*?)".*?"jobwelf":"(.*?)".*?"attribute_text":"(.*?)","(.*?)","(.*?)","(.*?)","companysize_text":"(.*?)","companyind_text":"(.*?)","adid":""},',re.S)#匹配换行符
items=re.findall(reg,html)
print(items)
return items
将获取到的信息存入XLS表格
for j in range(1, 6): ##需要爬取的页数
print("正在爬取"+item+"第" + str(j) + "页数据...")
html = getfront(j,item)
# print(html)
for i in getInformation(html): #将数据写入Excel表格
# print(i)
sheet1.write(number,0,number)
sheet1.write(number,1,i[1])
sheet1.write(number,2,i[3])
sheet1.write(number,3,i[8])
sheet1.write(number,4,i[6])
sheet1.write(number,5,i[4])
sheet1.write(number,6,i[10])
sheet1.write(number,7,i[9])
sheet1.write(number,8,i[12])
sheet1.write(number,9,i[7])
sheet1.write(number,10,i[5])
number+=1
excel1.save(item+".xls")
time.sleep(0.3)
2.数据清洗
这时的数据我们还不能直接用,其中有空缺或者错位,工资单位也需要统一成万/月,也要筛除其中不符合我们预期的岗位信息,特别需要注意的是每进行一种处理,就要对表格进行重新排序,不然在下一次处理是会有序号缺失导致报错
data = pd.read_excel(item+'.xls')
result = pd.DataFrame(data)
a = result.dropna(axis=0,how='any') #删除有空值的行
pd.set_option('display.max_rows',None) #输出全部行
a = a.reset_index(drop = True) #重新排序
b2 = u'人'
li2 = a['学历要求&