林長謀 黃瑋
摘要:互聯網數據獲取及分析是當前數據科學的一個重要部分。該文針對互聯網中就業崗位數據獲取與分析的過程基于Python構建了網絡爬蟲。并在通爬蟲獲取網絡數據的基礎上,對所獲得的就業崗位數據進行預處理,最終可到供挖掘的數據。
關鍵詞:Python;網絡爬蟲;數據分析
中圖分類號:TP393 文獻標識碼:A
文章編號:1009-3044(2019)12-0006-02
開放科學(資源服務)標識碼(OSID):
1 背景
隨著信息技術的發展,大數據越來越成為熱門的話題[1]。使用大數據技術對就業崗位市場進行數據的分析對于學生職業生涯的規劃有較強的現實意義。而就業崗位的相關數據動態連續的創建于不同的人才市場,受數量多、分布廣、格式不統一等因素的影響,不易采用人工進行數據的獲取。因此也就更不利于相關信息的分析。為解決這一問題,本研究先針對性的進行網絡爬蟲[2]的設計,再基于分詞技術[3]和TD-FID算法進行關鍵詞的提取的統計。
2 網絡爬蟲的關鍵技術
爬蟲是互聯網時代用于獲取主題內容的主流工具之一。其可從不同的站點獲取預先設置好的主題內容。在本研究中使用Python,并調用BeautifulSoup、Requests等庫及數據庫技術,進行爬蟲的構建。構建爬蟲涉及的技術如下:
2.1 HTTP請求與響應與 URL
爬蟲的工作原理基于http協議中的請求與響應機制[4]。在瀏覽器瀏覽某個網頁時,需要使用HTTP協議將URL提交給服務器。服務器收到URL后根據URL中攜帶的信息處理將對方所請求的資源回傳給瀏覽器端。
爬蟲在運行時模擬瀏覽器與服務器的運行特征,模擬瀏覽器向服務器發送URL請求,接收對方的回復,并最終將接收到的數據轉換成要保留的數據。由于互聯網網頁錯綜復雜,一次的請求與回復無法獲取批量數據,因此需要對爬蟲的流程進行規劃設計,使之適應多頁面跨頁面的情況。
2.2 超文本語言
超文本語言[5]也稱為HTML(Hypertext Markup Language),在該語言中規定了相關事項的標簽,并采用配對標記的形式進行使用。例如為了表示一個表格,可以使用
圖2展示了從51Job上相關招聘信息鏈接對應的HTML片段。可以看出標簽的 href屬性值是一個URL的鏈接,點擊該鏈接后即可獲得該職位的詳細信息。
2.3 Web信息抽取
在獲得目標網頁的URL地址,通過請求可得到該網頁內容。由于網頁是HTML格式,中間嵌入了許多對于信息抽取不必要的標記。因此需要對數據進行一定的抽取。在具體Web頁的抽取中,要根據頁面的結構特點定位要抽取的信息。具體實踐中,通過正則表達式可以高效的抽取具有固定特征的頁面信息,準確性很高,而且由于現今的主流編程語言基本上都提供了操作正則表達式的封裝API,所以可以很方便快捷地構建基于這種模式的web信息抽取系統。
3 爬蟲的設計
對目標人才招聘網站進行分析,尋找其特點后決定采用帶參數URL請求的方式,將所要查詢的關鍵字傳到服務器,由其搜索出滿足條件的崗位數據。
基于上述特征,可進行爬蟲的設計,其核心部分的流程如下:
Step 1:從初始頁面開始爬取。
Step 2:解析網頁內容,提取具體崗位信息的URL。
Step 3:將URL加入等解析隊列。
Step 4:如果有下一頁,則讀取下一頁,并轉到Step 2.否則,轉第5步。
Step 5:如果待解析隊列不為空,則隊列元素出隊,并請求該元素對應的URL。
若待解析隊列為空,則轉Step 8
Step 6:解析回復內容,并進行Web信息提取,將崗位信息寫入數據庫。
Step 7:轉Step 5
Step 8:結束。
4 數據的預處理
在爬蟲的運行下,可獲得大量的數據,為了解崗位數據的變化,便于進行數據挖掘,則需要對已經獲取的數據進行預處理。
在數據庫中保存的崗位信息數據除了有崗位名稱、發布單位、發布時間、地點等內容外,關于崗位信息的數據包含在詳情頁中。由于詳情頁中的信息只進行了文本的提取,沒有進一步的處理。因此在進行信息提取前需要進行文本的預處理。例如,一個崗位有如下要求:
(1)至少2年以上ASP.NE開發經驗,深入了解.NET Framework框架;
(2)熟悉WEB開發流程,熟練掌握ASP.Net MVC、WebAPI框架;
(3)熟悉MS-SQL、MySql、Oracle等主流數據庫;
……
對上述崗位要求進行分析,可知:崗位中的關鍵字與其他文檔中的關鍵詞不同。其他文檔中的關鍵詞由用詞頻的方式進行確認,而崗位要求中的關鍵詞往往僅出現一次。另外,越是出現在文本前方的關鍵詞就越重要。基于上述規律,使用Python的第三方工具包Gensim對崗位要求進行切片和停用詞過濾,再按先后順序排列,即可得到崗位要求中各要素的重要性序列。其中切片與停用詞過濾的代碼如下:
stoplist=open('stopword.txt','r',encoding="utf-8").read()
stoplist = set(w.strip() for w in stoplist)
segtexts=[]
for line in lines:
doc=[]
for w in list(jieba.cut(line,cut_all=True)):
if len(w)>1 and w not in stoplist:
doc.append(w)
segtexts.append(doc)
在采用上述代碼進行分析后,便得求得該崗位信息的數據格式如表1所示:
5 結束語
在使用Python進行爬蟲的設計后,在對所獲得的文本使用Gensim進行分詞處理和停用詞過濾后,針對崗位信息中,關鍵字僅少量出現的情況,使用關鍵字出現的先后順序設計重要性序列。最終完成數據的預處理工作。
參考文獻:
[1] 溫亮明, 張麗麗, 黎建輝. 大數據時代科學數據共享倫理問題研究[J]. 情報資料工作, 2019, 40(2): 38-44.
[2] 楊凌云. 主題網絡爬蟲關鍵技術的應用探討[J]. 電腦編程技巧與維護, 2018(11): 33-35.
[3] 柳汨. 基于HTML語言的網頁制作淺析[J]. 中小企業管理與科技: 上旬刊, 2016(1): 258.
[4] 馮佳捷, 王瑞. 中文分詞技術對中文搜索引擎的查準率及查全率的影響[J]. 計算機光盤軟件與應用, 2013, 16(6): 184, 259.
【通聯編輯:謝媛媛】