神级python工程师教你从网站筛选工作需求信息,助你就业

本文以Python爬虫、数据分析、后端、数据挖掘、全栈开发、运维开发、高级开发工程师、大数据、机器学习、架构师 这10个岗位,从拉勾网上爬取了相应的职位信息和任职要求,并通过数据分析可视化,直观地展示了这10个职位的平均薪资和学历、工作经验要求。

1、先获取薪资和学历、工作经验要求

由于拉勾网数据加载是动态加载的,需要我们分析。分析方法如下:

F12分析页面数据存储位置

我们发现网页内容是通过post请求得到的,返回数据是json格式,那我们直接拿到json数据即可。

我们只需要薪资和学历、工作经验还有单个招聘信息,返回json数据字典中对应的英文为:positionId,salary, education, workYear(positionId为单个招聘信息详情页面编号)。相关操作代码如下:

文件存储:

def file_do(list_info):

# 获取文件大小

file_size = os.path.getsize(r'G:lagou_anv.csv')

if file_size == 0:

# 表头

name = ['ID','薪资', '学历要求', '工作经验']

# 建立DataFrame对象

file_test = pd.DataFrame(columns=name, data=list_info)

# 数据写入

file_test.to_csv(r'G:lagou_anv.csv', encoding='gbk', index=False)

else:

with open(r'G:lagou_anv.csv', 'a+', newline='') as file_test:

# 追加到文件后面

writer = csv.writer(file_test)

# 写入文件

writer.writerows(list_info)

基本数据获取:

# 1. post 请求 url

req_url = '网页链接

# 2.请求头 headers

headers = {

'Accept': 'application/json,text/javascript,*/*;q=0.01',

'Connection': 'keep-alive',

'Cookie': '你的Cookie值,必须加上去',

'Host': 'www.lagou.com',

'Referer': '网页链接,

'User-Agent': str(UserAgent().random),

}

def get_info(headers):

# 3.for 循环请求(一共30页)

for i in range(1, 31):

# 翻页

data = {

'first': 'true',

'kd': 'Python爬虫',

'pn': i

}

# 3.1 requests 发送请求

req_result = requests.post(req_url, data=data, headers=headers)

req_result.encoding = 'utf-8'

print("第%d页:"%i+str(req_result.status_code))

# 3.2 获取数据

req_info = req_result.json()

# 定位到我们所需数据位置

req_info = req_info['content']['positionResult']['result']

print(len(req_info))

list_info = []

# 3.3 取出具体数据

for j in range(0, len(req_info)):

salary = req_info[j]['salary']

education = req_info[j]['education']

workYear = req_info[j]['workYear']

positionId = req_info[j]['positionId']

list_one = [positionId,salary, education, workYear]

list_info.append(list_one)

print(list_info)

# 存储文件

file_do(list_info)

time.sleep(1.5)

运行结果:

2、根据获取到的`positionId`来访问招聘信息详细页面

根据`positionId`还原访问链接:

position_url = []

def read_csv():

# 读取文件内容

with open(r'G:lagou_anv.csv', 'r', newline='') as file_test:

# 读文件

reader = csv.reader(file_test)

i = 0

for row in reader:

if i != 0 :

# 根据positionID补全链接

url_single = "网页链接%row[0]

position_url.append(url_single)

i = i + 1

print('一共有:'+str(i-1)+'个')

print(position_url)

访问招聘信息详情页面,获取职位描述(岗位职责和岗位要求)并清理数据:

def get_info():

for position_url in position_urls:

work_duty = ''

work_requirement = ''

response00 = get_response(position_url,headers = headers)

time.sleep(1)

content = response00.xpath('//*[@id="job_detail"]/dd[2]/div/p/text()')

# 数据清理

j = 0

for i in range(len(content)):

content[i] = content[i].replace(' ',' ')

if content[i][0].isdigit():

if j == 0:

content[i] = content[i][2:].replace('、',' ')

content[i] = re.sub('[;;.0-9。]','', content[i])

work_duty = work_duty+content[i]+ '/'

j = j + 1

elif content[i][0] == '1' and not content[i][1].isdigit():

break

else:

content[i] = content[i][2:].replace('、', ' ')

content[i] = re.sub('[、;;.0-9。]','',content[i])

work_duty = work_duty + content[i]+ '/'

m = i

# 岗位职责

write_file(work_duty)

print(work_duty)

# 数据清理

j = 0

for i in range(m,len(content)):

content[i] = content[i].replace(' ',' ')

if content[i][0].isdigit():

if j == 0:

content[i] = content[i][2:].replace('、', ' ')

content[i] = re.sub('[、;;.0-9。]', '', content[i])

work_requirement = work_requirement + content[i] + '/'

j = j + 1

elif content[i][0] == '1' and not content[i][1].isdigit():

# 控制范围

break

else:

content[i] = content[i][2:].replace('、', ' ')

content[i] = re.sub('[、;;.0-9。]', '', content[i])

work_requirement = work_requirement + content[i] + '/'

# 岗位要求

write_file2(work_requirement)

print(work_requirement)

print("-----------------------------")

运行结果:

duty

require

3、四种图可视化数据+数据清理方式

矩形树图:

# 1.矩形树图可视化学历要求

from pyecharts import TreeMap

education_table = {}

for x in education:

education_table[x] = education.count(x)

key = []

values = []

for k,v in education_table.items():

key.append(k)

values.append(v)

data = []

for i in range(len(key)) :

dict_01 = {"value": 40, "name": "我是A"}

dict_01["value"] = values[i]

dict_01["name"] = key[i]

data.append(dict_01)

tree_map = TreeMap("矩形树图", width=1200, height=600)

tree_map.add("学历要求",data, is_label_show=True, label_pos='inside')

玫瑰饼图:

# 2.玫瑰饼图可视化薪资

import re

import math

'''

# 薪水分类

parameter : str_01--字符串原格式:20k-30k

returned value : (a0+b0)/2 --- 解析后变成数字求中间值:25.0

'''

def assort_salary(str_01):

reg_str01 = "(d+)"

res_01 = re.findall(reg_str01, str_01)

if len(res_01) == 2:

a0 = int(res_01[0])

b0 = int(res_01[1])

else :

a0 = int(res_01[0])

b0 = int(res_01[0])

return (a0+b0)/2

from pyecharts import Pie

salary_table = {}

for x in salary:

salary_table[x] = salary.count(x)

key = ['5k以下','5k-10k','10k-20k','20k-30k','30k-40k','40k以上']

a0,b0,c0,d0,e0,f0=[0,0,0,0,0,0]

for k,v in salary_table.items():

ave_salary = math.ceil(assort_salary(k))

print(ave_salary)

if ave_salary < 5:

a0 = a0 + v

elif ave_salary in range(5,10):

b0 = b0 +v

elif ave_salary in range(10,20):

c0 = c0 +v

elif ave_salary in range(20,30):

d0 = d0 +v

elif ave_salary in range(30,40):

e0 = e0 +v

else :

f0 = f0 + v

values = [a0,b0,c0,d0,e0,f0]

pie = Pie("薪资玫瑰图", title_pos='center', width=900)

pie.add("salary",key,values,center=[40, 50],is_random=True,radius=[30, 75],rosetype="area",is_legend_show=False,is_label_show=True)

普通柱状图:

# 3.工作经验要求柱状图可视化

from pyecharts import Bar

workYear_table = {}

for x in workYear:

workYear_table[x] = workYear.count(x)

key = []

values = []

for k,v in workYear_table.items():

key.append(k)

values.append(v)

bar = Bar("柱状图")

bar.add("workYear", key, values, is_stack=True,center= (40,60))

词云图:

import jieba

from pyecharts import WordCloud

import pandas as pd

import re,numpy

stopwords_path = 'H:PyCodingLagou_analysisstopwords.txt'

def read_txt():

with open("G:lagouContentywkf_requirement.txt",encoding='gbk') as file:

text = file.read()

content = text

# 去除所有评论里多余的字符

content = re.sub('[,,。.

]', '', content)

segment = jieba.lcut(content)

words_df = pd.DataFrame({'segment': segment})

# quoting=3 表示stopwords.txt里的内容全部不引用

stopwords = pd.read_csv(stopwords_path, index_col=False,quoting=3, sep="", names=['stopword'], encoding='utf-8')

words_df = words_df[~words_df.segment.isin(stopwords.stopword)]

words_stat = words_df.groupby(by=['segment'])['segment'].agg({"计数": numpy.size})

words_stat = words_stat.reset_index().sort_values(by=["计数"], ascending=False)

test = words_stat.head(200).values

codes = [test[i][0] for i in range(0, len(test))]

counts = [test[i][1] for i in range(0, len(test))]

wordcloud = WordCloud(width=1300, height=620)

wordcloud.add("必须技能", codes, counts, word_size_range=[20, 100])

wordcloud.render("H:PyCodingLagou_analysiscloud_pitywkf_bxjn.html")

python爬虫岗位

学历要求

工作月薪

工作经验要求

爬虫技能

关键词解析:

学历:本科

工作月薪:10k-30k

工作经验:1-5年

技能:分布式、多线程、框架、Scrapy、算法、数据结构、数据库

综合:爬虫这个岗位在学历要求上比较放松,大多数为本科即可,比较适合想转业的老哥小姐姐,学起来也不会特别难。而且薪资待遇上也还算比较优厚,基本在10k以上。不过唯一对工作经验要求还是比较高的,有近一半的企业要求工作经验要达到3年以上。

python数据分析岗位

学历要求

工作月薪

工作经验要求

数据分析技能

关键词解析:

学历:本科(硕士比例有所增高)

工作月薪:10k-30k

工作经验:1-5年

技能:SAS、SPSS、Hadoop、Hive、数据库、Excel、统计学、算法

综合:数据分析这个岗位在学历要求上比爬虫要求稍微高一些,硕士比例有所提升,专业知识上有一定要求。薪资待遇上也还算比较优厚,基本在10k以上,同时薪资在30k-40k的比例也有所上升。对工作经验要求还是比较高,大部分的企业要求工作经验要达到3年以上。

python后端岗位

学历要求

工作月薪

工作经验要求

后端技能

关键词解析:

学历:本科

工作月薪:10k-30k

工作经验:3-5年

技能:Flask、Django、Tornado、Linux、MySql、Redis、MongoDB、TCP/IP、数学(哈哈)

综合:web后端这个岗位对学历要求不高,但专业知识上有很大要求,得会Linux操作系统基本操作、三大主流数据库的使用、以及三大基本web框架的使用等计算机相关知识,总体来说难道还是比较大。薪资待遇上也比较优厚,基本在10k以上,同时薪资在30k-40k的比例也有近20%。对工作经验要求还是比较高,大部分的企业要求工作经验要达到3年以上。

python数据挖掘岗位

学历要求

工作月薪

工作经验要求

希望小编的文章能帮助你找到心仪的工作,关注小编。文章持续推送。

小编准备了一份2018年最新的python零基础系统学习资料,加群 735934841 免费领取!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,105评论 0 10
  • 今天读到一段话,很有感触,分享给大家共勉: 看起来每天熬夜,却只是拿着手机点了无数个赞;看起来起那么早去上课,却只...
    成军413阅读 129评论 0 0
  • 此刻的你是否仍在外奔波忙碌?真是辛苦了! 无意中翻到了这张,看到你,朝思暮想的人,没有想象中的喜悦,却是万分的歉意...
    夢一場921阅读 277评论 0 3
  • 上面来检查,我准备了好久好久。但是领导来了,还是发现了很多缺点和不足。结果,我凭借着自己所谓的三寸不烂之舌,硬是把...
    奥德赛岁月阅读 812评论 0 0