用python爬取前程无忧网大数据岗位信息并分析

爬虫的基本思路

1、在前程无忧官网检索“大数据”的结果中,每条检索结果详情对应的URL存在a标签的href属性中,通过组合选择器可以找到每条检索结果详情的URL。

2、前程无忧的招聘岗位信息数据固定的放在HTML的各个标签内,通过id选择器、标签选择器和组合选择器可以诸如公司名、岗位名称和薪资等11个字段的数据。

3、基于上述1和2,可以通过解析检索“大数据”得到的URL得到其HTML,再从此HTML中的具体位置的a标签得到每个岗位的详情对应的URL;然后解析每个岗位的详情对应的URL得到其HTML,再从结果HTML的具体位置找到每个岗位的详情。具体位置怎么确定呢?通过组合选择器!

前程无忧爬虫具体代码

SpiderOf51job.py

import requests
from lxml import etree
import csv
import time
import random
'''
更多Python学习资料以及源码教程资料,可以在群1136201545免费获取
'''
fp = open('51job.csv', 'wt', newline='', encoding='GBK', errors='ignore')
writer = csv.writer(fp)
'''title,salary,company,companyinfo,companyplace,place,exp,edu,num,time,info'''
writer.writerow(('职位', '薪资', '公司', '公司信息', '公司地址', '地区', '工作经验', '学历', '人数', '时间', '岗位信息'))def parseInfo(url):headers = {'User-Agent': 'Opera/9.80 (Android 2.3.4; Linux; Opera Mobi/ADR-1301071546) Presto/2.11.355 Version/12.10'}#更换请求头,防止被反爬虫res = requests.get(url, headers=headers)res.encoding = 'utf-8'selector = etree.HTML(res.text)title = selector.xpath('//*[@id="pageContent"]/div[1]/div[1]/p/text()')salary = selector.xpath('//*[@id="pageContent"]/div[1]/p/text()')company = selector.xpath('//*[@id="pageContent"]/div[2]/a[1]/p/text()')companyinfo = selector.xpath('//*[@id="pageContent"]/div[2]/a[1]/div/text()')companyplace = selector.xpath('//*[@id="pageContent"]/div[2]/a[2]/span/text()')place = selector.xpath('//*[@id="pageContent"]/div[1]/div[1]/em/text()')exp = selector.xpath('//*[@id="pageContent"]/div[1]/div[2]/span[2]/text()')edu = selector.xpath('//*[@id="pageContent"]/div[1]/div[2]/span[3]/text()')num = selector.xpath('//*[@id="pageContent"]/div[1]/div[2]/span[1]/text()')time = selector.xpath('//*[@id="pageContent"]/div[1]/div[1]/span/text()')info = selector.xpath('string(//*[@id="pageContent"]/div[3]/div[2]/article)')#类选择器解析URL中对应HTML对应的字段内容info = str(info).strip()print(title, salary, company, companyinfo, companyplace, place, exp, edu, num, time, info)writer.writerow((title, salary, company, companyinfo, companyplace, place, exp, edu, num, time, info))def getUrl(url):print('New page')res = requests.get(url)res.encoding = 'GBK'# print(res.text)if res.status_code == requests.codes.ok:selector = etree.HTML(res.text)urls = selector.xpath('//*[@id="resultList"]/div/p/span/a/@href')#                      //*[@id="resultList"]/div/p/span/a# id选择器找到当前网页每一个职位a标签对应的当前岗位具体信息URL列表print(urls)for url in urls:parseInfo(url)time.sleep(random.randrange(1, 4))#设置线程休眠时间防止被反爬虫if __name__ == '__main__':key = '大数据'# 第一页URL格式和后面的网页不一样url = 'https://search.51job.com/list/000000,000000,0000,00,9,99,' + key + ',2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare='getUrl(url)# 后页[2,100)urls = ['https://search.51job.com/list/000000,000000,0000,00,9,99,' + key + ',2,{}.html?lang=c&stype=1&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare='.format(i) for i in range(2, 100)]for url in urls:getUrl(url)

爬虫结果

爬虫结果我是以csv的格式存储的,看起来不太直观,所以我打算用wordcloud和直方图来可视化爬虫的结果。
在这里插入图片描述

爬虫结果处理

一般来说,应聘者对一个工作的地点、工作名称、薪资和需要的技术最为关心,刚好上述爬虫的结果包含了这四个字段。

1、薪资结果的处理。在爬虫结果中,薪资在第二列,一般是诸如“1-2万/月”、“20万/年”和“500/天”的结果,先判断每个结果的最后一个字符是“年”、“月”和“天”的哪一个,确定处理的逻辑之后,再用re.sub函数将除了数字之外的字符替换为空格,最后对结果求均值就到了了每个结果的均值。

wordcloudPlotSalary.py

import re
import matplotlib.pyplot as plt
import csv
import numpy as npdata = []
with open("51job.csv",encoding='gbk') as csvfile:csv_reader = csv.reader(csvfile)  # 使用csv.reader读取csvfile中的文件data_header = next(csv_reader)  # 读取第一行每一列的标题for row in csv_reader:  # 将csv 文件中的数据保存到data中data.append(row)data = np.array(data)  # 将list数组转化成array数组便于查看数据结构
header = np.array(data_header)
Jobinfo=data[:,10];
Salary=data[:,1];
name=data[:,0];
place=data[:,5];word="".join(Salary);font=r'C:\\Windows\\fonts\\msyh.ttf'#显示中文的关键步骤# 去掉英文,保留中文
resultword=re.sub("[A-Za-z\[\`\~\!\@\#\$\^\&\*\(\)\=\|\{\}\'\:\;\'\,\[\]\<\>\?\~\。\@\#\\\&\*\%]", " ",word)
# 现在去掉了中文和标点符号
wl_space_split = resultword
salary_info=wl_space_split.split();
salary_list=[];for s in salary_info:if(s[-1])=="年":ans=re.sub("[\u4e00-\u9fa5A-Za-z\/\-]", " ",s).split()sum=0;for i in ans:sum+=float(i)avg=sum/len(ans)/12elif (s[-1])=="月":ans = re.sub("[\u4e00-\u9fa5A-Za-z\/\-]", " ", s).split()sum=0;for i in ans:sum+=float(i)avg=sum/len(ans)elif (s[-1])=="天":ans = re.sub("[\u4e00-\u9fa5A-Za-z\/\-]", " ", s).split()sum=0;for i in ans:sum+=float(i)avg=sum/len(ans)*30salary_list.append(avg)salary_array = np.array(salary_list)
salary_array[salary_array>6]=-0.00001 #剔除大于6的异常数据或者不合实际的数据
plt.rcParams['font.sans-serif']=['SimHei']
plt.hist(salary_array, bins =  [0,1,2,3,4,5,6])plt.xlabel("工资区间(单位:万/月)") #设置X轴Y轴名称
plt.ylabel("数量")
plt.title("前程无忧大数据岗位工资(N="+str(len(salary_array))+",mean="+ str(round(salary_array.mean(),2))+ "万/月)")
plt.savefig('salaryHist.jpg')
plt.show();

在这里插入图片描述
2、需要的技术的处理。考虑到大数据要使用的技术绝大多数由外国人开发,如实我把大数据要使用的技术这一字段的中文全部替换为空格,然后用jieba提出掉一些无意义的助词,就得到了大数据要使用的技术的词云图。

wordcloudPlotJobinfo.py

import re
import jieba
from wordcloud import WordCloud,ImageColorGenerator,STOPWORDS
import  matplotlib.pyplot as plt
import csv
import numpy as np
'''
更多Python学习资料以及源码教程资料,可以在群1136201545免费获取
'''
data = []
with open("51job.csv",encoding='gbk') as csvfile:csv_reader = csv.reader(csvfile)  # 使用csv.reader读取csvfile中的文件data_header = next(csv_reader)  # 读取第一行每一列的标题for row in csv_reader:  # 将csv 文件中的数据保存到birth_data中data.append(row)data = np.array(data)  # 将list数组转化成array数组便于查看数据结构
header = np.array(data_header)
Jobinfo=data[:,10];
Salary=data[:,1];
name=data[:,0];
place=data[:,5];word="".join(Jobinfo);font=r'C:\\Windows\\fonts\\msyh.ttf'#显示中文的关键步骤# 去掉英文,保留中文
resultword=re.sub("[0-9\u4e00-\u9fa5\[\`\~\!\@\#\$\^\&\*\(\)\=\|\{\}\'\:\;\'\,\[\]\.\<\>\/\?\~\。\@\#\\\&\*\%\-]", "",word)
# 现在去掉了中文和标点符号
wordlist_after_jieba = jieba.cut(resultword)
wl_space_split = " ".join(wordlist_after_jieba)
print(wl_space_split);
# 设置停用词
sw = set(STOPWORDS)
sw.add(",")
sw.add(";")
sw.add("Responsibilities")
sw.add("experience")
sw.add("knowledge")
sw.add("communication")
sw.add("skill")
sw.add("office")
sw.add("support")
# 关键一步
my_wordcloud = WordCloud(font_path=font,scale=4,stopwords=sw,background_color='white',max_words = 100,max_font_size = 60,random_state=20).generate(wl_space_split)#显示生成的词云
plt.imshow(my_wordcloud)
plt.axis("off")
plt.show()#保存生成的图片
my_wordcloud.to_file('Jobinfo.jpg')

在这里插入图片描述
3、工作地点和职位名称的处理

wordcloudPlotPlace.py

import numpy as np
from PIL import Image
import re
import jieba
from wordcloud import WordCloud,ImageColorGenerator,STOPWORDS
# import wordcloud
import  matplotlib.pyplot as plt
import csv
import numpy as np
'''
更多Python学习资料以及源码教程资料,可以在群1136201545免费获取
'''
data = []
with open("51job.csv",encoding='gbk') as csvfile:csv_reader = csv.reader(csvfile)  # 使用csv.reader读取csvfile中的文件data_header = next(csv_reader)  # 读取第一行每一列的标题for row in csv_reader:  # 将csv 文件中的数据保存到birth_data中data.append(row)data = np.array(data)  # 将list数组转化成array数组便于查看数据结构
header = np.array(data_header)
Jobinfo=data[:,10];
Salary=data[:,1];
name=data[:,0];
place=data[:,5];
# 打开存放项目名称的txt文件
# with open('content.txt','r',encoding='utf-8') as f:
#    word= (f.read())
#    f.close()
str="";
word=str.join(place);# 图片模板和字体
# image=np.array(Image.open('ditu.jpg'))#显示中文的关键步骤
font=r'C:\\Windows\\fonts\\msyh.ttf'# 去掉英文,保留中文
resultword=re.sub("[A-Za-z0-9\[\`\~\!\@\#\$\^\&\*\(\)\=\|\{\}\'\:\;\'\,\[\]\.\<\>\/\?\~\。\@\#\\\&\*\%\-]", "",word)
#resultword=re.sub("[A-Za-z0-9\[\`\~\!\@\#\$\^\&\*\(\)\=\|\{\}\'\:\;\'\,\[\]\.\<\>\/\?\~\。\@\#\\\&\*\%]", "",word)
# 现在去掉了中文和标点符号
wordlist_after_jieba = jieba.cut(resultword)
wl_space_split = " ".join(wordlist_after_jieba)
print(wl_space_split);
# 设置停用词
sw = set(STOPWORDS)
sw.add("研发")
sw.add("系列")
sw.add("区")# 关键一步
my_wordcloud = WordCloud(font_path=font,scale=4,stopwords=sw,background_color='white',max_words = 100,max_font_size = 60,random_state=20).generate(wl_space_split)
#my_wordcloud = WordCloud(background_color='white',
#                         width=800,height=600,margin=2).generate(wl_space_split)
#显示生成的词云
plt.imshow(my_wordcloud)
plt.axis("off")
plt.show()#保存生成的图片
my_wordcloud.to_file('place.jpg')

在这里插入图片描述
职位名称词云:

wordcloudPlotName.py

import re
from wordcloud import WordCloud,ImageColorGenerator,STOPWORDS
import  matplotlib.pyplot as plt
import csv
import numpy as np
'''
更多Python学习资料以及源码教程资料,可以在群1136201545免费获取
'''
data = []
with open("51job.csv",encoding='gbk') as csvfile:csv_reader = csv.reader(csvfile)  # 使用csv.reader读取csvfile中的文件data_header = next(csv_reader)  # 读取第一行每一列的标题for row in csv_reader:  # 将csv 文件中的数据保存到birth_data中data.append(row)data = np.array(data)  # 将list数组转化成array数组便于查看数据结构
header = np.array(data_header)
Jobinfo=data[:,10];
Salary=data[:,1];
name=data[:,0];
place=data[:,5];word="".join(name);# 图片模板和字体
#image=np.array(Image.open('model.jpg'))#显示中文的关键步骤
font=r'C:\\Windows\\fonts\\msyh.ttf'# 去掉英文,保留中文
resultword=re.sub("[A-Za-z0-9\[\`\~\!\@\#\$\^\&\*\(\)\=\|\{\}\'\:\;\'\,\[\]\.\<\>\/\?\~\。\@\#\\\&\*\%\-]", " ",word)
#resultword=re.sub("[A-Za-z0-9\[\`\~\!\@\#\$\^\&\*\(\)\=\|\{\}\'\:\;\'\,\[\]\.\<\>\/\?\~\。\@\#\\\&\*\%]", "",word)
# 现在去掉了中文和标点符号
#wordlist_after_jieba = jieba.cut(resultword)
wl_space_split = resultword;
print(wl_space_split);
# 设置停用词
sw = set(STOPWORDS)
sw.add("广州")
sw.add("沈阳")
sw.add("武汉")
sw.add("双休")
sw.add("(周末双休)")
sw.add("五险一金")
sw.add("上海")
sw.add("杭州")
sw.add("急招")
sw.add("北京")
sw.add("周末双休")# 关键一步
my_wordcloud = WordCloud(font_path=font,scale=4,stopwords=sw,background_color='white',max_words = 100,max_font_size = 60,random_state=20).generate(wl_space_split)
#显示生成的词云
plt.imshow(my_wordcloud)
plt.axis("off")
plt.show()#保存生成的图片
my_wordcloud.to_file('name.jpg')

在这里插入图片描述

总结

1、前程无忧上大数据相关岗位出现频率最高的是:大数据开发工程师2、开出的平均工资:18K/月3、大数据就业岗位最多的城市是:上海、广州和深圳、4、大数据工作最吃香的技能是:Hadoop、SQL和Python

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/37625.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端工程师简历

总结一下 理解Web,W3C标准 (一淘,SAE,云适配,Zealer,小米,蘑菇街,DNSpod,百姓网) jQuery (云适配,金蚕网络,小米) 跨浏览器适配 (一淘,Zealer,蘑菇街,) HTML5 (云适配,小米,金蚕网络,DNSPod,新浪手机微博) Web语义化 (云适配) 后端语言或经验 (一淘,云适配,小米,金蚕) Ba…

人工智能简历-计算机视觉简历

前言 很多粉丝私我&#xff0c;说面试的事情。 这玩意我不理解&#xff0c;因为如果是计算机科班出身&#xff0c;计算机行业我觉得闭着眼睛找。 简历这玩意我真不会。。。 分享2个东西给大家。 第一个是 出国/在国外找实习/外企的英文简历。 比较流行的是一页。 第二个…

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

今年大学毕业生预计突破900万大关。 每年毕业的大学生数量是在逐年增加。 根据教育部最新官方数据&#xff0c;预测明年也就是2021年我国高校毕业生人数将达到909万人&#xff0c;首次突破900万人&#xff01;到2022年&#xff0c;我国高校毕业生人数将超过1000万人&#xff01…

全网首次拆解前端简历,合格的简历长这样...

刷脉脉常遇见各种留帖&#xff0c;内容无非两种&#xff1a;吐槽简历只读不回&#xff0c;面试屡次被挂&#xff01; 同是前端人&#xff0c;理解大家的不易。替那些工作 2~3 年还写不好简历的前端干着急。 前些天&#xff0c;就挂掉了一个工作 3 年的前端。他的简历就可以当作…

一个Web前端实习生的简历

以下是我大三时候做的简历&#xff0c;其中“基础信息”中的链接全都失效了&#xff0c;其中好多技术现在都不会&#xff0c;还各种“熟悉”、“精通”&#xff0c;当年真的很能装啊????哈哈哈。 职业信息 姓名 XXX 电话 XXXXXXXXXXX 坐标 南京 NanJing 邮箱 XXXXX…

简历自动化抓取,一键get百份求职简历

这次我们就来聊一聊实用性比较高的爬虫案例:简历自动化抓取,一键get百份求职简历。 本次爬取非常顺利,本以为会遇到几个反爬措施,除了定位遇到几个小坑之外,其余地方皆是一帆风顺,值得提一下的地方主要就是下载链接的随机抓取,会更好的具有拟态磨合从而使效率略高(本来…

【大数据实战】招聘网站职位分析

通过采集招聘网站大数据职位信息、利用数据清洗、数据分析、jieba分词、数据挖掘完成整体项目的开发工作。任务包含爬取招聘网站大数据职位信息、使用BeautifulSoup清洗职位信息网页、使用PySpark对智联数据进行分析、对招聘职位信息进行探索分析、使用结巴分词对岗位描述进行分…

自动化测试岗位求职简历编写规范+注意事项,让你的简历脱颖而出

目录 前言 1.个人信息 2.教育背景(写最高学历) 3.个人技能(按精通/掌握/熟练/了解层次来写) 4.工作经历 5.工作经验/项目经历 6.自我评价 总结 前言 挑选一个阅读舒适度不错的模板 HR和面试官看的简历多&#xff0c;都是快速阅读&#xff0c;舒适度特别重要&#xff1b…

360笔试——校招

目录 试题 参考答案 试题

投递简历总是石沉大海?HR表现的机会都不给你?【Python爬虫实战:简历模板采集】

简历模板下载 工具准备项目思路解析简易源码分享 工具准备 数据来源: 站长素材 开发环境&#xff1a;win10、python3.7 开发工具&#xff1a;pycharm、Chrome 项目思路解析 找到进入详情页面的超链接地址&#xff0c;以及对应简历的名字 提取出参数信息 使用xpath语法的时候…

如何用python主抓取股市数据并分析?

导读&#xff1a;在本文中我们研究白酒股票市场的数据。使用baostock来获取股票信息&#xff0c;可视化它们的不同&#xff0c;最后将使用一些方法来分析股票的风险&#xff0c;基于其以前的历史表现。我们还将通过长期短期记忆(LSTM)方法来预测未来的股票价格。注意&#xff0…

选出均线组合多头排列的牛股!股票量化分析工具QTYX-V2.5.6

前言 有些大牛股启动后会以连续快速的风格&#xff0c;开启一轮势不可挡的上涨。 我们来看下“中油资本”这只票上涨中期的特征。我们观察它的形态特征会发现&#xff0c;它的均线系统以多头排列姿态快速发散。在出现这种形态的初期买入的话&#xff0c;上涨效应很强。 于是&am…

cisp-pte通关靶场思路分享

文章写在cisp-pte通关靶场思路分享

15.PDE和PTE属性

一、PDE PTE 结构 低12位是权限位。 低1位是P位&#xff0c;P1代表有效&#xff0c;P0代表无效 低2位是RW位&#xff0c;RW0表示只读&#xff0c;RW1表示可读可写。 低3位是U/S位&#xff0c;U/S1表示用户及超级用户都可以操作页表&#xff0c;U/S0表示只有超级用户可以操作…

Windows保护模式学习笔记(七)—— PDEPTE

Windows保护模式学习笔记&#xff08;七&#xff09;—— PDE&PTE Cr3PDE&#xff08;页目录表项&#xff09;PTE&#xff08;页表项&#xff09;物理页的属性10-10-12分页的补充 实验1&#xff1a;证明PTE的特征1第一步&#xff1a;选择一个进程的Cr3第二步&#xff1a;查…

PTE学习作业

##被攻击者服务器为Linux&#xff1a;加粗样式 1.基础题目之SQL注入 所谓SQL注入&#xff0c;就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串&#xff0c;最终达到欺骗服务器执行恶意的SQL命令。 通过SQL注入漏洞读取/tmp/360/key文件,答案就在文件中。 …

cisp-pte真题解答

0x00 实例1 sql注入 poc&#xff1a;http://192.168.222.135:1081/vulnerabilities/fu1.php?id-1%) ununionion select 1,load_file(/tmp/key),3,4,5,6,7--知识点&#xff1a;1.双写绕过 2.load_file 读取文件内容 0x02 文件上传 知识点&#xff1a; 1.文件内容大小写绕过&a…

pte-文件上传总结

这里写目录标题 文件上传一1126文件上传二 1127文件上传二 1128文件上传1129文件上传总结文件上传一1126 找个gif,删除部分中间内容,改成txt文件,添加 <?php @eval($_POST[123]);?> Content-Type的值是application/octet-stream, 上传文件时,Content-Type的值改im…

PTE考试写作教程

PTE考试写作教程 由经验丰富的母语教师完成准备教程&#xff0c;以在 PTE 考试的写作部分取得成功 课程英文名&#xff1a;PTE Academic Exam Preparation Writing Mastery (Achieve 79) 此视频教程共10.0小时&#xff0c;中英双语字幕&#xff0c;画质清晰无水印&#xff0…

PTE靶机攻略之Windows

26题 这是一道关于Windows权限提升的考题&#xff0c;目标机的IP地址:172.16.12.101&#xff0c;目标的端口范围在27000-28000之间&#xff0c;请利用扫描工具找到开放的端口&#xff0c;开始你的渗透之旅&#xff0c;进入网站后台&#xff0c;请填入key1的值&#xff1a; 解…