邊倩 王振鐸 庫(kù)趙云
摘 要: 目前,網(wǎng)上數(shù)據(jù)呈現(xiàn)幾何級(jí)數(shù)的增長(zhǎng),人們獲得有效、準(zhǔn)確信息的難度增大。有必要對(duì)數(shù)據(jù)進(jìn)行合理的采集和分析,尤其是與人們工作有關(guān)的招聘數(shù)據(jù)的真實(shí)性和有效性。為了解決在職人員和廣大高校畢業(yè)生獲取滿(mǎn)意的招聘崗位信息,利用Python對(duì)該信息進(jìn)行收集和分析,勢(shì)在必行。首先、以某招聘為例,爬取招聘數(shù)據(jù),其次,從地區(qū)、行業(yè)、專(zhuān)業(yè)、熱門(mén)崗位等維度進(jìn)行數(shù)據(jù)分析,最后,利用可視化技術(shù),將有效的數(shù)據(jù)展示給用戶(hù)。經(jīng)測(cè)試表明,該系統(tǒng)能夠正常運(yùn)行,數(shù)據(jù)可靠,能夠?yàn)榍舐氄咛峁?zhǔn)確的數(shù)據(jù)。
關(guān)鍵詞: 招聘; 爬蟲(chóng); 數(shù)據(jù)分析; Python
中圖分類(lèi)號(hào): TP311 ? ? ?文獻(xiàn)標(biāo)志碼: A
Abstract: At present, there is a geometric increase in online data, which makes more difficult for people to obtain effective and accurate information. It is necessary to collect and analyze the data reasonably. In particular, the authenticity and validity of hiring data are related to peoples jobs. In order to solve the problem that the in-service personnel and the majority of college graduates obtain satisfactory recruitment post information, this paper presents to collect and analyze theinformation by using Python. Firstly, we take a certain recruitment as an example to crawl the recruitment data. Secondly, data analysis is conductedfrom the dimensions of region, industry, major and popular post. Finally, visualization technologyis used to display effective data to users. The test shows that the prototype system can work normally, the data arereliable and can provide accurate data for job seekers.
Key words: recruitment; crap; data analysis; Python
0 引言
隨著互聯(lián)網(wǎng)的迅猛發(fā)展,網(wǎng)絡(luò)數(shù)據(jù)已經(jīng)進(jìn)入大數(shù)據(jù)時(shí)代。傳統(tǒng)的搜索引擎盡管解決了信息搜索問(wèn)題,但無(wú)法進(jìn)行有效的數(shù)據(jù)分析和優(yōu)質(zhì)資源的獲取。并且,人們的需求不同,數(shù)據(jù)的要求也不同。為了解決這一問(wèn)題,定向抓取數(shù)據(jù)的爬蟲(chóng)誕生了。它的誕生把人們從重復(fù)性的勞動(dòng)中解放出來(lái),節(jié)約人們寶貴的時(shí)間。
對(duì)于畢業(yè)班的大學(xué)生以及想重新?lián)駱I(yè)的人,上網(wǎng)快速找到合適的工作,無(wú)疑是急需的。而如今的招聘網(wǎng)站信息多,想要獲取有效的信息需要的時(shí)間太長(zhǎng)。針對(duì)以上不足,有必要通過(guò)爬蟲(chóng)技術(shù),幫助求職者在雜亂無(wú)序的數(shù)據(jù)中尋找有用的數(shù)據(jù),科學(xué)分析,縮短求職者找工作的時(shí)間成本,幫助求職者快速擇業(yè)。筆者在參考文獻(xiàn)[2-7]后,設(shè)計(jì)和開(kāi)發(fā)了本系統(tǒng)。
1 網(wǎng)絡(luò)爬蟲(chóng)的原理和步驟
1.1 爬蟲(chóng)的原理
網(wǎng)絡(luò)爬蟲(chóng)是一種按照一定的規(guī)則,自動(dòng)地抓取萬(wàn)維網(wǎng)信息的程序或者腳本。爬蟲(chóng)對(duì)某一站點(diǎn)訪問(wèn),如果可以訪問(wèn)就下載其中的網(wǎng)頁(yè)內(nèi)容,并且通過(guò)爬蟲(chóng)解析模塊解析得到的網(wǎng)頁(yè)鏈接,把這些鏈接作為之后的抓取目標(biāo),并且在整個(gè)過(guò)程中完全不依賴(lài)用戶(hù),自動(dòng)運(yùn)行[1]。若不能訪問(wèn)則根據(jù)爬蟲(chóng)預(yù)先設(shè)定的策略進(jìn)行下一個(gè)URL的訪問(wèn)。在整個(gè)過(guò)程中爬蟲(chóng)會(huì)自動(dòng)進(jìn)行異步處理數(shù)據(jù)請(qǐng)求,返回網(wǎng)頁(yè)的抓取數(shù)據(jù)。在整個(gè)的爬蟲(chóng)運(yùn)行之前,用戶(hù)都可以自定義的添加代理,偽裝請(qǐng)求頭以便更好地獲取網(wǎng)頁(yè)數(shù)據(jù)。
1.2 爬蟲(chóng)的步驟
數(shù)據(jù)抓取的工作流程是:首先,通過(guò)Http向目標(biāo)站點(diǎn)發(fā)送請(qǐng)求,在請(qǐng)求的時(shí)候,如果服務(wù)器返回200狀態(tài)碼,則表示可以進(jìn)行數(shù)據(jù)抓取;繼而根據(jù)預(yù)設(shè)的抓取規(guī)則將得到的內(nèi)容進(jìn)行解析保存處理。如果返回的是錯(cuò)誤的狀態(tài)碼,系統(tǒng)就請(qǐng)求下一個(gè)鏈接。直到將URL LIST遍歷完,工作流程如圖1所示。
1.3 爬取策略
在爬蟲(chóng)系統(tǒng)中,因?yàn)樯婕暗较茸ト∧莻€(gè)頁(yè)面,后抓取哪個(gè)頁(yè)面。而決定這些URL排列順序的方法,叫做抓取策略。爬蟲(chóng)主要采取兩種抓取策略,深度優(yōu)先和廣度優(yōu)先。采用這兩種策略得到的結(jié)果也不一樣。
其中,深度優(yōu)先主要是從一個(gè)鏈接開(kāi)始一個(gè)一個(gè)的往里深入,直到整個(gè)的這一鏈接路線(xiàn)完成之后才進(jìn)行下一層URL的爬取。這種采集方式主要強(qiáng)調(diào)的是,抓取數(shù)據(jù)的深度,抓取順序1,2,3,4,5,6,7,如圖2所示。
爬蟲(chóng)采用的廣度優(yōu)先算法主要是完成當(dāng)前層的URL后才進(jìn)行下一階段的URL的獲取。這種主要是為了更多的獲取到多樣的數(shù)據(jù)信息,數(shù)據(jù)的深度相對(duì)前者不夠,順序1,2,3,4,5,6,7,如圖3所示。
2 系統(tǒng)設(shè)計(jì)
2.1 功能設(shè)計(jì)
本系統(tǒng)主要分為爬取數(shù)據(jù)、數(shù)據(jù)存儲(chǔ)和WEB數(shù)據(jù)分析和顯示三個(gè)模塊,WEB模塊依賴(lài)于爬蟲(chóng)模塊。爬蟲(chóng)模塊由許多頁(yè)面處理模塊組成,WEB模塊在提取了爬蟲(chóng)數(shù)據(jù)后主要進(jìn)行的是數(shù)據(jù)分析。本文的系統(tǒng)結(jié)構(gòu)設(shè)計(jì),如圖4所示。
2.2 數(shù)據(jù)庫(kù)設(shè)計(jì)
數(shù)據(jù)庫(kù)設(shè)計(jì)主要包含用于數(shù)據(jù)分析的字段,在抓取數(shù)據(jù)過(guò)程中正則獲取到數(shù)據(jù)庫(kù)中所依賴(lài)的信息。數(shù)據(jù)庫(kù)字段表如表1所示。
2.3 開(kāi)發(fā)工具
系統(tǒng)開(kāi)發(fā)平臺(tái):JetBrains PyCharm 5.0.3
程序語(yǔ)言:Python 3.7
框架:Scrapy1.5.1
系統(tǒng)運(yùn)行環(huán)境:Windows10 64位
數(shù)據(jù)庫(kù):Mysql 5.5
3 招聘爬蟲(chóng)系統(tǒng)的實(shí)現(xiàn)
系統(tǒng)選擇某招聘網(wǎng)站作為數(shù)據(jù)源。系統(tǒng)主要功能是實(shí)現(xiàn)對(duì)招聘崗位數(shù)據(jù)的爬取,主要涉及招聘信息中的所在城市、崗位名稱(chēng)、薪資、福利、公司名稱(chēng)、發(fā)布時(shí)間等信息。
3.1 網(wǎng)頁(yè)數(shù)據(jù)的爬取
網(wǎng)頁(yè)抓取模塊可以說(shuō)是爬蟲(chóng)的核心,它定義了爬蟲(chóng)的抓取規(guī)則,請(qǐng)求的數(shù)據(jù)參數(shù)以及在整個(gè)的抓取過(guò)程中頁(yè)面的等待時(shí)間,頁(yè)面的頁(yè)數(shù)。其中,header定義了它的請(qǐng)求頭,page定義了它的初始頁(yè)數(shù),start_requests函數(shù)定義了它的初始請(qǐng)求parse定義了它隨后的抓取規(guī)則。抓取數(shù)據(jù)如圖5所示。
3.2 數(shù)據(jù)存儲(chǔ)模塊
由于爬蟲(chóng)抓取的數(shù)據(jù)量較大,為了高效地進(jìn)行數(shù)據(jù)分析,采用Excel,Json的方式效率明顯降低。所以,采用數(shù)據(jù)庫(kù)技術(shù)進(jìn)行存儲(chǔ)是必要的。數(shù)據(jù)存儲(chǔ)模塊主要完成將爬蟲(chóng)抓取數(shù)據(jù)持久化到MYSQL數(shù)據(jù)庫(kù)中。
3.3 數(shù)據(jù)可視化
為了讓數(shù)據(jù)更加的直觀,系統(tǒng)采用ECharts圖表方式,增強(qiáng)用戶(hù)的視覺(jué)效果。ECharts是一款由百度前端技術(shù)部開(kāi)發(fā)的,基于Javascript的數(shù)據(jù)可視化圖表庫(kù),提供直觀,生動(dòng),可交互,可個(gè)性化定制的數(shù)據(jù)可視化圖表[8]。
在系統(tǒng)前端數(shù)據(jù)可視化時(shí),首先是將echarts.min.js放在static/js下的目錄。然后在模板頁(yè)中引用{% static 'js/echarts.min.js'%}。最后在頁(yè)面中調(diào)用ECHARTS。通過(guò)集成ECHARTS可以很方便的去實(shí)現(xiàn)數(shù)據(jù)分析圖表,直觀的觀察數(shù)據(jù)信息,得出更加真實(shí)的對(duì)比值。數(shù)據(jù)分析結(jié)果如圖6所示。
4 總結(jié)
系統(tǒng)的設(shè)計(jì),旨在為求職者提供有益的數(shù)據(jù),幫助求職者更快的找到心儀的工作。從數(shù)據(jù)的爬取、存儲(chǔ)和數(shù)據(jù)分析給出了設(shè)計(jì)和實(shí)現(xiàn)步驟,為相關(guān)爬蟲(chóng)項(xiàng)目提供了借鑒。
參考文獻(xiàn)
[1] 王芳.基于Python的招聘網(wǎng)站信息爬取與數(shù)據(jù)分析[J].信息技術(shù)與網(wǎng)絡(luò)安全,2019,38(8):42-46.
[2] 趙綠草,饒佳冬.基于python的二手房數(shù)據(jù)爬取及分析[J].電腦知識(shí)與技術(shù),2019,15(19):1-3.
[3] 趙亮,賴(lài)研,仝鑫.基于Python的微博用戶(hù)分析系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)產(chǎn)品與流通,2019(6):282-283.
[4] 廖勇毅,丁怡心.基于Python的股票定向爬蟲(chóng)實(shí)現(xiàn)[J].電腦編程技巧與維護(hù),2019(5):45-46.
[5] 檀冬宇.基于Python的大眾點(diǎn)評(píng)網(wǎng)數(shù)據(jù)抓取技術(shù)研究[J].計(jì)算機(jī)產(chǎn)品與流通,2019(5):116.
[6] 程增輝,夏林旭,劉茂福.基于Python的健康數(shù)據(jù)爬蟲(chóng)設(shè)計(jì)與實(shí)現(xiàn)[J].軟件導(dǎo)刊,2019,18(2):60-63.
[7] 崔玉嬌,孫結(jié)冰,祁曉波,等.基于Python的51-job數(shù)據(jù)抓取程序設(shè)計(jì)[J].無(wú)線(xiàn)電通信技術(shù),2018,44(4):416-419.
[8] 賀路路,阮曉龍.高校學(xué)生考試成績(jī)的數(shù)據(jù)分析模式與可視化研究[J].計(jì)算機(jī)時(shí)代,2019(9):50-52.
(收稿日期: 2019.10.08)