接輝
隨著信息技術(shù)的深入發(fā)展和廣泛應(yīng)用,網(wǎng)絡(luò)平臺成為各類信息發(fā)布和收集的主要渠道。網(wǎng)絡(luò)爬蟲作為網(wǎng)絡(luò)數(shù)據(jù)采集的重要技術(shù)手段,已廣泛應(yīng)用于各個領(lǐng)域。本文使用基于Selenium 技術(shù)的網(wǎng)絡(luò)爬蟲,從某招聘網(wǎng)站采集到北京、上海、深圳、南昌四個城市IT行業(yè)招聘信息,使用數(shù)據(jù)可視化技術(shù)進行分析研究,得出了一些有益的結(jié)論。本文采用的數(shù)據(jù)采集和可視化分析方法對于一般研究工作具有普遍的借鑒意義。
一、相關(guān)技術(shù)
1.網(wǎng)絡(luò)爬蟲
網(wǎng)絡(luò)爬蟲是按一定規(guī)則自動抓取互聯(lián)網(wǎng)信息的程序或腳本。在大數(shù)據(jù)時代,網(wǎng)絡(luò)爬蟲是進行數(shù)據(jù)收集的有效手段。目前網(wǎng)絡(luò)爬蟲一般使用Python語言調(diào)用Requests、BeatifulSoups、Selenium等類庫實現(xiàn)。
2.Selenium
Selenium是一款開源的Web應(yīng)用程序測試工具,可以在瀏覽器中模擬用戶請求網(wǎng)頁服務(wù),很難被網(wǎng)站檢測到,能有效規(guī)避各種反爬蟲策略。
3.SQLite數(shù)據(jù)庫
SQLite是一款輕型數(shù)據(jù)庫,占用資源少,支持主流操作系統(tǒng),支持ODBC接口。與一般數(shù)據(jù)庫不同,SQLite引擎嵌入在程序中,整個數(shù)據(jù)庫系統(tǒng)存儲在單一文件中。在很多應(yīng)用場景,它的處理速度優(yōu)于MySQL、PostgreSQL等數(shù)據(jù)庫。
二、目標網(wǎng)站分析
本文以某招聘網(wǎng)站為目標,通過觀察法分析出網(wǎng)站頁面間的邏輯關(guān)系。
1.首頁與登錄頁
使用FireFox瀏覽器打開網(wǎng)站首頁(https://www.zhaopin.com/),找到用戶注冊登錄頁面(https://passport.zhaopin.com/login)。注冊后返回首頁,選擇用戶名、密碼方式登錄。
2.職位搜索頁
登錄后,進入“職位搜索”頁,可以輸入關(guān)鍵詞搜索職位,還可以選擇不同的城市、職位類別、公司行業(yè)以及列表的頁碼等。本文選擇自己關(guān)心的城市、行業(yè)和頁碼,發(fā)現(xiàn)隨著選擇的不同地址欄中鏈接的參數(shù)也會發(fā)生變化。比如城市選擇南昌時jl=691,行業(yè)選擇電子商務(wù)時in=100020000,頁面選擇第2頁p=2,瀏覽器地址欄中的鏈接變?yōu)閔ttps://sou.zhaopin.com/?jl=691&in=100020000&p=3。
3.職位詳情頁
在職位搜索頁列表中,可以看到職位名稱、公司名稱、工資待遇、崗位要求等基本信息。查看職位詳細信息需要進入詳情頁。在職位搜索列表頁,使用瀏覽器檢查工具可以找到詳情頁的鏈接地址信息(https://jobs.zhaopin.com/后加一個無規(guī)律的html文件名)。
在詳情頁中,右鍵點擊詳細信息進入“檢查”菜單,可以找到職位描述等文字信息所在的頁面元素。
三、系統(tǒng)設(shè)計與實現(xiàn)
根據(jù)對網(wǎng)站的分析,系統(tǒng)可分為頁面解析、數(shù)據(jù)采集與存儲、數(shù)據(jù)可視化分析三個模塊。
1.頁面解析模塊
在這個模塊中,主要實現(xiàn)網(wǎng)頁加載和頁面結(jié)構(gòu)解析與元素定位。
通過前文分析可知,我們需要加載和解析的頁面主要是登錄頁、職位搜索頁和職位詳情頁,相關(guān)頁面的鏈接在分析中已經(jīng)獲取。我們可以使用browser = selenium.webdriver.Firefox()方法加載火狐瀏覽器的驅(qū)動程序,然后通過其browser.get(url)方法,獲取鏈接url對應(yīng)的頁面。
首先實現(xiàn)頁面自動登錄。通過browser.get(“https://passport.zhaopin.com/login”),獲取登錄頁。在登錄頁的中,分別找到用戶名、密碼所在的位置點擊鼠標右鍵,選擇“檢查”菜單;在檢查頁面中相應(yīng)的頁面元素上點擊右鍵,復(fù)制XPath;將復(fù)制的XPath作為參數(shù),通過 browser.find_elements_by_xpath(XPath)方法獲取輸入用戶名、密碼的網(wǎng)頁元素,調(diào)用sendkeys()方法將用戶名、密碼分別傳送給瀏覽器,模擬用戶輸入用戶名和密碼;再用同樣的方法獲取“登錄”按鈕所在的網(wǎng)頁元素,調(diào)用click()方法模擬用戶點擊登錄。登錄時,如遇圖片滑塊驗證,可手動操作(只需在爬蟲開始運行時操作一次)。
用同樣的方法可以獲取職位搜素列表頁和職位詳情頁。
2.數(shù)據(jù)采集與存儲模塊
完成網(wǎng)頁解析后,使用Selenium類庫函數(shù)定位到需要的網(wǎng)頁元素,訪問其text屬性即可獲取相應(yīng)的數(shù)據(jù)。通過這種方式可獲取職位名稱、公司名稱、工資待遇、崗位職責(zé)、技能要求、詳細描述等信息。
在進行數(shù)據(jù)存儲時,使用sqlite3.connect()方法獲取數(shù)據(jù)庫連接,再調(diào)用其cursor().execute(sql)方法,執(zhí)行相應(yīng)的sql語句即可。
程序執(zhí)行時,容易被網(wǎng)頁錯誤、數(shù)據(jù)庫錯誤打斷,影響數(shù)據(jù)采集效率??蓪⒕W(wǎng)頁獲取、數(shù)據(jù)庫讀寫操作放在try...except語句中,對產(chǎn)生的異常進行處理;同時將try...except語句塊放在循環(huán)語句中,循環(huán)重試若干次后如仍異常則記錄錯誤并跳過當前頁面,繼續(xù)采集后續(xù)頁面。
3.可視化分析模塊
筆者發(fā)現(xiàn),因網(wǎng)站限制,每個細分行業(yè)只能查詢到34頁共1020條招聘信息。北京、上海、深圳的實際數(shù)據(jù)超過了這個數(shù)量,不適合進行招聘職位的行業(yè)分布分析;南昌沒有達到這個限額,不受影響。
在工資收入方面,一般來說招聘信息中的下限值比較接近真實收入情況。
根據(jù)上述特點,本文從四個城市的行業(yè)平均工資、招聘數(shù)量行業(yè)分布、職位平均工資三個方面,使用Python的matplotlib類庫的數(shù)據(jù)可視化方法,分別以下列條形圖、餅狀圖的形式進行展示。
四、總結(jié)
根據(jù)上述分析,可以得出以下結(jié)論:
1.南昌IT行業(yè)總體工資水平和行業(yè)間差異低于北京、上海和深圳等一線城市。這與南昌社會經(jīng)濟情況是一致的。
2.南昌IT行業(yè)中,企業(yè)服務(wù)和電子商務(wù)方向就業(yè)機會最多、工資水平較低。說明這兩個方向發(fā)展成熟、運行平穩(wěn)。
3.一線城市在線醫(yī)療、人工智能方向收入較高,但在南昌工資優(yōu)勢不明顯且招聘數(shù)量不多。說明南昌這兩個方向發(fā)展較弱。
4.在線教育方向城市間收入差距較小。說明教育是剛性需求,在一般城市在線教育行業(yè)同樣有較好的發(fā)展機會。