爬取拉勾網大資料相關崗位薪資資訊存到excel,並作資料分析
今天就進入實戰演練:通過Python來編寫一個拉勾網薪資調查的小爬蟲。
第一步:分析網站的請求過程
我們在檢視拉勾網上的招聘資訊的時候,搜尋Python,或者是PHP等等的崗位資訊,其實是向伺服器發出相應請求,由伺服器動態的響應請求,將我們所需要的內容通過瀏覽器解析,呈現在我們的面前。
![](https://img.796t.com/res/2022/05-04/02/195b3560898684692e997c45c7505a47.png)
可以看到我們發出的請求當中,FormData中的kd引數,就代表著向伺服器請求關鍵詞為Python的招聘資訊。
分析比較複雜的頁面請求與響應資訊,推薦使用Fiddler,對於分析網站來說絕對是一大殺器。不過比較簡單的響應請求用瀏覽器自帶的開發者工具就可以,比如像火狐的FireBug等等,只要輕輕一按F12,所有的請求的資訊都會事無鉅細的展現在你面前。
經由分析網站的請求與響應過程可知,拉勾網的招聘資訊都是由XHR動態傳遞的。
![](https://img.796t.com/res/2022/05-04/02/a1e61f799f72bd1f980f594ea35e43ec.jpeg)
我們發現,以POST方式發出的請求有兩個,分別是companyAjax.json和positionAjax.json,它們分別控制當前顯示的頁面和頁面中包含的招聘資訊。
![](https://img.796t.com/res/2022/05-04/02/797e67d29851a9641f76224caeed2358.jpeg)
可以看到,我們所需要的資訊包含在positionAjax.json的Content->result當中,其中還包含了一些其他引數資訊,包括總頁面數(totalPageCount),總招聘登記數(totalCount)等相關資訊。
第二步:傳送請求,獲取頁面
知道我們所要抓取的資訊在哪裡是最為首要的,知道資訊位置之後,接下來我們就要考慮如何通過Python來模擬瀏覽器,獲取這些我們所需要的資訊。
1 def read_page(url, page_num, keyword): # 模仿瀏覽器post需求資訊,並讀取返回後的頁面資訊 2 page_headers = { 3 'Host': 'www.lagou.com', 4 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ' 5 'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3', 6 'Connection': 'keep-alive' 7 } 8 if page_num == 1: 9 boo = 'true' 10 else: 11 boo = 'false' 12 page_data = parse.urlencode([ # 通過頁面分析,發現瀏覽器提交的FormData包括以下引數 13 ('first', boo), 14 ('pn', page_num), 15 ('kd', keyword) 16 ]) 17 req = request.Request(url, headers=page_headers) 18 page = request.urlopen(req, data=page_data.encode('utf-8')).read() 19 page = page.decode('utf-8') 20 return page
其中比較關鍵的步驟在於如何仿照瀏覽器的Post方式,來包裝我們自己的請求。
request包含的引數包括所要抓取的網頁url,以及用於偽裝的headers。urlopen中的data引數包括FormData的三個引數(first、pn、kd)
包裝完畢之後,就可以像瀏覽器一樣訪問拉勾網,並獲得頁面資料了。
第三步:各取所需,獲取資料
獲得頁面資訊之後,我們就可以開始爬蟲資料中最主要的步驟:抓取資料。
抓取資料的方式有很多,像正則表示式re,lxml的etree,json,以及bs4的BeautifulSoup都是python3抓取資料的適用方法。大家可以根據實際情況,使用其中一個,又或多個結合使用。
1 def read_tag(page, tag):
2 page_json = json.loads(page)
3 page_json = page_json['content']['result']
4 # 通過分析獲取的json資訊可知,招聘資訊包含在返回的result當中,其中包含了許多其他引數
5 page_result = [num for num in range(15)] # 構造一個容量為15的佔位list,用以構造接下來的二維陣列
6 for i in range(15):
7 page_result[i] = [] # 構造二維陣列
8 for page_tag in tag:
9 page_result[i].append(page_json[i].get(page_tag)) # 遍歷引數,將它們放置在同一個list當中
10 page_result[i][8] = ','.join(page_result[i][8])
11 return page_result # 返回當前頁的招聘資訊
第四步:將所抓取的資訊儲存到excel中
獲得原始資料之後,為了進一步的整理與分析,我們有結構有組織的將抓取到的資料儲存到excel中,方便進行資料的視覺化處理。
這裡我用了兩個不同的框架,分別是老牌的xlwt.Workbook、以及xlsxwriter。
1 def save_excel(fin_result, tag_name, file_name):
2 book = Workbook(encoding='utf-8')
3 tmp = book.add_sheet('sheet')
4 times = len(fin_result)+1
5 for i in range(times): # i代表的是行,i+1代表的是行首資訊
6 if i == 0:
7 for tag_name_i in tag_name:
8 tmp.write(i, tag_name.index(tag_name_i), tag_name_i)
9 else:
10 for tag_list in range(len(tag_name)):
11 tmp.write(i, tag_list, str(fin_result[i-1][tag_list]))
12 book.save(r'C:UsersAdministratorDesktop%s.xls' % file_name)
首先是xlwt,不知道為什麼,xlwt儲存到100多條資料之後,會儲存不全,而且excel檔案也會出現“部分內容有問題,需要進行修復”我檢查了很多次,一開始以為是資料抓取的不完全,導致的儲存問題。後來斷點檢查,發現數據是完整的。後來換了本地的資料進行處理,也沒有出現問題。
1 def save_excel(fin_result, tag_name, file_name): # 將抓取到的招聘資訊儲存到excel當中
2 book = xlsxwriter.Workbook(r'C:UsersAdministratorDesktop%s.xls' % file_name) # 預設儲存在桌面上
3 tmp = book.add_worksheet()
4 row_num = len(fin_result)
5 for i in range(1, row_num):
6 if i == 1:
7 tag_pos = 'A%s' % i
8 tmp.write_row(tag_pos, tag_name)
9 else:10 con_pos = 'A%s' % i
11 content = fin_result[i-1] # -1是因為被表格的表頭所佔
12 tmp.write_row(con_pos, content)13 book.close()
這是使用xlsxwriter儲存的資料,沒有問題,可以正常使用。
到從為止,一個抓取拉勾網招聘資訊的小爬蟲就誕生了。
目前,大資料是一個非常熱門的話題,受到很多人的關注和追捧,其創造的相關職業也受到大家的青睞。但大資料相關職業究竟是什麼樣,有怎麼樣的要求,有怎樣的待遇還不為多數人所知,為了更好的瞭解大資料相關職業要求及其福利待遇進行本次資料分析。
本次以大資料為關鍵詞,採集的資料包括所有大資料相關的崗位資料。一共採集到99頁共條1476資料,每一條資料有個50變數。為了關注主要因素,在資料準備過程中將去除不必要的變數,由於資料量較多,對少數的存在缺失值的行也進行清除,重新構造易於分析和作圖的資料集。
資料分析
1. 大資料相關職業招聘資訊在全國各城市分佈情況的分析
![](https://img.796t.com/res/2022/05-04/02/b78684fe305829ad9e40a458d2c17628.png)
由各城市大資料招聘資訊數量的分佈可知,目前大資料相關職業的招聘主要集中在北京、上海、廣州、杭州、深圳這幾個經濟相對更發達的地區,尤其是首都北京,是這幾個城市的3倍之多。出現這種現象也不足為怪,畢竟大資料還是一個新型的產業,很多二三線城市的傳統企業和公司還處在觀望之中。對於北京數量之多,個人認為主要與國家政策、創業潮有關,畢竟是首都,能快速嗅覺到國家大力支援發展大資料的苗頭,同時‘網際網路+’的創業大潮也推進了各公司對大資料人才的渴求。
2. 大資料相關職業型別分析
![](https://img.796t.com/res/2022/05-04/02/dbb8655c09fcca19108ad44cbf9377ca.png)
由大資料相關職業工作型別的分佈可知,大資料技術人才最受歡迎,其次是產品和運營。有人說大資料科學家是會程式設計的統計學家,從該圖可以看出這個‘程式設計的能力’以及處理、挖掘資料的能力還是佔據重要因子的。而對於產品和運營,可能與最近討論得很火的‘人物畫像’‘精細化運營’等有關,運用大資料的相關知識實現精準營銷。當然,大資料在金融、市場銷售等方面也逐漸受到重視,個人認為這是一個趨勢,畢竟大資料只是一種手段,更重要的是如何把大資料運用的各個行業,為行業服務。
3. 大資料相關職業招聘對技能要求的分析
上面討論到大資料技術人才最受歡迎,再繼續看看大資料究竟對那種技能或那種語言和工具比較青睞。
由氣泡分佈圖(圓圈越大,表示其重要程度越高)可知最受青睞的前10個大資料工具是Hadoop、Java、Spark、Hbase、Hive、Python、linux、Strom、Shell程式設計、mysql。其中Hadoop和Spark都是分散式平行計算框架,目前看來Hadoop佔主導優勢,Spark位居其後,但Spark有迎頭趕上的趨勢。Hadoop是由Java實現的,所以java排在其後也不奇怪。Hbase是一個開源的分散式的列式資料庫,MySQL是一種開源的關係型資料庫,Hive是一種資料倉庫,Strom是一種流式處理框架,而Python/Shell是兩種指令碼程式語言,Linux是一個作業系統。
上面這個圖如果看起來比較費勁,我們來看看下面這個圖:
![](https://img.796t.com/res/2022/05-04/02/fad9bf64a00647c6fc49a5c979ae8d77.png)
4. 大資料相關職業招聘對學歷要求的分析
![](https://img.796t.com/res/2022/05-04/02/c5bdd74f72f6d47b95974691245943d5.png)
由上圖可知大資料相關職業對學歷的要求主要是本科以上,其次是大專,而對於學歷高的碩士和博士貌似不太感冒。由於大資料主要對技術人才感興趣,工作的實踐性比較高,可能學歷高的人才反而佔不到優勢。我們可以接著對比一下對工作經驗的要求再做深入的分析。
5. 大資料相關職業招聘對工作經驗的分析
![](https://img.796t.com/res/2022/05-04/02/79f19855b7cd6a991dfd3ec74206e88a.png)
由上圖可知,大資料相關職業對有3-5年工作經驗的人才最青睞,其次是1-3年和5-10年。對比上面對學歷的要求可知,大資料相關職業確實是青睞有工作經驗的本科生,而不是學歷高但經驗缺乏的碩士生和博士生。
6. 大資料相關職業的薪資分析
![](https://img.796t.com/res/2022/05-04/02/d67f5594b251026c86931cc13a464d21.png)
由圖可知,大資料相關職業總體工資水平還是有較大的波動,但也主要集中在10k-30k的範圍內。我們看看不同工作型別的工資的分佈情況:
由圖可知金融行業相關的大資料職位的平均工資最高,其中產品、技術以及職能的平均工資相差不大,市場與銷售、運營的工資相對較低,但平均工資也在10K以上。總的來說,大資料相關職業的薪資水平隨工作經歷等存在一定的波動,但工資來說還是相對較高的。
7. 大資料相關職業的福利待遇分析
![](https://img.796t.com/res/2022/05-04/02/70331b21db473cfd7d247461dc7cb6b7.png)
從有大資料人才招聘需求的公司提供的福利來看,其中最多的就是五險一金的基本保障、其次是帶薪休假、彈性工作、雙休、年終獎、績效獎等,總的來說這些公司福利還算不錯,但從這些資料裡可以看出,相比於一些大的國企,這些公司對於解決戶口等同學們關注得比較多的,沒有提及。
8. 有大資料人才招聘需求的公司融資情況分析
![](https://img.796t.com/res/2022/05-04/02/46d9033a4c76266f1fda1e7e84701764.png)
從上圖可知,有大資料人才招聘需求的公司中上市公司還是佔據最大的比例,排在前面的幾位也都是成長型或成熟型的融過資的公司,排在後面幾位的公司除了一個成熟型D輪以上,其它要麼沒有融資,要麼不需要融資,這裡可以說明上市公司或剛拿到融資的成長型公司對於大資料人才的渴求更高。
結論
從面的分析,大致可以得出下面幾個重要的結論:
a. 大資料還只是北上廣等經濟發達城市發展得很熱的新型行業,二三線城市還有待發展,所以要找大資料相關的工作就去北上廣吧;
b. 大資料相關工作崗位主要以技術、產品、運營為主,而且技術佔據大半江山,而技術技能要求中主要以Hadoop/java/Spark/Hbase/Hive/Python/MySQL/Strom/shell等為主,所以才要從事大資料相關崗位不防從學習這些技能開始;
c. 大資料相關職業對學歷的要求主要以本科為主,就算是大專學歷也是很受歡迎的,而博士和碩士卻不受青睞,這是一個要求工作經驗為主的行業,所以就算你學歷不高,想從事大資料相關工作也是不成問題的;
d. 大資料相關工作崗位的薪資還是算比較高的,福利待遇方面也還不錯,其中金融大資料人才的工資最高;
目前招聘大資料人才的公司主要是以上市公司和成長型的融資公司為主。