程序员工作能力的需求分析

      从招聘网站招聘者的角度上,分析程序员工作能力的需求,利用python的requests,BeautifulSoup4和正则来爬取深圳58同城程序员的招聘信息,数据分析则以云词图展示,主要用jieba、worldcloud,pandas这几个包来生成云词图。

一、数据爬取分成四部分:

整理好网站的头部信息,保证请求时,可以正常获取网页信息

获得二级网址的网址列表,此处是对一级网址进行解析,寻找一级网址里面包含的各个招聘信息并生成对应的网址列表

对二级网址中的指定标签进行爬取

建立csv文件

 

二、云词图生成分成四部分:

创建文件和停用词组,以便后面的停用词判断

词频统计,用pandans进行统计

设置云词属性

生成词云

 

数据爬取

第一部分,获取头部信息,对于大多数网页,若想用requests这个包爬取其中的信息,在请求时务必加网页头部信息和关闭重定向!!获取头部信息这里给出两种办法,第一种是直接从网页代码获取,让头部信息变成字典样式

1 def headers_information(h):
2     lst=headers.split('\n')
3     m=[]
4     for i in lst:
5         key=i.split(':')[0]
6         value=i.split(':')[1]
7         m.append([str(key),value])
8 return(dict(m))

第二种直接添加

1 h={"User-Agent" : "User-Agent:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;"},
2 r=requests.get(url, allow_redirects=False,headers=h)

第二部分,获得二级网址的网址列表,确定了一级网址以后,这里有个页码的问题,因为我们要爬取多页,所以用for循环遍历页码数,用BeautifulSoup对爬取而来的n个一级网址进行解析,

 1 def url_analysis(u,s,h,n):
 2     '''
 3         用于分析网页,最后得到一个含有二级网址的标签列表
 4         u:起始网址
 5         s:二级网址包含的特定字段
 6         n:页码
 7         h:头部信息
 8     '''
 9     m=[]
10     for i in range(1,n+1):
11         r=requests.get(url=u+str(i)+'/',allow_redirects=False,headers=h)
12         soup=BeautifulSoup(r.text,'lxml')
13         r2=soup.find_all('a',href=re.compile(s))
14 
15      
16         for j in r2:
17             r3=j.attrs['href']
18             m.append(r3)
19     
20 return(m)    

 

第三部分,对二级网址中的指定标签进行爬取,这里爬取以下部分,另外注意一点,获取的有些二级网址对应的标签为空,此时会返回None,我们也要进行判断

 

 1 def content(u,h):
 2     '''
 3     爬取标签信息
 4     u:二级网址
 5     h:头部信息
 6     '''
 7     r=requests.get(url=u,allow_redirects=False,headers=h)
 8     soup=BeautifulSoup(r.text,'lxml')
 9     t=soup.find('span',class_='pos_title')
10     name=soup.find('span',class_='pos_name')
11     number=soup.find('span',class_="item_condition pad_left_none")
12     stu=soup.find('span',class_="item_condition")
13     exprience=soup.find('span',class_="item_condition border_right_None")
14     discribe=soup.find('div',class_="posDes")
15     m=[t,',',name,',',number,',',stu,',',exprience,',',discribe,',','\n']
16     if m[0]!=None:
17         return[m[0].text,',',m[2].text,',',m[4].text,',',m[6].text,',',m[8].text,',',m[10].text,',','\n']
18     else:
19         return[None, ',', None, ',', None, ',', None, ',', None, ',', None, ',','\n']

 第四部分,建立csv文件,注意,列表要是有None是写不进去会报错的,所以我们也要进行筛选

 1 f=open(r'C:\Users\格格巫\Desktop\txt1.csv','w')
 2     f.seek(0)
 3     f.write('title,name,number,stu,exprience,discribe\n')
 4     for i in url_analysis(web_u,web_s,h,n):
 5         data=content(i,h)
 6         if data[0]!=None:
 7             f.writelines(data)
 8             print(data)
 9         else:
10             continue
11     f.close()

数据爬取代码链接:https://github.com/creating20/analysis/blob/master/temp9.py

 

生成云词图

这里主要用的两个库是jieba和wordcloud,jieba 是一个python实现的中文分词组件,它有三种模式,今天我们使用是它的普通模式,wordcloud是python制作云词图的库,在统计了词频的频数后,我们准备用云词图的形式展现,云词图中字体大的,说明统计得出的频数越高, 先把爬取下来的csv文件整理一下,把文件的汉字都去掉,留下招聘者对应聘者编程方面的要求

 

第一部分,创建文件和停用词组,进而判断关键词在不在停用词组中,若不在则记录下来,

 1 import numpy as np
 2 import pandas as pd
 3 import jieba
 4 import jieba.analyse
 5 import codecs
 6 import os
 7 import wordcloud
 8 from PIL import Image
 9 import matplotlib.pyplot as plt
10 pd.set_option('max_colwidth',500)
11 path=os.getcwd()+'/chengxuyuan58.csv'
12 f=open(path,encoding='UTF-8')
13 data=pd.read_csv(f, header=0,encoding='utf-8',dtype=str).astype(str)
14 segments = []
15 stopwords = [line.strip() for line in codecs.open('stoped.txt', 'r', 'utf-8').readlines()]
16 for index, row in data.iterrows():
17     content = row[4]
18     words = jieba.cut(content)
19     splitedStr = ''
20     for word in words:
21         if word not in stopwords:
22             segments.append({'word':word, 'count':1})
23             splitedStr += word + ' '

第二部分,词频统计,我们主要使用pandas的DataFrame,加载、保存csv数据源,处理数组进行去重、统计

1 Sg = pd.DataFrame(segments)# 词频统计
2 
3 Word = Sg.groupby('word')['count'].sum()#导出csv文件
4 
5 Word.to_csv('keywords.csv',encoding='utf-8')#制作云词图

第三部分,设置词云属性

1 mask = np.array(Image.open('wordcloud.jpg')) # 定义词频背景
2 wc = wordcloud.WordCloud(
3     font_path='C:/Windows/Fonts/simhei.ttf', # 设置字体格式
4     
5     mask=mask, # 设置背景图
6     max_words=50, # 最多显示词数
7     max_font_size=1000, # 字体最大值
8     background_color="white",)

第四部分,生成词云

1 wc.generate_from_frequencies(dfWord) # 从字典生成词云
2 #image_colors = wordcloud.ImageColorGenerator(mask) # 从背景图建立颜色方案
3 wc.recolor(color_func=wordcloud.get_single_color_func('blue')) # 将词云颜色设置为背景图方案
4 plt.figure(figsize=(8,8))
5 plt.imshow(wc) # 显示词云
6 plt.axis('off') # 关闭坐标轴
7 plt.show() # 显示图像

生成云词图代码链接:https://github.com/creating20/analysis/blob/master/temp.py

总结:我们用requests去请求网站以及用BeautifulSoup进行解析,这里再次强调requests请求网页信息时,一定记得加上请求头部,至于两种请求的选择,各有千秋,爬取数据时,先确定一级网址,之后确定二级网址,最后确定需要爬取二级网址中的哪些标签,第二部分,worldcloud和jieba是生成词云的关键,jiaba用来对导入文件的分词,pandas的DataFrame加载、保存csv数据源,处理数组进行去重、统计,最后便由worldcloud生成云词图,云词中可以看出来,PHP,JavaScript,CSS,HTML,MySQL字体是比较大的,说明招聘者比较看重程序员这些方面的工作能力

 

转载于:https://www.cnblogs.com/gegewud/p/create.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值