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


      從招聘網站招聘者的角度上,分析程序員工作能力的需求,利用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字體是比較大的,說明招聘者比較看重程序員這些方面的工作能力

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM