這篇文章主要介紹怎么利用Python爬取了運(yùn)維招聘信息,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
站在用戶的角度思考問題,與客戶深入溝通,找到前鋒網(wǎng)站設(shè)計(jì)與前鋒網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋前鋒地區(qū)。
對于本文的敘述,我們分以下三步為大家講解。
爬蟲部分
數(shù)據(jù)清洗
數(shù)據(jù)可視化及分析
本文主要爬取的是 51job 上面,關(guān)于運(yùn)維相關(guān)崗位的數(shù)據(jù),網(wǎng)站解析主要使用的是Xpath,數(shù)據(jù)清洗用的是 Pandas 庫,而可視化主要使用的是 Pyecharts 庫。
相關(guān)注釋均已在代碼中注明,為方便閱讀,這里只展示部分代碼,完整代碼可查看文末部分進(jìn)行獲取。
# 1、崗位名稱  job_name = dom.xpath('//div[@class="dw_table"]/div[@class="el"]//p/span/a[@target="_blank"]/@title')  # 2、公司名稱  company_name = dom.xpath('//div[@class="dw_table"]/div[@class="el"]/span[@class="t2"]/a[@target="_blank"]/@title')  # 3、工作地點(diǎn)  address = dom.xpath('//div[@class="dw_table"]/div[@class="el"]/span[@class="t3"]/text()')  # 4、工資  salary_mid = dom.xpath('//div[@class="dw_table"]/div[@class="el"]/span[@class="t4"]')  salary = [i.text for i in salary_mid]  # 5、發(fā)布日期  release_time = dom.xpath('//div[@class="dw_table"]/div[@class="el"]/span[@class="t5"]/text()')  # 6、獲取二級網(wǎng)址url  deep_url = dom.xpath('//div[@class="dw_table"]/div[@class="el"]//p/span/a[@target="_blank"]/@href')  # 7、爬取經(jīng)驗(yàn)、學(xué)歷信息,先合在一個(gè)字段里面,以后再做數(shù)據(jù)清洗。命名為random_all  random_all = dom_test.xpath('//div[@class="tHeader tHjob"]//div[@class="cn"]/p[@class="msg ltype"]/text()')  # 8、崗位描述信息  job_describe = dom_test.xpath('//div[@class="tBorderTop_box"]//div[@class="bmsg job_msg inbox"]/p/text()')  # 9、公司類型  company_type = dom_test.xpath('//div[@class="tCompany_sidebar"]//div[@class="com_tag"]/p[1]/@title')  # 10、公司規(guī)模(人數(shù))  company_size = dom_test.xpath('//div[@class="tCompany_sidebar"]//div[@class="com_tag"]/p[2]/@title')  # 11、所屬行業(yè)(公司)  industry = dom_test.xpath('//div[@class="tCompany_sidebar"]//div[@class="com_tag"]/p[3]/@title')1)讀取數(shù)據(jù)
# 下面使用到的相關(guān)庫,在這里展示一下  import pandas as pd  import numpy as np  import re  import jieba  df = pd.read_csv("only_yun_wei.csv",encoding="gbk",header=None)  df.head()2)為數(shù)據(jù)設(shè)置新的行、列索引
# 為數(shù)據(jù)框指定行索引 df.index = range(len(df)) # 為數(shù)據(jù)框指定列索引 df.columns = ["崗位名","公司名","工作地點(diǎn)","工資","發(fā)布日期","經(jīng)驗(yàn)與學(xué)歷","公司類型","公司規(guī)模","行業(yè)","工作描述"] df.head()
3)去重處理
# 去重之前的記錄數(shù)  print("去重之前的記錄數(shù)",df.shape)  # 記錄去重  df.drop_duplicates(subset=["公司名","崗位名","工作地點(diǎn)"],inplace=True)  # 去重之后的記錄數(shù)  print("去重之后的記錄數(shù)",df.shape)4)對崗位名字段的處理
# ① 崗位字段名的探索 df["崗位名"].value_counts() df["崗位名"] = df["崗位名"].apply(lambda x:x.lower()) # ② 構(gòu)造想要分析的目標(biāo)崗位,做一個(gè)數(shù)據(jù)篩選 df.shape target_job = ['運(yùn)維','Linux運(yùn)維','運(yùn)維開發(fā)','devOps','應(yīng)用運(yùn)維','系統(tǒng)運(yùn)維','數(shù)據(jù)庫運(yùn)維','運(yùn)維安全','網(wǎng)絡(luò)運(yùn)維','桌面運(yùn)維'] index = [df["崗位名"].str.count(i) for i in target_job] index = np.array(index).sum(axis=0) > 0 job_info = df[index] job_info.shape job_list = ['linux運(yùn)維','運(yùn)維開發(fā)','devOps','應(yīng)用運(yùn)維','系統(tǒng)運(yùn)維','數(shù)據(jù)庫運(yùn)維' ,'運(yùn)維安全','網(wǎng)絡(luò)運(yùn)維','桌面運(yùn)維','it運(yùn)維','軟件運(yùn)維','運(yùn)維工程師'] job_list = np.array(job_list) def rename(x=None,job_list=job_list): index = [i in x for i in job_list] if sum(index) > 0: return job_list[index][0] else: return x job_info["崗位名"] = job_info["崗位名"].apply(rename) job_info["崗位名"].value_counts()[:10]
5)工資字段的處理
job_info["工資"].str[-1].value_counts()  job_info["工資"].str[-3].value_counts()  index1 = job_info["工資"].str[-1].isin(["年","月"])  index2 = job_info["工資"].str[-3].isin(["萬","千"])  job_info = job_info[index1 & index2]  job_info["工資"].str[-3:].value_counts()  def get_money_max_min(x):  try:  if x[-3] == "萬":  z = [float(i)*10000 for i in re.findall("[0-9]+\.?[0-9]*",x)]  elif x[-3] == "千":  z = [float(i) * 1000 for i in re.findall("[0-9]+\.?[0-9]*", x)]  if x[-1] == "年":  z = [i/12 for i in z]  return z  except:  return x  salary = job_info["工資"].apply(get_money_max_min)  job_info["最低工資"] = salary.str[0]  job_info["最高工資"] = salary.str[1]  job_info["工資水平"] = job_info[["最低工資","最高工資"]].mean(axis=1)6)工作地點(diǎn)字段的處理
address_list = ['北京', '上海', '廣州', '深圳', '杭州', '蘇州', '長沙', '武漢', '天津', '成都', '西安', '東莞', '合肥', '佛山', '寧波', '南京', '重慶', '長春', '鄭州', '常州', '福州', '沈陽', '濟(jì)南', '寧波', '廈門', '貴州', '珠海', '青島', '中山', '大連','昆山',"惠州","哈爾濱","昆明","南昌","無錫"] address_list = np.array(address_list) def rename(x=None,address_list=address_list): index = [i in x for i in address_list] if sum(index) > 0: return address_list[index][0] else: return x job_info["工作地點(diǎn)"] = job_info["工作地點(diǎn)"].apply(rename) job_info["工作地點(diǎn)"].value_counts()
7)公司類型字段的處理
job_info.loc[job_info["公司類型"].apply(lambda x:len(x)<6),"公司類型"] = np.nan job_info["公司類型"] = job_info["公司類型"].str[2:-2] job_info["公司類型"].value_counts()
8)行業(yè)字段的處理
job_info["行業(yè)"] = job_info["行業(yè)"].apply(lambda x:re.sub(",","/",x))  job_info.loc[job_info["行業(yè)"].apply(lambda x:len(x)<6),"行業(yè)"] = np.nan  job_info["行業(yè)"] = job_info["行業(yè)"].str[2:-2].str.split("/").str[0]  job_info["行業(yè)"].value_counts()9)經(jīng)驗(yàn)與學(xué)歷字段的處理
job_info[“學(xué)歷”] = job_info[“經(jīng)驗(yàn)與學(xué)歷”].apply(lambda x:re.findall(“本科|大專|應(yīng)屆生|在校生|碩士|博士”,x)) def func(x): if len(x) == 0: return np.nan elif len(x) == 1 or len(x) == 2: return x[0] else: return x[2] job_info[“學(xué)歷”] = job_info[“學(xué)歷”].apply(func) job_info[“學(xué)歷”].value_counts()
10)公司規(guī)模字段的處理
def func(x): if x == “[‘少于50人’]”: return “<50" elif x == "['50-150人']": return "50-150" elif x == "['150-500人']": return '150-500' elif x == "['500-1000人']": return '500-1000' elif x == "['1000-5000人']": return '1000-5000' elif x == "['5000-10000人']": return '5000-10000' elif x == "['10000人以上']": return ">10000” else: return np.nan job_info[“公司規(guī)模”] = job_info[“公司規(guī)模”].apply(func)
11)將處理好的數(shù)據(jù),構(gòu)造新數(shù)據(jù),導(dǎo)出為新的 excel
feature = [“公司名”,”崗位名”,”工作地點(diǎn)”,”工資水平”,”發(fā)布日期”,”學(xué)歷”,”公司類型”,”公司規(guī)模”,”行業(yè)”,”工作描述”] final_df = job_info[feature] final_df.to_excel(r”可視化.xlsx”,encoding=”gbk”,index=None)
1)可視化大屏效果

2)熱門行業(yè)的用人需求 Top10
從招聘行業(yè)的數(shù)據(jù)來看,計(jì)算機(jī)軟件,計(jì)算機(jī)服務(wù),互聯(lián)網(wǎng),通信行業(yè)用人需求相比其他行業(yè)占比會(huì)高。

3)熱門城市的崗位數(shù)量 Top10
從熱門城市來看,北上廣深的一線城市,用人崗位數(shù)占比較大,不過這里的異地招聘數(shù)據(jù)及結(jié)合過往經(jīng)驗(yàn),偏外包性質(zhì)的企業(yè)。
4)崗位的省份分布
崗位分布省份,通過最左側(cè)的顏色棒,我們可以看出顏色最深的地區(qū)崗位招聘數(shù)越集中,相反之下,最淺的也就是崗位招聘數(shù)越少的省份。從下圖來看,廣東省、江蘇省、上海及北京顏色相比其他省份占據(jù)分布會(huì)比較集中些。

5)不同公司規(guī)模的用人情況
行業(yè)的不同,公司規(guī)模肯定是存在有差異的。公司規(guī)模是指按有關(guān)標(biāo)準(zhǔn)和規(guī)定劃分的公司規(guī)模,一般分為特大型、大型、中型、小型、微型。如下圖,公司規(guī)模人數(shù)在 50-500 范圍內(nèi)占據(jù) 50% 以上,用人需求最高,1000-10000 范圍占據(jù)不到 50 %,不過這樣的公司規(guī)模已經(jīng)是比較大的了。

6)排名前 10 的崗位的平均薪資
根據(jù)我的了解,比如:系統(tǒng)工程師、軟件 / 實(shí)施工程師、運(yùn)維專員 等一系列的崗位其實(shí)也是可以劃分在運(yùn)維領(lǐng)域范疇之內(nèi)的,每家公司對運(yùn)維工作者的崗位名稱定義有所不同,為了能夠更精準(zhǔn)的篩選分析,把那些崗位占時(shí)去掉了。留下了以下 10 個(gè)崗位名稱(運(yùn)維開發(fā)、運(yùn)維工程師、軟件運(yùn)維、網(wǎng)絡(luò)運(yùn)維、系統(tǒng)運(yùn)維、桌面運(yùn)維、數(shù)據(jù)庫運(yùn)維、應(yīng)用運(yùn)維、Linux 運(yùn)維、IT 運(yùn)維)這些崗位名稱基本是我見過招聘信息內(nèi)最多的。
排名前 10 的崗位平均薪資,運(yùn)維開發(fā)、應(yīng)用運(yùn)維、數(shù)據(jù)庫運(yùn)維、Linux 運(yùn)維均在 1W 以上。因此,也可以看出運(yùn)維開發(fā)在運(yùn)維領(lǐng)域的優(yōu)勢,是占據(jù)前沿位置。

7)運(yùn)維崗位的學(xué)歷要求分布
從學(xué)歷要求方面來看,大專及本科學(xué)歷占比居多。在校生、碩士、博士基本太少了,因此會(huì)有一些我的學(xué)生群體讀者會(huì)問我,對于一個(gè)應(yīng)屆畢業(yè)生,找運(yùn)維工作好找嗎?站在我個(gè)人的角度,我是不建議你畢業(yè)后去做運(yùn)維的。因?yàn)檫\(yùn)維對你個(gè)人的技術(shù)水平及工作經(jīng)驗(yàn)有些非常高的要求,而對于一個(gè)剛畢業(yè)的學(xué)生來說,沒有過多的實(shí)踐經(jīng)驗(yàn),也不會(huì)有很大的優(yōu)勢,除非是這個(gè)崗位對你有極大的興趣愛好,但凡你也可以嘗試下。

8)運(yùn)維崗位需求的詞云圖分布
從運(yùn)維崗位招聘需求詞云圖來看,詞頻最多的主要包括:運(yùn)維、能力、系統(tǒng)、維護(hù)、經(jīng)驗(yàn)等等,因此也可以看出運(yùn)維崗位對個(gè)人技術(shù)能力以及過往工作經(jīng)驗(yàn)是要求非常高的。當(dāng)然了還有很多其他相關(guān)的詞頻,可通過下圖查看詳情。

以上是“怎么利用Python爬取了運(yùn)維招聘信息”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
                分享題目:怎么利用Python爬取了運(yùn)維招聘信息
                
                分享URL:http://www.yijiale78.com/article12/jcsjdc.html
            
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、網(wǎng)站導(dǎo)航、域名注冊、移動(dòng)網(wǎng)站建設(shè)、微信公眾號(hào)、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)