在过几个月又是一年一度的毕业生求职时间了,这时候都需要往各个网站各个平台投递简历,这时候一份好的简历很重要,找对方向也很重要。这里我爬取了拉勾网30页关键字为python,应届本科生的岗位信息,然后再对数据处理,保存,可视化。
爬取数据的方法还是使用selenium的方法,将爬取到的数据保存到文本中,然后在提取文本的数据做其他操作。
具体代码:
from selenium import webdriver import time import os import requests path = '驱动地址' browser = webdriver.Chrome(executable_path=path) url = 'https://www.lagou.com/jobs/list_python/p-city_' \ '0?px=default&gx=%E5%85%A8%E8%81%8C&gj=&xl=%E6%9C%' \
'AC%E7%A7%91&isSchoolJob=1#filterBox'
#网址
browser.get(url)
time.sleep(10)
zwlist = []
shumu = 0
inum = 0
while inum<30:
li_path = '//*[@id="s_position_list"]/ul/li'
zw_list = browser.find_elements_by_xpath(li_path)
for i in zw_list:
zw = {}
zw['数目'] = shumu
shumu+=1
zw_name = i.get_attribute('data-positionname')
zw['职位名'] = zw_name
cname = i.get_attribute('data-company')
zw['公司名'] = cname
gz = i.get_attribute('data-salary')
zw['工资'] = gz
fb_time = i.find_element_by_class_name("format-time").text
zw['发布时间'] = fb_time
wz = i.find_element_by_class_name("add").text
zw['位置'] = wz
zwlist.append(zw)
xiajn = i.find_element_by_class_name("list_item_bot")
jn = xiajn.find_element_by_class_name("li_b_l").text
zw['技能要求'] = jn
np = browser.find_element_by_class_name("pager_next").click()
time.sleep(5)
inum+=1
with open('拉钩python职位.txt','w',encoding='utf-8')as f:
for i in zwlist:
for j in i.keys():
f.write(j + ':' + str(i[j]) + ' ')
f.write('\n')
browser.close()
将数据提取出来后再将数据保存到文本里,这里的话就是文本保存的时候需要将编码模式改成utf-8.
效果:
然后将数据可视化,这里提取了岗位的位置信息,这样就可以知道哪个地方需求python相关工作的数量了。
代码:
allzw = [] with open('拉钩python职位.txt','r',encoding='utf-8')as f: x_list = f.readlines() for i in range(len(x_list)): x_list[i] = x_list[i].replace(' \n','') x = x_list[i].split(' ') for i in range(len(x)): x[i] = x[i].split(':',1) allzw.append(dict(x)) wz_list = [] for i in allzw: wz_list.append(i['位置']) for i in range(len(wz_list)): wz_list[i] = wz_list[i].replace('[','').replace(']','') wz_list[i] = wz_list[i][:2] d = set(wz_list) wz_shumu = [] for i in d: wznum = 0 for j in wz_list: if j == i: wznum+=1 wz_shumu.append(wznum) from pyecharts import options as opts from pyecharts.charts import Geo def geo_base() -> Geo: c = ( Geo() .add_schema(maptype="china") .add("python职位数", [list(z) for z in zip(d, wz_shumu)]) .set_series_opts(label_opts=opts.LabelOpts(is_show=False)) .set_global_opts( visualmap_opts=opts.VisualMapOpts(), title_opts=opts.TitleOpts(title="python职位分布表"), ) ) return c c = geo_base() c.render()
数据可视化这里使用的是pycharts库,算是比较好看的一种数据可视化的方法。
效果:
两种格式的地图帮助我们这样可以直观的看出,北京广州上海深圳等地的python需求比较大。
将这些岗位需要的技能要求做成词云:
词云代码:
alljn = [] with open('拉钩python职位.txt','r',encoding='utf-8')as f: x_list = f.readlines() for i in range(len(x_list)): x_list[i] = x_list[i].replace(' \n','') x = x_list[i].split(' ') for i in range(len(x)): x[i] = x[i].split(':',1) alljn.append(dict(x)) jn_list = [] jn = '' for i in alljn: jn_list.append(i['技能要求']) for i in range(len(jn_list)): jn = jn+jn_list[i] print(jn) from wordcloud import WordCloud import matplotlib.pyplot as plt import numpy as np fronpath = '字体的位置' wordcloud = WordCloud(background_color='white',scale=5,font_path=fronpath).generate(jn) plt.imshow(wordcloud) plt.axis('off') plt.show() wordcloud.to_file('shuju.png')
结果:
这样你就可以清晰的看出你所需要掌握的技能还有那些。
还有对薪酬,福利等等的数据都可以去可视化它,更加方便你对职业的选择。