張鵬
摘要:當(dāng)前,就業(yè)成為人們生產(chǎn)生活的重要主題,隨著互聯(lián)網(wǎng)的飛速發(fā)展,招聘網(wǎng)站成為求職者就業(yè)的主要通道,網(wǎng)站中的招聘職位雖然豐富,但較難迅速獲取崗位中的重要信息。文章采取Jsoup網(wǎng)絡(luò)爬蟲技術(shù),爬取了BOSS直聘網(wǎng)站中天津市的Java崗位信息,并使用POI技術(shù)將崗位中的重要信息經(jīng)過數(shù)據(jù)處理保存為本地Excel文件,便于求職者直觀地對所搜索的崗位進行篩選判斷,具有良好的實用價值。
關(guān)鍵詞:Jsoup;網(wǎng)絡(luò)爬蟲;Boss直聘
中圖分類號: TP392? 文獻標(biāo)志碼:A
0 引言
隨著互聯(lián)網(wǎng)的迅猛發(fā)展,就業(yè)方式已由傳統(tǒng)的線下招聘逐步轉(zhuǎn)變?yōu)楦咝Э旖莸木W(wǎng)絡(luò)求職,通過各類招聘網(wǎng)站尋找崗位成為人們求職的主要方式,其中,BOSS直聘憑借其獨創(chuàng)的“找工作,與老板談”模式成為求職網(wǎng)站,特別是互聯(lián)網(wǎng)行業(yè)求職的主流網(wǎng)站之一。雖然通過網(wǎng)站可以便捷地查詢到崗位的需求信息,但是,人們在這些冗余的崗位需求信息中很難找到貼合自身的崗位信息,且不容易掌握某個崗位的薪資平均水平、分布地域等重要數(shù)據(jù)。
為了快速獲取某類型崗位的全部招聘信息,便于用戶快速篩選薪資、地域等實用數(shù)據(jù),本文采用Jsoup的爬蟲技術(shù),以java作為崗位關(guān)鍵字,將BOSS直聘網(wǎng)站上的主要招聘信息逐頁爬取并保存到本地Excel文件中,同時進行數(shù)據(jù)預(yù)處理,方便求職者直觀地對所搜索的崗位進行研究與選擇。
1 招聘信息爬取研究現(xiàn)狀
國內(nèi)已存在較多學(xué)者使用爬蟲技術(shù)爬取招聘網(wǎng)站的案例。例如,孫暖等[1]采用Scrapy框架,基于Python語言設(shè)計爬蟲采集方案并實現(xiàn)了面向獵聘、拉鉤等招聘類網(wǎng)站的數(shù)據(jù)采集,最終成功獲取50 000余條數(shù)據(jù)。梅杰[2]采用網(wǎng)絡(luò)爬蟲技術(shù)獲取智聯(lián)招聘網(wǎng)站中的互聯(lián)網(wǎng)行業(yè)數(shù)據(jù),并對獲取的數(shù)據(jù)集進行刪除、轉(zhuǎn)換。毛遂等[3]采取Python爬蟲對51Job招聘網(wǎng)站上的Python相關(guān)崗位進行爬取,并對爬取的本地數(shù)據(jù)進行可視化分析。
為解決招聘網(wǎng)站信息不直觀的問題,本文將對所用技術(shù)進行分析,設(shè)計爬蟲模型并完成代碼實現(xiàn),以便呈現(xiàn)出清晰直觀的招聘崗位現(xiàn)狀,為相關(guān)崗位的人才提供良好的職業(yè)決策判斷。
2 相關(guān)技術(shù)分析
2.1 網(wǎng)絡(luò)爬蟲的原理
隨著互聯(lián)網(wǎng)的飛速發(fā)展,網(wǎng)絡(luò)成為數(shù)據(jù)與信息的載體中心,挖掘這些數(shù)據(jù)背后的意義尤為重要。網(wǎng)絡(luò)爬蟲是一種程序代碼或者腳本文件[4],可以遵循一定的規(guī)則自動獲取網(wǎng)站上的數(shù)據(jù)。
2.2 Jsoup技術(shù)簡介
Jsoup是一款HTML解析器,擁有十分方便的API處理HTML文檔,比如,參考了DOM對象的文檔遍歷方法,參考了CSS選擇器的用法等等,因此,可以使用Jsoup快速地爬取頁面數(shù)據(jù)。
2.3 POI技術(shù)簡介
Apache POI是用Java編寫的免費開源的跨平臺的Java API,提供對Microsoft Office格式檔案讀和寫的功能。POI也用于操作Excel,其中,Excel中的工作簿、sheet、行和單元格都可以在POI中找到相應(yīng)的對象進行操作[7]。
3 爬取招聘信息模型設(shè)計與實現(xiàn)
招聘信息爬取功能的核心是首先通過攜帶請求對目標(biāo)網(wǎng)頁發(fā)出請求并取得服務(wù)器響應(yīng),接著將獲得的響應(yīng)內(nèi)容(Document)通過Jsoup進行解析,封裝為實體類對象的集合,其中,翻頁功能使用遞歸調(diào)用方法實現(xiàn)。在獲取到所有的招聘數(shù)據(jù)后,對數(shù)據(jù)進行預(yù)處理,并將其保存為本地Excel文件。爬取流程如圖1所示。
3.1 分析網(wǎng)頁URL,確定訪問路徑
BOSS直聘是一個動態(tài)網(wǎng)頁,需要分析其URL來實現(xiàn)崗位關(guān)鍵字、城市、頁碼等參數(shù)的填充。該網(wǎng)站崗位搜索首頁URL為https://www.zhipin.com/web/geek/job,是不變部分,其后需要添加3個參數(shù),分別為崗位關(guān)鍵字query、城市關(guān)鍵字city和頁碼page。
將query設(shè)置為java,city設(shè)置為天津,城市代碼為101030100,訪問第一頁時,page參數(shù)可省略,因此可以得到天津市java崗位的招聘信息URL為:
https://www.zhipin.com/web/geek/job?query=java&city=101030100
使用Jsoup.connect(url)獲取連接,攜帶header發(fā)起請求,將網(wǎng)頁保存在Document對象中。
3.2 分析網(wǎng)頁結(jié)構(gòu)
訪問招聘信息URL,得到天津市java崗位的第一頁,頁面內(nèi)有30個招聘信息。利用谷歌瀏覽器的F12開發(fā)者工具查看所要的爬取內(nèi)容在網(wǎng)頁上對應(yīng)的標(biāo)簽,可以得到它的屬性、HTML代碼等。對網(wǎng)頁進行分析發(fā)現(xiàn),每一個招聘信息都是以
List
3.3 將網(wǎng)頁內(nèi)容封裝為對象集合
本文定義了一個核心方法getBossTJList(String url, String area),用于將網(wǎng)頁內(nèi)容封裝為招聘信息List。其中url參數(shù)為招聘信息URL,area參數(shù)為要搜索的崗位關(guān)鍵字,設(shè)置該參數(shù)旨在方便求職者隨時切換求職崗位。
依據(jù)網(wǎng)頁元素集合List
//崗位名稱
String job_title = e.getElementsByClass("job-title").text();
//薪資
String salary = e.getElementsByClass("salary").text();
//地理位置
String job_address = e.getElementsByClass("job-area").text();
本文使用Job實體類對象存儲招聘信息,每獲取一個Element中的主要招聘數(shù)據(jù),就將它們封裝為一個Job對象。設(shè)置全局靜態(tài)變量集合job_list,將Job對象依次添加進集合中。
3.4 遞歸實現(xiàn)翻頁功能
BOSS直聘網(wǎng)站的頁碼部分位于