2023年6月28日发(作者:)
程序员⼯作能⼒的需求分析从招聘⽹站招聘者的⾓度上,分析程序员⼯作能⼒的需求,利⽤python的requests,BeautifulSoup4和正则来爬取深圳58同城程序员的招聘信息,数据分析则以云词图展⽰,主要⽤jieba、worldcloud,pandas这⼏个包来⽣成云词图。⼀、数据爬取分成四部分:整理好⽹站的头部信息,保证请求时,可以正常获取⽹页信息获得⼆级⽹址的⽹址列表,此处是对⼀级⽹址进⾏解析,寻找⼀级⽹址⾥⾯包含的各个招聘信息并⽣成对应的⽹址列表对⼆级⽹址中的指定标签进⾏爬取建⽴csv⽂件⼆、云词图⽣成分成四部分:创建⽂件和停⽤词组,以便后⾯的停⽤词判断词频统计,⽤pandans进⾏统计设置云词属性⽣成词云数据爬取第⼀部分,获取头部信息,对于⼤多数⽹页,若想⽤requests这个包爬取其中的信息,在请求时务必加⽹页头部信息和关闭重定向!!获取头部信息这⾥给出两种办法,第⼀种是直接从⽹页代码获取,让头部信息变成字典样式def headers_information(h): lst=('n') m=[] for i in lst: key=(':')[0] value=(':')[1] ([str(key),value]) return(dict(m))
print(headers_information(headers))
第⼆种直接添加h={"User-Agent" : "User-Agent:Mozilla/5.0(compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;"},r=(url, allow_redirects=False,headers=h)第⼆部分,获得⼆级⽹址的⽹址列表,确定了⼀级⽹址以后,这⾥有个页码的问题,因为我们要爬取多页,所以⽤for循环遍历页码数,⽤BeautifulSoup对爬取⽽来的n个⼀级⽹址进⾏解析,def url_analysis(u,s,h,n): ''' ⽤于分析⽹页,最后得到⼀个含有⼆级⽹址的标签列表 u:起始⽹址 s:⼆级⽹址包含的特定字段 n:页码 h:头部信息 ''' m=[] for i in range(1,n+1): r=(url=u+str(i)+'/',allow_redirects=False,headers=h) soup=BeautifulSoup(,'lxml') r2=_all('a',href=e(s)) for j in r2: r3=['href'] (r3) return(m)
第三部分,对⼆级⽹址中的指定标签进⾏爬取,这⾥爬取以下部分,另外注意⼀点,获取的有些⼆级⽹址对应的标签为空,此时会返回None,我们也要进⾏判断def content(u,h): ''' 爬取标签信息 u:⼆级⽹址 h:头部信息 ''' r=(url=u,allow_redirects=False,headers=h) soup=BeautifulSoup(,'lxml') t=('span',class_='pos_title') name=('span',class_='pos_name') number=('span',class_="item_condition pad_left_none") stu=('span',class_="item_condition") exprience=('span',class_="item_condition border_right_None") discribe=('div',class_="posDes") m=[t,',',name,',',number,',',stu,',',exprience,',',discribe,',','n'] if m[0]!=None: return[m[0].text,',',m[2].text,',',m[4].text,',',m[6].text,',',m[8].text,',',m[10].text,',','n'] else: return[None, ',', None, ',', None, ',', None, ',', None, ',', None, ',','n'] 第四部分,建⽴csv⽂件,注意,列表要是有None是写不进去会报错的,所以我们也要进⾏筛选 f=open(r'C:Users格格巫','w+',encoding='utf-8') (0) ('title,name,number,stu,exprience,discriben') for i in url_analysis(web_u,web_s,h,n): data=content(i,h) if data[0]!=None: ines(data) print(data) else: continue ()
数据分析这⾥主要⽤的两个库是jieba和wordcloud,jieba 是⼀个python实现的中⽂分词组件,它有三种模式,今天我们使⽤是它的普通模式,wordcloud是python制作云词图的库,在统计了词频的频数后,我们准备⽤云词图的形式展现,云词图中字体⼤的,说明统计得出的频数越⾼,先把爬取下来的csv⽂件整理⼀下,把⽂件的汉字都去掉,留下招聘者对应聘者编程⽅⾯的要求第⼀部分,创建⽂件和停⽤词组,进⽽判断关键词在不在停⽤词组中,若不在则记录下来import numpy as npimport pandas as pdimport jiebaimport eimport codecsimport osimport wordcloudfrom PIL import Imageimport as _option('max_colwidth',500)path=()+'/'f=open(path,encoding='UTF-8')data=_csv(f, header=0,encoding='utf-8',dtype=str).astype(str)segments = []stopwords = [() for line in ('', 'r', 'utf-8').readlines()]for index, row in ws(): content = row[4] words = (content) splitedStr = '' for word in words: #停⽤词判断,如果当前的关键词不在停⽤词库中才进⾏记录 if word not in stopwords: # 记录全局分词 ({'word':word, 'count':1}) splitedStr += word + ' '
第⼆部分,词频统计,我们主要使⽤pandas的DataFrame,加载、保存csv数据源,处理数组进⾏去重、统计Sg = ame(segments)# 词频统计Word = y('word')['count'].sum()#导出csv⽂件_csv('',encoding='utf-8')#制作云词图第三部分,设置词云属性mask = (('')) # 定义词频背景wc = oud( font_path='C:/Windows/Fonts/', # 设置字体格式
mask=mask, # 设置背景图 max_words=50, # 最多显⽰词数 max_font_size=1000, # 字体最⼤值 background_color="white",)
第四部分,⽣成词云te_from_frequencies(Word) # 从字典⽣成词云r(color_func=_single_color_func('blue')) # 将词云颜⾊设置为背景图⽅案(figsize=(8,8))(wc) # 显⽰词云('off') # 关闭坐标轴() # 显⽰图像总结:我们⽤requests去请求⽹站以及⽤BeautifulSoup进⾏解析,这⾥再次强调requests请求⽹页信息时,⼀定记得加上请求头部,⾄于两种请求的选择,各有千秋,爬取数据时,先确定⼀级⽹址,之后确定⼆级⽹址,最后确定需要爬取⼆级⽹址中的哪些标签,第⼆部分,worldcloud和jieba是⽣成词云的关键,jiaba⽤来对导⼊⽂件的分词,pandas的DataFrame加载、保存csv数据源,处理数组进⾏去重、统计,最后便由worldcloud⽣成云词图,云词中可以看出来,PHP,JavaScript,CSS,HTML,MySQL字体是⽐较⼤的,说明招聘者⽐较看重程序员这些⽅⾯的⼯作能⼒
发布者:admin,转转请注明出处:http://www.yc00.com/news/1687920631a57292.html
评论列表(0条)