區塊鏈招聘信息爬取與分析

最近在研究區塊鏈,閒來無事抓取了拉勾網上450條區塊鏈相關的招聘信息。過程及結果以下。python

拉勾網爬取

首先是從拉勾網爬取數據,用的requests庫。拉勾網的反爬蟲作的仍是比較好的,畢竟本身也知道這種作招聘信息聚合的網站很容易被爬,並且比起妹子圖這種網站,開發的技術水平應該高很多。
一開始爬取幾個數據後就會跳轉到登錄頁面,當時採用的應對策略是:當跳轉到登錄頁面的時候,就掛起20s,再從新請求一次,發現通常掛起一段時間以後就又能夠訪問了。這樣的問題是比較慢,450條信息花了幾十分鐘。
瀏覽器

後來,我天真地認爲:只要登錄了就能夠不用掛起等待這麼久。因而,添加了模擬登錄地邏輯,主要參考地這篇文章:python -- 拉勾網爬蟲模擬登陸 - CSDN博客。拉勾網對密碼作了兩次md5加密,並會下發動態地Token口令,防止低級地僞造請求,須要仔細分析登錄界面加載的JS文件才能成功登錄,拿到Cookie。想起當年模擬登錄教務處,學號密碼都是明文傳輸,我直接用F12工具能看到。。。成功拿到Cookie後發現,訪問過快時又會跳轉到首頁,並彈出一個「切換城市」的懸浮窗,更準確地說是個人請求被重定向了。
多線程

爲何重定向,由於後臺可以經過訪問頻率很容易發現個人請求是爬蟲,因此重定向,普通用戶能夠點擊取消懸浮窗,因爲requests不支持JS運行,因此我就GG了,只能像前面那樣掛起一段時間再請求。這樣一來,模擬登錄就沒有意義了。
針對這種狀況,我認爲有兩種解決辦法,一種是使用IP池和多線程,不斷變換請求的IP就不會被發現了。另一種就是用無頭瀏覽器。我的感受兩種都是可行的,下次有需求了再實踐一下。工具

爬取結果分析

將爬取的網頁提取信息,本着可視化原則,用mathplotlib作些圖。其中遇到的主要問題是mathplotlib的中文支持,試了網上不少方法都失敗了,這裏要把本身親測可行的方法記錄下來:區塊鏈

from matplotlib import rcParams
import matplotlib.font_manager as fm

zhfont = matplotlib.font_manager.FontProperties(fname='../test.ttf')
font_list = fm.createFontList(fm.findSystemFonts(['/home/zhaoyu/Project/BlockChainAnalysis/font', ]))
fm.fontManager.ttflist.extend(font_list)
matplotlib.rcParams['font.family'] = 'WenQuanYi Micro Hei'

主要結果以下:
公司規模,小公司居多:
網站

城市分佈,北上深最多:
ui

發展階段:
加密

薪資分佈:
spa

(感受這樣表示不是很直觀,本身劃定幾個區間,作一個柱狀圖可能更好).net

最後還用jiebatextrank4zh作了關鍵詞提取,但因爲手法粗糙加上噪音嚴重(產品經理、技術開發等等的招聘需求應該分類處理),效果好像不是很理想:

Building prefix dict from the default dictionary ...
Loading model from cache /tmp/jieba.cache
Loading model cost 0.854 seconds.
Prefix dict has been built succesfully.
關鍵詞:
技術 0.010791270870042516
區塊 0.008745674154277546
相關 0.00844148459795554
工做 0.008368189087078589
開發 0.007315529659791802
熟悉 0.006915993478846666
產品 0.0066154024633222315
能力 0.00606941754659388
項目 0.005688665635431383
經驗 0.005609155675707272
公司 0.005484150951833748
優先 0.005273082641983991
團隊 0.004833977171492051
行業 0.004666562221685026
設計 0.004646942513692475
系統 0.004561171667742128
進行 0.004504888034867325
研究 0.004431023464429216
業務 0.00431705965334352
負責 0.004180396829264431

發現的不足

  1. 按照以前的計劃,我的能力的構建應該分爲兩部分,一部分是工具庫的積累,一部分是底層原理的掌握。目前來看,兩方面作的都不是很好。beautifulsoupmathplotlib都很不熟練,遇到反爬蟲不能快速解決,拿到數據也不能很好的可視化出來。
  2. 平時沒有意識去創建我的知識體系,好比常見的反爬蟲與繞過方法,數據挖掘(拿到了爬取的數據該怎麼辦),數據可視化(怎麼直觀地表示數據)。
  3. 寫代碼不能駕輕就熟,好比對容器地某個操做怎麼最優雅,本身目前的水平就是遇到問題百度一下,找個可行地方案就套用上去,離本身理想的狀態差太遠了。
相關文章
相關標籤/搜索