摘? 要: 本文詳細(xì)闡述了運(yùn)用Python爬取51job上相關(guān)招聘信息的過程,并對(duì)所抓取的信息進(jìn)行處理和分析,按照不同地區(qū),不同薪資把招聘信息以圖表的形式進(jìn)行展示,以期幫助高校畢業(yè)生在擇業(yè)時(shí)能夠快速獲取特定的需求信息,并通過快速數(shù)據(jù)分析得到自身擇業(yè)的準(zhǔn)確定位,從而做出更好的選擇。
關(guān)鍵詞: 爬蟲;Python;招聘
中圖分類號(hào): TP3? ? 文獻(xiàn)標(biāo)識(shí)碼: A? ? DOI:10.3969/j.issn.1003-6970.2020.10.055
本文著錄格式:孫亞紅. 基于Python的招聘信息爬蟲系統(tǒng)設(shè)計(jì)[J]. 軟件,2020,41(10):213214+235
【Abstract】: This paper describes the process of using Python to crawl the relevant recruitment information on 51job, and processes and analyzes the captured information. According to different regions and different education requirements, the recruitment information is displayed in the form of chart, in order to help college graduates quickly obtain specific demand information when choosing a job, and obtain the accuracy of their own employment through rapid data analysis.
【Key words】: Crawler; Python; Recruitment information
0? 引言
伴隨著網(wǎng)絡(luò)信息的爆炸式增長(zhǎng),大數(shù)據(jù)時(shí)代悄然而至。如何在海量的數(shù)據(jù)當(dāng)中獲取可以有效利用的關(guān)鍵數(shù)據(jù)信息,成為各界研究的熱點(diǎn)[1-5]。網(wǎng)絡(luò)爬蟲是一種按照設(shè)計(jì)者所設(shè)定的規(guī)則,模擬成為瀏覽器,自動(dòng)驅(qū)動(dòng)抓取網(wǎng)頁信息的程序或腳本[6]。利用網(wǎng)絡(luò)爬蟲,設(shè)計(jì)者可結(jié)合自己的目標(biāo)需求從海量的互聯(lián)網(wǎng)信息中抓取目標(biāo)信息數(shù)據(jù)并存儲(chǔ),為進(jìn)一步的數(shù)據(jù)分析,用戶畫像做好準(zhǔn)備。
1? 系統(tǒng)設(shè)計(jì)流程
設(shè)計(jì)招聘信息爬蟲系統(tǒng)的流程如下。
步驟1:分析URL。
步驟2:訪問待抓取頁面。該模塊訪問被抓取頁面的相關(guān)職位信息,利用Requests庫(kù)下載待抓取頁面的html代碼。
步驟3:下載,解析,抽取信息。在該模塊,使用lxml等Python庫(kù)解析頁面,并根據(jù)預(yù)先制定的規(guī)則,抽取信息。
步驟4:存儲(chǔ)。在該模塊中,針對(duì)不同類型的數(shù)據(jù)創(chuàng)建mysql表格,把爬取的數(shù)據(jù)存儲(chǔ)在mysql數(shù)據(jù)庫(kù)的表格中。
步驟5:分析數(shù)據(jù)并可視化。
2? 系統(tǒng)實(shí)現(xiàn)各關(guān)鍵技術(shù)
2.1? 抓取模塊
打開51job,在職位搜索欄中輸入“數(shù)據(jù)分析師”,頁面上顯示所有關(guān)于“大數(shù)據(jù)分析師”的崗位信息共169頁,多翻幾頁,分析出該類頁面的地址規(guī)律,發(fā)現(xiàn)不同的頁面其URL基本上都為“https://search.51job. com/list/000000,000000,0000,00,9,99,%25E6%2595%25B0%25E6%258D%25AE%25E5%2588%2586%25E6%259E%2590%25E5%25B8%2588,2, *.html”,只有“*”處的數(shù)字發(fā)生了變化。因此,編寫網(wǎng)頁獲取代碼如下:
def Get_html(data,i):
Url="https://search.51job.com/list/000000,000000, 0000,00,9,99,"+data+",2,%s.html"%i
header = {'User-Agent':'Mozilla/5.0'} #頭部信息
r=requests.get(Url,headers=header)
r.encoding=r.apparent_encoding
return(r.text) #函數(shù)返回html頁面的內(nèi)容
2.2? 定義Xpath表達(dá)式,獲取目標(biāo)數(shù)據(jù)
Xpath將XML文檔看成一個(gè)節(jié)點(diǎn)樹模型,它能夠通過一個(gè)通用的句法和語義對(duì)XML文檔中的節(jié)點(diǎn)進(jìn)行檢索和定位,是在XML文檔中進(jìn)行尋址的表達(dá)式語言。本論文中針對(duì)下載的網(wǎng)頁文檔,通過編寫相應(yīng)的Xpath表達(dá)式進(jìn)行目標(biāo)數(shù)據(jù)的抽取。核心的代碼如下:
def Get_data(html,name):
html=etree.HTML(html)
divs=html.xpath("http://div[@id='resultList']/div [@class='el']")
print(divs)
for div in divs:
job1=div.xpath("./p/span/a/@title")
print(job1[0])
job_url1=div.xpath("./p/span/a/@href")
print(job_url1)
job_company1=div.xpath("./span[@class= 't2']/a/@title")
print(job_company1)
job_area1=div.xpath("./span[@class='t3']/ text()")
print(job_area1)
job_salary1=div.xpath("./span[@class='t4']/ text()")
print(job_salary1)
try:
job_salary.append(job_salary1[0])
job_area.append(job_area1[0])
shuju.append((job1[0],job_url1[0], job_company1[0],job_area1[0],job_salary1[0]))
except:
print("異常")
2.3? 存儲(chǔ)設(shè)計(jì)
針對(duì)不同的工作崗位,獲得大量的招聘數(shù)據(jù),因此,需要將數(shù)據(jù)進(jìn)行存儲(chǔ)。Python中,常用數(shù)據(jù)存儲(chǔ)方式有兩種,一種是數(shù)據(jù)庫(kù),可以是MySql數(shù)據(jù)庫(kù),Redis數(shù)據(jù)庫(kù);另外一種是文件存儲(chǔ),如CSV文件, Excel文檔等。本文中采用MySql數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)存儲(chǔ)。核心代碼如下:
def mysql_data(name,shuju):
client=pymysql.connect(user="root",host="loca lhost",passwd="123456",db="datashiyan" charset=”utf8”)
cursor=client.cursor()
sql="insert into table_%s"%name+"values(%s, %s,%s,%s,%s)"
cursor.execute(sql,shuju)
client.commit()
cursor.close()
client.close()
利用Mysql的可視化工具Navicat對(duì)爬取的部分?jǐn)?shù)據(jù)進(jìn)行顯示如圖1所示。
2.4? 數(shù)據(jù)預(yù)處理
通過Xpath表達(dá)式從網(wǎng)頁中獲取的數(shù)據(jù)均為文本數(shù)據(jù),不適合直接進(jìn)行數(shù)據(jù)分析,因此,在數(shù)據(jù)分析之前,先要對(duì)數(shù)據(jù)進(jìn)行預(yù)處理。如工資數(shù)據(jù)的數(shù)字化處理,城市數(shù)據(jù)的分割等。
3? 數(shù)據(jù)分析與可視化處理
3.1? 崗位細(xì)化
“大數(shù)據(jù)分析師”在不同的行業(yè)中又細(xì)化出若干工作崗位,如電商大數(shù)據(jù)分析師,房地產(chǎn)大數(shù)據(jù)分析師,交通大數(shù)據(jù)分析師等。相關(guān)的崗位需求人數(shù)統(tǒng)計(jì)圖如圖2所示。
從圖中可以看出,與“大數(shù)據(jù)分析”相關(guān)的崗位主要是“大數(shù)據(jù)分析師”,需求數(shù)量達(dá)到100多,其他的相關(guān)崗位則較少,數(shù)量均在20人以下。
3.2? 地區(qū)分布
地區(qū)是人們選擇工作時(shí)要考慮的重要因素。從圖3可以看出北京,廣州,上海的大數(shù)據(jù)分析師需求量達(dá)到49%,幾乎占到總需求人數(shù)的一半。
3.3? 薪資分布
薪資是人們?cè)谡夜ぷ鲿r(shí)的又一個(gè)重要因素。從圖4中可以看出,武漢大數(shù)據(jù)分析師以年薪25.54萬位居榜首,接下來是北京23.29萬,杭州22.5萬。
4? 結(jié)束語
本文基于Python實(shí)現(xiàn)了51job上相關(guān)職位的爬蟲編寫。文中共提取有效信息35540,通過爬蟲程序,? ?可以方便的獲取目標(biāo)數(shù)據(jù)。通過去重,規(guī)范化等數(shù)據(jù)處理后,以可視化圖表形式直觀的對(duì)不同地區(qū)的薪資,崗位進(jìn)行展示,為求職者在找工作的過程中提供了便利。
參考文獻(xiàn)
[1]侯美靜, 崔艷鵬, 胡建偉. 基于爬蟲的智能爬行算法研究.?計(jì)算機(jī)應(yīng)用與軟件, 2018, 35(11): 215-219.
[2]鄭冬冬, 趙鵬鵬, 崔志明. Deep Web爬蟲研究與設(shè)計(jì). 清華大學(xué)學(xué)報(bào)(自然科學(xué)版), 2005, 45(S1): 1896-1902.
[3]周中華, 張惠然, 謝江. 基于Python的新浪微博數(shù)據(jù)爬蟲. 計(jì)算機(jī)應(yīng)用, 2014, 34(1): 3131-3134.
[4]杜蘭, 劉智, 陳琳琳. 基于Python的文獻(xiàn)檢索系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn). 軟件, 2020, 41(1): 55-59.
[5]李鵬飛, 吳為民, 周孝林, 等. 基于“用戶畫像”挖掘的圖書推薦APP設(shè)計(jì)[J]. 軟件, 2018, 39(5): 35-37.
[6]羅咪. 基于Python的新浪微博用戶數(shù)據(jù)獲取技術(shù). 電子世界: 138-139.