陳康琛 劉進(jìn)進(jìn) 陳興雷
摘要:為了解決大學(xué)生獲取就業(yè)信息滯后、時(shí)間成本高昂以及與用人組織間信息不對(duì)稱的問(wèn)題,提出運(yùn)用網(wǎng)絡(luò)爬蟲信息技術(shù)和郵件推送技術(shù)的設(shè)計(jì)思想,以自動(dòng)化控制減少人工操作為實(shí)現(xiàn)途徑,開發(fā)和研究學(xué)生就業(yè)信息挖掘與推送系統(tǒng)。系統(tǒng)包括輸入加載模塊,信息抓取模塊,結(jié)果輸出模塊和郵件推送模塊。以Python計(jì)算機(jī)設(shè)計(jì)語(yǔ)言為基礎(chǔ),進(jìn)行代碼編譯,實(shí)現(xiàn)以全國(guó)大學(xué)生就業(yè)公共服務(wù)立體化平臺(tái)(新職網(wǎng))為自動(dòng)爬取對(duì)象,對(duì)網(wǎng)站工作日當(dāng)天信息JSON數(shù)據(jù)源下載存儲(chǔ),信息抓取模塊與郵件推送模塊相配合,在索引JSON數(shù)據(jù)庫(kù)進(jìn)行深度挖掘后,自動(dòng)將輸出匯總結(jié)果推送至郵箱。系統(tǒng)操作簡(jiǎn)單,高效可靠,在畢業(yè)季中有較大推廣應(yīng)用可能。
關(guān)鍵詞:python;網(wǎng)絡(luò)爬蟲;就業(yè)信息;郵件推送
中圖分類號(hào):TP391? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2019)19-0006-03
Abstract: In order to solve the problems of inadequate access to employment information, high time cost and asymmetric information between college students and employers, this paper puts forward the design idea of using web crawler information and email push technologies to develop and study a mining and pushing system of student employment information, so that the manual operation can be reduced through an automatic control. The system includes input loading module, information capture module, result output module, and email push module. The code is compiled on the basis of Python computer design language. Taking NCSS (New Career Service Site for Students) as the automatic crawler object, it downloads and saves the daily information JSON data source from the website on workdays. Combined with information capture module and email push module, the output summary results can be automatically pushed to the mailbox after in-depth mining of index JSON database. The system is efficient, reliable and easy to use, which may be widely used in the graduation season.
Key words: python; web crawler; employment information; email push
1 引言
近年來(lái),大學(xué)生畢業(yè)人數(shù)逐年增長(zhǎng),2019年全國(guó)高校畢業(yè)生人數(shù)預(yù)計(jì)834萬(wàn)[1],再創(chuàng)歷史新高。大學(xué)生就業(yè)難已成為社會(huì)關(guān)切的熱點(diǎn)問(wèn)題之一。面對(duì)最難就業(yè)季和就業(yè)崗位信息的動(dòng)態(tài)更新,大學(xué)畢業(yè)生每天需要進(jìn)行煩瑣的人工查詢和篩選操作,耗費(fèi)大量的時(shí)間成本,同時(shí)也無(wú)法及時(shí)得到大量有效的招聘信息,更有招聘信息檢索不當(dāng)和數(shù)據(jù)挖掘深度不夠的情況發(fā)生,使其與心儀的就業(yè)崗位失之交臂。目前在我國(guó)網(wǎng)絡(luò)招聘市場(chǎng)中,已呈現(xiàn)出智聯(lián)招聘、前程無(wú)憂和中華英才網(wǎng)這類綜合性招聘網(wǎng)站領(lǐng)先,其他地方性、行業(yè)性、搜索型和社交型等多種網(wǎng)站并存發(fā)展的多元格局[2]。雖然就業(yè)信息平臺(tái)已搭建完成,但都還需大學(xué)生逐個(gè)進(jìn)行人工查詢、篩選的操作,耗時(shí)耗力,從用戶體驗(yàn)來(lái)說(shuō),不夠自動(dòng)化。因此,本文設(shè)計(jì)一款就業(yè)信息挖掘與推送系統(tǒng),對(duì)保證就業(yè)信息時(shí)效性,使大學(xué)生自動(dòng)化高效定制就業(yè)信息具有重要意義,為全國(guó)大學(xué)生就業(yè)信息獲取提供了新的方法和途徑。
2 項(xiàng)目相關(guān)技術(shù)和設(shè)計(jì)
2.1 Python
Python是一種簡(jiǎn)單易學(xué)、功能強(qiáng)大的計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言, 它有高效率的高層數(shù)據(jù)結(jié)構(gòu), 簡(jiǎn)單而有效地實(shí)現(xiàn)面向?qū)ο缶幊獭ython簡(jiǎn)潔的語(yǔ)法和對(duì)動(dòng)態(tài)輸入的支持,讓人更加容易閱讀、調(diào)試和擴(kuò)展,再加上其高度集成了解釋性、交互性、面向?qū)ο笮院拓S富的可擴(kuò)展性等特點(diǎn)[3],可根據(jù)情況,導(dǎo)入多種模塊,大量的第三方函數(shù)庫(kù)對(duì)其進(jìn)行了支持,使得Python語(yǔ)言在爬蟲和大數(shù)據(jù)處理分析方面具有明顯優(yōu)勢(shì),特別適用于快速的應(yīng)用開發(fā),也成為當(dāng)前程序設(shè)計(jì)的熱門語(yǔ)言之一。
本項(xiàng)目,運(yùn)用python中的os, requests, BeautifulSoup模塊編寫自定義函數(shù)CXRD,實(shí)現(xiàn)新職網(wǎng)JSON源文件的下載;requests, lxml, BeautifulSoup模塊編寫自定義函數(shù)XJCX,實(shí)現(xiàn)JSON數(shù)據(jù)源的解析;smtplib, MIMEText模塊編寫自定義函數(shù)sendmail,實(shí)現(xiàn)電子郵件的自動(dòng)推送。通過(guò)以上自定義函數(shù)的調(diào)用,再結(jié)合re, time, tkinter, tkinter.filedialog, tkinter.messagebox模塊和正則表達(dá)式對(duì)大學(xué)生就業(yè)信息挖掘與推送軟件進(jìn)行編譯,便能夠達(dá)成就業(yè)信息網(wǎng)頁(yè)自動(dòng)獲取、崗位詳情信息主動(dòng)解析和匯總結(jié)果電子郵件推送等目標(biāo)。
2.2 網(wǎng)絡(luò)爬蟲
網(wǎng)絡(luò)爬蟲(Web Crawler),又稱網(wǎng)絡(luò)蜘蛛(Web Spider)或Web信息采集器,是一個(gè)自動(dòng)下載網(wǎng)頁(yè)的計(jì)算機(jī)程序或自動(dòng)化腳本,是搜索引擎的重要組成部分[4]。網(wǎng)絡(luò)爬蟲的基本實(shí)現(xiàn)原理及過(guò)程:通過(guò)互聯(lián)網(wǎng)獲取網(wǎng)頁(yè)初始URL鏈接,將初始網(wǎng)頁(yè)存儲(chǔ)至數(shù)據(jù)庫(kù),并對(duì)初始網(wǎng)頁(yè)中出現(xiàn)的新URL鏈接進(jìn)行爬取,始終重復(fù)上述過(guò)程,直至滿足設(shè)定的停止條件。若無(wú)停止條件,將直到無(wú)法獲取新的URL鏈接為止。以此實(shí)現(xiàn)對(duì)網(wǎng)頁(yè)數(shù)據(jù)的遍歷、挖掘和保存。本項(xiàng)目即利用Python中對(duì)網(wǎng)頁(yè)內(nèi)容的自動(dòng)爬取功能,完成對(duì)網(wǎng)站數(shù)據(jù)的收集與更新。
2.3 正則表達(dá)式
JSON指的是類似JavaScript對(duì)象的一種數(shù)據(jù)格式,這種數(shù)據(jù)格式是服務(wù)器和客戶端數(shù)據(jù)交互的媒介。在對(duì)網(wǎng)站JSON數(shù)據(jù)源下載存儲(chǔ)后,基于正則表達(dá)式進(jìn)行匹配,對(duì)JSON文本數(shù)據(jù)進(jìn)行數(shù)據(jù)清洗,以極其簡(jiǎn)單的操作方式從煩瑣雜亂的字符串中提取我們想要的特定部分。例如:本項(xiàng)目中,通過(guò)recNames=re.findall('.recName.*?(?=,)',line)的方式進(jìn)行信息提取,實(shí)現(xiàn)對(duì)“,”前含有“recName”的字符串的自動(dòng)匹配并輸出內(nèi)容。其中, '.recName.*?(?=,)'即為正則表達(dá)式。
2.4 網(wǎng)站Robots協(xié)議
Robots.txt是存放于網(wǎng)站目錄下的ASCII編碼的文本文件,它通常告訴搜索引擎蜘蛛程序在此網(wǎng)站中可以抓取和禁止抓取的內(nèi)容[5],直接標(biāo)明爬蟲服務(wù)程序在其網(wǎng)站上的許可抓取信息范圍,此協(xié)議的存在是為了保護(hù)網(wǎng)站數(shù)據(jù)和敏感信息。
大學(xué)生就業(yè)信息挖掘與推送系統(tǒng)爬取信息源采用新職網(wǎng)數(shù)據(jù)源,經(jīng)過(guò)瀏覽器訪問(wèn)如下網(wǎng)址http://www.ncss.org.cn/robots.txt,此頁(yè)面顯示結(jié)果為
“404 Not Found”即未設(shè)置robots.txt,因此,在未經(jīng)新職網(wǎng)授權(quán)的情況下,網(wǎng)絡(luò)爬蟲可直接對(duì)其數(shù)據(jù)源的所有信息內(nèi)容進(jìn)行抓取,即其數(shù)據(jù)源向社會(huì)開放。
2.5 系統(tǒng)運(yùn)行設(shè)計(jì)
要對(duì)有效的就業(yè)招聘信息進(jìn)行搜集,首先需要確定就業(yè)信息發(fā)布于哪些網(wǎng)站上。本項(xiàng)目以新職網(wǎng)(http://ncss.org.cn)為例,對(duì)專業(yè)就業(yè)信息進(jìn)行獲取,人為設(shè)定專業(yè)對(duì)應(yīng)的篩選關(guān)鍵詞。在對(duì)目標(biāo)網(wǎng)址和關(guān)鍵詞確立完成后,便是對(duì)其URL所對(duì)應(yīng)的網(wǎng)頁(yè)詳情內(nèi)容進(jìn)行爬取,找出含有以上篩選關(guān)鍵詞的信息。完成信息抓取后,設(shè)定以方便閱讀的格式進(jìn)行本地保存,以一條信息對(duì)應(yīng)一條鏈接輸出為宜。最終,將爬取匯總結(jié)果通過(guò)QQ郵箱一鍵推送。
3 項(xiàng)目系統(tǒng)分析及實(shí)現(xiàn)
3.1 輸入加載模塊
首先導(dǎo)入Beautiful Soup模塊,它是一個(gè)具有強(qiáng)大功能的工具箱,內(nèi)置python支持的大量函數(shù),可實(shí)現(xiàn)lxml網(wǎng)頁(yè)解析、文檔樹的遍歷和搜索以及CSS選擇等功能,為本次設(shè)計(jì)的系統(tǒng)python代碼進(jìn)行靈活調(diào)用函數(shù)提供了較大幫助。
隨后對(duì)專業(yè)對(duì)應(yīng)的篩選關(guān)鍵詞進(jìn)行導(dǎo)入,利用tkinter模塊中的filedialog和messagebox標(biāo)準(zhǔn)對(duì)話框模塊,生成文件選擇對(duì)話框,獲取專業(yè)檢索詞的文件路徑,運(yùn)用open(,[r,w,a,b])函數(shù)讀取檢索詞,其中r:讀操作;w:寫操作;a:添加操作,b:二進(jìn)制存取操作,此模塊采用r只讀操作即可完成設(shè)計(jì)需求,采用文件對(duì)話框txt文本導(dǎo)入設(shè)計(jì)是因?yàn)榭芍苯訉?dǎo)入數(shù)個(gè)專業(yè)檢索詞,避免在代碼運(yùn)行過(guò)程中逐個(gè)輸入文本情況的發(fā)生。爬蟲腳本內(nèi)容如下:
在對(duì)新職網(wǎng)JSON數(shù)據(jù)源下載本地存儲(chǔ)完成后,利用re模塊構(gòu)建設(shè)置正則表達(dá)式,并基于正則表達(dá)式進(jìn)行匹配,對(duì)獲取到的JSON數(shù)據(jù)進(jìn)行篩選和匹配,得到符合條件的“recName”, “recId”, “jobTitle”, “jobId”數(shù)據(jù)內(nèi)容,為信息抓取模塊中網(wǎng)頁(yè)詳情檢索和結(jié)果輸出正常創(chuàng)造前提條件。
3.2 信息抓取模塊
在輸入加載模塊運(yùn)行完成后,便需要運(yùn)用崗位URL查詢信息,進(jìn)行網(wǎng)頁(yè)詳情頁(yè)面的檢索詞檢索,為了防止因網(wǎng)絡(luò)波動(dòng)或服務(wù)器不穩(wěn)定造成連接失敗的問(wèn)題,設(shè)定服務(wù)器重連次數(shù)“3”,運(yùn)用BeautifulSoup和lxml模塊對(duì)新職網(wǎng)職位網(wǎng)頁(yè)進(jìn)行解析,解析結(jié)果為新職網(wǎng)網(wǎng)站html代碼,通過(guò)對(duì)整個(gè)新職網(wǎng)網(wǎng)頁(yè)html代碼的分析總結(jié),得出使用BeautifulSoup中的方法find_all查詢匹配li標(biāo)簽中的職業(yè)名稱和div標(biāo)簽中的招聘企業(yè)所處地域,之后,若職位詳情頁(yè)面中含有檢索詞字段即返回該頁(yè)面的URL,否則,直接返回空值。如下所示:
3.3 結(jié)果輸出模塊
在信息抓取模塊運(yùn)行完成后,便是將檢索篩選結(jié)果進(jìn)行本地保存,將會(huì)以"jobTitle":"**"(職位名稱)、"recName ":"**"(企業(yè)名稱)、"address":**(企業(yè)地址)、URL鏈接(網(wǎng)頁(yè)詳情)的形式保存為txt文本文檔,直接將職位名稱、招聘企業(yè)名稱、企業(yè)所在省市和職位詳情鏈接進(jìn)行顯示,方便推送郵件時(shí)收件方進(jìn)行閱讀查看,至此,檢索結(jié)果輸出完成。
3.4 郵件推送模塊
電子郵件進(jìn)行一鍵推送功能的實(shí)現(xiàn)采取自定義發(fā)送電子郵件函數(shù)的方法,導(dǎo)入smtplib, MIMEText模塊,該模塊簡(jiǎn)單定義了一個(gè)SMTP客戶端,對(duì)SMTP協(xié)議(簡(jiǎn)單郵件傳輸協(xié)議)進(jìn)行簡(jiǎn)單的封裝,可用于向任何互聯(lián)網(wǎng)機(jī)器發(fā)送使用SMTP協(xié)議的郵件,將郵件服務(wù)器及短號(hào)、發(fā)送方郵箱和郵箱授權(quán)碼等信息進(jìn)行輸入編譯后,依然按照文件對(duì)話框的方式導(dǎo)入收件方郵箱,在有需要的情況下進(jìn)行輸出結(jié)果的批量用戶一鍵發(fā)送,方便快捷。實(shí)現(xiàn)代碼如下:
4 項(xiàng)目系統(tǒng)運(yùn)行試驗(yàn)
在完成大學(xué)生就業(yè)信息挖掘與推送系統(tǒng)代碼編譯后,需要對(duì)整個(gè)代碼及設(shè)計(jì)模塊的運(yùn)行進(jìn)行試驗(yàn)驗(yàn)證, 測(cè)試整個(gè)系統(tǒng)的可靠性和高效性,所得試驗(yàn)具體參數(shù)記錄結(jié)果如下表所示: