本文轉(zhuǎn)至我在知乎上寫的文章
---------------------------------------------------------------
在這樣一個人工智能呼聲越來越高,大數(shù)據(jù)遍地的時代,作為一個科技工作者,感覺不會點Python實在是說不過去啊。最近在看阿里招聘,正好借這個機會爬取并分析一下阿里的招聘信息,看看能不能有啥收獲。
這里以阿里的數(shù)據(jù)崗,工作地點:杭州,職位類別:技術(shù)類,為搜索關(guān)鍵詞。本想繼續(xù)在Python中寫一個loop來執(zhí)行翻頁命令的,發(fā)現(xiàn)直接翻頁的話,地點信息和職位類別都會擴大,不僅局限于杭州和技術(shù)類。好在自己分析,不那么著急時間,那就用selenium驅(qū)動瀏覽器直接爬取吧。
要把數(shù)據(jù)爬下來總共分幾步呢,先自己記好,后面直接按照這個frame豐富函數(shù)即可:
打開瀏覽器(完成轉(zhuǎn)至網(wǎng)頁,輸入關(guān)鍵詞等操作)——讀取網(wǎng)頁信息,提取數(shù)據(jù)——翻頁——讀取網(wǎng)頁信息,讀取數(shù)據(jù)……
第一步:打開瀏覽器
導入selenium庫,以便打開網(wǎng)頁:
from selenium import webdriver
導入Keys,以便能輸入關(guān)鍵詞數(shù)據(jù)和選中工作地點和職位類別:
from selenium.webdriver.common.keys import Keys
定義打開瀏覽器的函數(shù),找到關(guān)鍵詞位置并選中:
def open_browser(url): #打開瀏覽器,并選擇杭州,技術(shù)崗,輸入關(guān)鍵詞‘數(shù)據(jù)’進行查找
? ? browser.get(url)
? ? elem = browser.find_element_by_xpath('/html/body/div[4]/div[2]/div/div[1]/div/div[1]/span/span/a[1]').click()
? ? time.sleep(2)
? ? elem_1 = browser.find_element_by_xpath('/html/body/div[4]/div[2]/div/div[1]/div/div[2]/span/a[3]').click()
? ? time.sleep(2)
? ? elem_2 = browser.find_element_by_id('keyword')
? ? elem_2.clear()
? ? elem_2.send_keys('數(shù)據(jù)'+Keys.RETURN)
? ? time.sleep(10)
(在分析網(wǎng)頁的時候,發(fā)現(xiàn)里面很多數(shù)據(jù)的標簽的父節(jié)點一樣,因此選用xpath爬取數(shù)據(jù)更加便捷)
第二步:讀取網(wǎng)頁信息,提取數(shù)據(jù)
先讀取當前網(wǎng)頁信息
#------------------------讀取招聘頁面信息---------------------------------
def read_page():
? ? Content = browser.page_source
? ? return Content
之后基于獲得的網(wǎng)頁信息,提取數(shù)據(jù)
def get_data(Content):
? ? selector=etree.HTML(Content)
? ? Job_information1=[]
? ? Job_information2=[]
? ? for i in range(1,20,2): #網(wǎng)頁里面的很多信息的父節(jié)點相同,因此用Xpath爬取,并替換相應位置的數(shù)字會更快捷一些
? ? ? ? job_name=selector.xpath(r'/html/body/div[4]/div[2]/div/div[2]/table/tbody/tr[%s]/td[1]/span/a/text()'%(i))[0].strip()
? ? ? ? job_characteristic=selector.xpath(r'/html/body/div[4]/div[2]/div/div[2]/table/tbody/tr[%s]/td[2]/span/text()'%(i))[0].strip()
? ? ? ? job_location=selector.xpath(r'/html/body/div[4]/div[2]/div/div[2]/table/tbody/tr[%s]/td[3]/span/text()'%(i))[0].strip()
? ? ? ? recruit_number=selector.xpath(r'/html/body/div[4]/div[2]/div/div[2]/table/tbody/tr[%s]/td[4]/span/text()'%(i))[0].strip()
? ? ? ? job_updatetime=selector.xpath(r'/html/body/div[4]/div[2]/div/div[2]/table/tbody/tr[%s]/td[5]/span/text()'%(i))[0].strip()
? ? ? ? job_information1=job_name+'@'+job_characteristic+'@'+job_location+'@'+recruit_number+'@'+job_updatetime+'@' #用@替換便于后期在excel中分列
? ? ? ? Job_information1.append(job_information1)
? ? for j in range(2,21,2):
? ? ? ? job_description=selector.xpath(r'/html/body/div[4]/div[2]/div/div[2]/table/tbody/tr[%s]/td/div/p[1]/text()'%(j)) #崗位描述和崗位要求兩個結(jié)果是列表
? ? ? ? job_request=selector.xpath(r'/html/body/div[4]/div[2]/div/div[2]/table/tbody/tr[%s]/td/div/p[2]/text()'%(j))
? ? ? ? job_Description=''
? ? ? ? job_Request=''
? ? ? ? for k in range(len(job_description)):
? ? ? ? ? ? job_Description+=job_description[k].strip()
? ? ? ? for h in range(len(job_request)):
? ? ? ? ? ? job_Request+=job_request[h].strip()
? ? ? ? job_information2=job_Description+'@'+job_Request
? ? ? ? Job_information2.append(job_information2)
? ? return Job_information1,Job_information2
第三步:翻頁
顯而易見,這個點擊右箭頭就好了,不過我在這里試了好幾種發(fā)現(xiàn)’>’的方式,發(fā)現(xiàn)by_link_text這種方式效果最好
def change_page():
? ? elem_3 = browser.find_element_by_link_text('>').click()
隨后只要把所有函數(shù)粘結(jié)起來就好了!
下面對獲得的數(shù)據(jù)進行下可視化處理,看看能不能發(fā)現(xiàn)什么規(guī)律呢?
首先,從時間維度看阿里在12月之前招聘需求相對較少,僅在11月20日出現(xiàn)過一次105人的小高峰。隨后進入12月,招聘需求顯著增加,圣誕節(jié)達到峰值招聘423人。

這是為什么呢?作為一個沒有離職過的人不懂啊,和職場的幾個朋友(跳槽老油條)交流后,確認了是因為企業(yè)為了避免年后大量人員跳槽造成的用人荒,而提前做的人才儲備??磥硪院箅x職雖說年終獎要拿,但是11月份之前一定要先把簡歷優(yōu)化好啊。
進一步,按照招聘方向統(tǒng)計結(jié)果也確認了,隨著時間進入12月各個方向的人員招聘確實陸續(xù)增多,排在前三位的分別是:開發(fā)崗,算法崗,數(shù)據(jù)崗。

接著看下,各個部門在招聘過程中的需求情況。螞蟻金服以22.2%的比例遙遙領(lǐng)先,阿里云11.8%跟隨其后。足見,現(xiàn)在還是金融,云計算這些領(lǐng)域的市場缺口比較大啊,基礎(chǔ)設(shè)施事業(yè)群第三,百度了一下,感覺是為其他業(yè)務部門提供技術(shù)支持的部門,可見阿里對平臺框架構(gòu)建的重視。

進一步量化分析下各個部門17年最后一個季度的招聘情況。螞蟻金服最后一個季度招聘1449人,發(fā)布招聘信息286次。螞蟻金服真的這么缺人么?
我基于時間線,對其中重復的職位名稱進行了對比(這其中還不包括崗位描述一模一樣但是名稱不一樣的職位),有93個職位發(fā)布信息次數(shù)超過2次,而且這其中一個職位最少要2個人,最多的例如下面這個位置居然一次需要40名java工程師。這個職位自12月20號發(fā)布以來,居然在25號和1月3號,又重新發(fā)布了2次(而且數(shù)量一次也沒有減少哦)。又不是民工,這種高技術(shù)工種,5天時間招40個人的可能性不大吧??梢娺@個位置的需求比較迫切,另外是不是也能說明這個部門的領(lǐng)導比較push呢?所以我個人以為,金服未必有這么大的人才缺口,有些崗位比較緊迫,短時間內(nèi)發(fā)布了多次招聘信息而已。
另外,有些部門招聘人數(shù)不多,但是卻招聘了很多次,如基礎(chǔ)建設(shè)事業(yè)群和安全部,是不是也是因為發(fā)布招聘信息次數(shù)過多呢?


另外,我依據(jù)部門和工作方向信息進一步分析了下各個部門內(nèi)部的招聘情況。可見,開發(fā)方向在幾個大的部門都是招聘的主要需求方向。只有安全部和iDST兩個部門,對算法和數(shù)據(jù)方面的招聘更多一些。

好了,知道了阿里內(nèi)部大體的招聘情況。下面,我們通過幾個云圖看下幾個相關(guān)部門的招聘要求吧。由于,我爬取的是社招頁面,所以每個部門要求最多的都是“經(jīng)驗”,不過由于分詞用的還不太好,有些連詞還過濾的不太好。這里不做過多解讀。

阿里云招聘關(guān)鍵詞

螞蟻金服招聘關(guān)鍵詞

阿里達摩院招聘關(guān)鍵詞

人工智能招聘關(guān)鍵詞
針對以上分析做一個總結(jié):
1. 考慮到年后跳槽人數(shù)會顯著增加,為避免企業(yè)“用人荒”,很多部門從12月份已經(jīng)開始進行大規(guī)模的人才儲備;
2. 阿里目前大數(shù)據(jù)方面的主要業(yè)務依然是面向金融(螞蟻金服),IT(阿里云計算等)。招聘人員的需求前三位的依次為:開發(fā)崗,算法崗,數(shù)據(jù)崗;
3. 求職的時候,多留意一下那些短期內(nèi)發(fā)布多次的職位信息,這些崗位用人需求應該更加急迫,HR也應該會更積極的給予反饋。
其實還有很多有價值的信息,感覺不太合適說的太透。
覺得對你有幫助的話請給個贊吧,謝謝!