張鵬


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