简介:
帮一个朋友写的,做一个通信工程岗位的数据采集加分析,这种招聘网站还是比较简单的没什么反爬虫机制干就完了,分析部分的话有个大坑跟大家说一下用pyecharts库的时候选择0.3.1或者这个之前的版本不然就会不带地图库,这样子我们需要自己单独安装地图库,但是安装完地图库后你会发现你的数据并不能展示是因为pyecharts库版本和地图冲突,pyecharts这个库是百度开发的一个地图库主要大版本分为v0.5和v1.0两种,0.5以下的是通过传递列表的方式1.0通过传递元祖的方式了就.我这里的建议新手还是用我说的这个0.3.1版本吧自带地图包,这个地图不展示的bug是我花了近一天才调通的.
v0.5文档

爬虫部分:

# -*- coding: utf-8 -*-
import re
import requests
from lxml import htmlclass Spider(object):def __init__(self):self.headers = self.headers()def headers(self):headers = {"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Accept-Encoding": "gzip, deflate","Accept-Language": "en-US,en;q=0.5","Connection": "keep-alive","Host": "jobs.51job.com","Upgrade-Insecure-Requests": "1","User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0"}return headersdef get_urls(self,page):url_h = 'http://search.51job.com/list/000000,000000,0000,00,9,99,' + key + ',2,' + str(page) + '.html'response = requests.get(url_h, self.headers, timeout=10)response.decoding = 'gbk'result = re.compile(r'class="t1 ">.*? <a target="_blank" title=".*?" href="(.*?)".*? <span class="t2">',re.S)#无re.S只在每一行内匹配url = re.findall(result, response.text)return urldef switch(self,x):y = ''for i in x:y = y + i + ';'return ydef get_content(self,url):req1 = requests.get(url,self.headers, timeout=10)req1.encoding = 'gbk't1 = html.fromstring(req1.text)try:job_name = t1.xpath('//div[@class="tHeader tHjob"]//h1/text()')[0].strip()company_name = t1.xpath('//p[@class="cname"]//a/text()')[0].strip()job_place = t1.xpath('//p[@class="msg ltype"]/text()')[0].strip().split('-')[0]workExperience = t1.xpath('//p[@class="msg ltype"]/text()')[1].strip()educationBackground = t1.xpath('//p[@class="msg ltype"]/text()')[2].strip()require_num = t1.xpath('//p[@class="msg ltype"]/text()')[3].strip()date = t1.xpath('//p[@class="msg ltype"]/text()')[4].strip()Salary = t1.xpath('//div[@class="tHeader tHjob"]//strong/text()')[0].strip()company_type = t1.xpath('//div[@class="com_tag"]/p/text()')[0].strip()company_num = t1.xpath('//div[@class="com_tag"]/p/text()')[1].strip()company_business = self.switch(t1.xpath('//div[@class="com_tag"]/p//a/text()'))job_treatment = self.switch(re.findall(re.compile(r'<span class="sp4">(.*?)</span>', re.S), req1.text))job_describe = self.switch(t1.xpath('//div[@class="bmsg job_msg inbox"]/p/text()'))content = str(company_name) + ',' + str(job_name) + ',' + str(job_place) + ',' + str(workExperience) + ',' +\str(educationBackground) + ',' + str(require_num) + ',' + str(date) + ',' + str(Salary) + ',' + str(company_type) + ',' + str(company_num) + ',' + str(company_business) + ',' + str(job_treatment)+ ',' + str(job_describe) + '\n'file.write(content)return contentexcept Exception as e:print(e)
if __name__ == '__main__':l = Spider()key = input('输入你想要爬取的信息:')file = open('{}.csv'.format(key), 'w', encoding='gbk')file_head = 'company_name,job_name,job_place,workExperience,educationBackground,require_num,date,Salary,company_type,' \'company_num,company_business,job_treatment,job_describe'+'\n'file.write(file_head)for page in range(1,500):print('正在爬取第{}页信息'.format(page))urls = l.get_urls(page)try:for url in urls:try:data = l.get_content(url)print(data)except :print('gogogo')except Exception as e:print(e)file.close()


分析部分:

# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from pyecharts import Geo,WordCloud,Map,Pieclass Analyze(object):def education_company(self,df):edu = df['educationBackground'].value_counts()y1 = [edu.index[i] for i in range(0, edu.shape[0])]x1 = [edu[i] for i in range(0, edu.shape[0])]ax = plt.figure(figsize=(20, 10))ax1 = ax.add_subplot(1, 2, 1)plt.barh(y1, x1, height=0.2, color='green')plt.xlabel('公司数量')plt.ylabel('学历要求')plt.title('通信工程职位对学历要求条形图')ax2 = ax.add_subplot(1, 2, 2)com = df['company_type'].value_counts()y = [com.index[i] for i in range(0, com.shape[0])]x = [com[i] for i in range(0, com.shape[0])]plt.barh(y, x, height=0.2, color='purple')plt.xlabel('公司数量')plt.ylabel('公司类型')plt.title('通信工程职位公司类型条形图')plt.savefig('通信工程职位学历及公司类型条形图.png')plt.show()def com_type(self,df):workyear = df.loc[:, 'company_type'].value_counts()#print(workyear)y = workyear.values.tolist()x = workyear.index.to_list()plt.figure(figsize=(6, 5))  ## 设置画布plt.bar(range(9), y)  ## 绘制散点图plt.xticks(range(9), x, rotation=25)plt.xlabel('公司类型图')  ## 添加横轴标签plt.ylabel('数量')  ## 添加y轴名称plt.title('通信工程各公司类型图')  ## 添加图表标题plt.savefig('通信工程各公司类型图.jpg')plt.show()def education(self,df):education = df.loc[:, 'educationBackground'].value_counts()num = education.values.tolist()education = education.index.to_list()res = []for one in education:if u'人' not in one and u'educationBackground' not in one:res.append(one)#print(res)education = df.loc[:, 'educationBackground'].value_counts()df = education.reset_index()#print(df)new_df = df.loc[df['index'].isin(res)]#print(new_df)num = new_df['educationBackground'].values.tolist()education = new_df['index'].values.tolist()#print(num)#print(education)plt.figure(figsize=(6, 6))  ## 将画布设定为正方形,则绘制的饼图是正圆explode = [0.01, 0.01, 0.01, 0.01, 0.01, 0.01]  ## 设定各项离心n个半径plt.pie(num, explode=explode, labels=education, autopct='%1.1f%%')  ## 绘制饼图plt.title('通信工程学历要求图')plt.legend(loc="upper right", fontsize=10, bbox_to_anchor=(1.1, 1.05), borderaxespad=0.3)plt.savefig('通信工程公司学历要求饼图.jpg')plt.show()def edu_sal(self,df):d1 = df[['workExperience','low_salary','high_salary']].groupby('workExperience').mean()s1 = d1.indexs11 = d1['low_salary']s12 = d1['high_salary']d2 = df[['educationBackground','low_salary','high_salary']].groupby('educationBackground').mean()s2 = d2.indexs21 = d2['low_salary']s22 = d2['high_salary']p = plt.figure(figsize=(12,6))p1 = p.add_subplot(1,2,1)plt.plot(s1,s11,c='r')plt.plot(s1,s12,c='b')plt.xlabel('工作经验(年)')plt.ylabel('薪资(k/月)')plt.legend(['最低薪资','最高薪资'])plt.title('通信工程职位工作经验对薪资影响折线图')p2 = p.add_subplot(1, 2, 2)plt.plot(s2, s21, c='r')plt.plot(s2, s22, c='b')plt.xlabel('学历')plt.ylabel('薪资(k/月)')plt.legend(['最低薪资', '最高薪资'])plt.title('通信工程职位学历对薪资影响折线图')plt.savefig('通信工程职位工作经验及学历对薪资影响折线图.png')plt.show()def geo_work(self,df):job_place = df['job_place'].value_counts()[0:38]#print(job_place)job_indexs = [x for i, x in enumerate(job_place.index)]#print(job_indexs)counts = [job_place[i] for i in job_indexs]#print(counts)geo = Geo("通信工程职位在全国分布地理坐标系图", title_color="#fff",title_pos="center", width=1200,height=600, background_color='#404a59')geo.add("", attr=job_indexs, value=counts,maptype=u'china', visual_range=[0, 1400], visual_text_color="#fff",symbol_size=19, is_visualmap=True)geo.render('通信工程职位在全国分布地理坐标系图.html')def work_num(self,df):worke = df.loc[:, 'workExperience'].value_counts()# print(workyear)y = worke.values.tolist()x = worke.index.to_list()plt.figure(figsize=(6, 5))  ## 设置画布plt.bar(range(7), y)  ## 绘制散点图plt.xticks(range(7), x, rotation=25)plt.xlabel('工作经验')  ## 添加横轴标签plt.ylabel('数量')  ## 添加y轴名称plt.title('通信工程各公司工作经验图')  ## 添加图表标题plt.savefig('通信工程各公司工作经验图.jpg')plt.show()def job_name_wc(self,df):job_name = df['job_name'].value_counts()job_indexs = [x for i, x in enumerate(job_name.index)]counts = [job_name[i] for i in job_indexs]wordcloud = WordCloud('通信工程工作名称词云图', width=1300, height=620)wordcloud.add("", attr=job_indexs, value=counts, word_size_range=np.arange(100))wordcloud.render('通信工程工作名称词云图.html')if __name__ == '__main__':plt.rcParams['font.sans-serif'] = 'simhei'plt.rcParams['axes.unicode_minus'] = Falsedata = pd.read_csv('job.csv', encoding='gbk', error_bad_lines=False)ana = Analyze()ana.education_company(data)ana.com_type(data)ana.education(data)ana.edu_sal(data)ana.geo_work(data)ana.work_num(data)ana.job_name_wc(data)







前程无忧岗位信息采集+分析相关推荐

  1. python信息采集管理系统_基于Python的求职信息采集分析系统设计与实现

    基于 Python 的求职信息采集分析系统设计与实现 关鑫洁 ; 黄思奇 ; 位磊 [期刊名称] <计算机时代> [年 ( 卷 ), 期] 2020(000)003 [摘要] 为了便于求职 ...

  2. 银行招计算机专业算什么岗,银行计算机专业岗位全方位分析

    黑龙江银行招聘信息陆续发布,中公教育专家为各位考生提供:银行计算机专业岗位全方位分析 !供大家参考,预祝大家取得好成绩,更多黑龙江人民银行招聘相关资料请关注黑龙江银行招聘网. 金融银行部门一直是一个朝 ...

  3. 毕业设计之 ---- 基于大数据挖掘的岗位薪资水平分析

    文章目录 前言 数据预处理 爬虫爬取数据 数据清洗 数据分析 数据可视化分析 最后 - 技术解答 - 项目帮助 前言 今天向大家介绍一个基于大数据分析的毕业设计项目,基于大数据挖掘的岗位薪资水平分析. ...

  4. 基于requests+pyecharts的前程无忧工作岗位可视化分析

    今年大学毕业生预计突破900万大关. 每年毕业的大学生数量是在逐年增加. 根据教育部最新官方数据,预测明年也就是2021年我国高校毕业生人数将达到909万人,首次突破900万人!到2022年,我国高校 ...

  5. java爬取网页数据_利用Python做数据分析—对前程无忧数据类岗位进行分析

    引言 随着时代的发展,我国在各行各业都需要大量的人才引进,处于近几年最热门的行业也称"最火行业":大数据.数据分析.数据挖掘.机器学习.人工智能,这五门行业各有不同又互有穿插.近几 ...

  6. 前程无忧岗位数据可视化分析报告

    1.数据爬取 数据爬取的内容主要包括30个岗位种类(数据分析,产品经理,产品助理,交互设计,前端开发,软件设计,IOS开发,业务分析,安卓开发,PHP开发,业务咨询,需求分析,流程设计,售后经理,售前 ...

  7. 【Power BI+Excel+Python】2019年4月全国数据分析招聘岗位可视化分析

    前言 近几年来,大数据.人工智能.云计算概念如火如荼,而数据分析作为大数据和人工智能领域必备的职能之一,在人才市场上需求越来越强劲. 那,数据分析职位,一般在哪些城市需求较多,各城市分布情况如何?需要 ...

  8. 数据挖掘求职岗位要求分析

    研究数据挖掘有三方面原因: 1. 与研究方向相契合--复杂网络中的传播.包括谣言.舆情.病毒在复杂现实网络或虚拟网络的传播.经过一年摸索明白主要科研步骤基本是建模.再建模.如果想把模型在实际社交网络稍 ...

  9. 深圳市“数据分析”岗位招聘分析—基于拉勾网

    项目说明 该项目的数据来源于2021年9月11日在拉勾网搜索"数据分析",爬取的岗位信息.通过这些数据,主要回答以下几个问题: 1.各区对数据分析岗位的需求情况 2.各行业对数据分 ...

最新文章

  1. Java连接mysql数据库的方式,java连接mysql数据库的方式(4句语句)
  2. 【bzoj3309】DZY Loves Math 莫比乌斯反演+线性筛
  3. Windows 2008在域中不能更改密码策略解决方法
  4. mysql用索性的好处_MySql索引的优缺点
  5. MySQL Group Replication-MGR集群简介
  6. Logistic回归——二分类 —— matlab
  7. 内联函数的意义和使用
  8. 三维点云学习(4)7-ransac 地面分割+ DBSCAN聚类比较
  9. 基于MATLAB的幂级数求和与展开(Taylor和Fourier算法)
  10. 股骨截骨php钢板,最新综述:股骨远端截骨治疗膝关节畸形进展(下)
  11. XiaomiRouter自学之路(02-软硬件环境搭建)
  12. Markdown懒办法排版微信公众号文章
  13. 使用 Google Guava Striped 实现基于 Key 的并发锁
  14. 黑苹果 Monterey wifi 蓝牙驱动 AX系网卡 解决方案
  15. 微信小程序周报(第十二期)-极乐小程序商店出品
  16. 计算机专业水平不足,计算机专业教学存在的问题及完善对策
  17. STM32夺命100问,你知道几个?
  18. Windows系统下为 Python安装 Pcapy模块的方法
  19. Xshell远程登录中方向键及删除键出现乱码问题
  20. 精品MySQL面试题

热门文章

  1. Vue实现在线考试系统
  2. 2023最新教程Fiddler抓包:Fiddler抓包工具使用
  3. 产品经理内功修炼——产品的界面框架设计
  4. 自学Mplus的记录与回顾
  5. 中国十个最值得一去的小镇
  6. 遇上好心的电影售票员
  7. Rpgmakermv(18)GALV RollCredits
  8. shell脚本监控CPU脚本
  9. 利用Cursor体验ChatGPT4.0
  10. 三星的2K曲面屏+骁龙845+后置双摄,售价陷入低谷,仍无人问津