用python爬取前程無憂網,看看我們是否真的「前程無憂」?

2021-02-21 Python開發

The best time to plant a tree was 10 years ago,the second best time is now.

種一棵樹最好的時間是十年前,其次是現在。

利用python爬取在前程無憂網搜索python關鍵字出現的最新的招聘數據,保存到本地Excel,進行數據查看和預處理,然後利用matplotlib進行數據分析和可視化。

1. 爬取數據

目標url:https://www.51job.com/

在前程無憂網輸入關鍵字python,搜索有關的崗位數據。翻頁查看這些招聘崗位信息,可以發現url翻頁的規律。

檢查網頁原始碼,可以找到想要提取的數據。

部分爬蟲代碼如下,完整見文末下載

    async def parse(self, text):
        # 正則匹配提取數據
        try:
            job_name = re.findall('"job_name":"(.*?)",', text)          # 職位
            company_name = re.findall('"company_name":"(.*?)",', text)  # 公司名稱
            salary = re.findall('"providesalary_text":"(.*?)",', text)
            salary = [i.replace('\\', '') for i in salary]              # 薪酬     去掉 \ 符號
            city = re.findall('"workarea_text":"(.*?)",', text)         # 城市
            job_welfare = re.findall('"jobwelf":"(.*?)",', text)        # 職位福利
            attribute_text = re.findall('"attribute_text":(.*?),"companysize_text"', text)
            attribute_text = ['|'.join(eval(i)) for i in attribute_text]
            companysize = re.findall('"companysize_text":"(.*?)",', text)  # 公司規模
            category = re.findall('"companyind_text":"(.*?)",', text)
            category = [i.replace('\\', '') for i in category]             # 公司所屬行業  去掉 \ 符號
            datas = pd.DataFrame({'company_name': company_name, 'job_name': job_name, 'companysize': companysize, 'city': city, 'salary': salary, 'attribute_text': attribute_text, 'category': category, 'job_welfare': job_welfare})
            datas.to_csv('job_info.csv', mode='a+', index=False, header=True)
            logging.info({'company_name': company_name, 'job_name': job_name, 'company_size': companysize, 'city': city, 'salary': salary, 'attribute_text': attribute_text, 'category': category, 'job_welfare': job_welfare})
        except Exception as e:
            print(e)

運行效果如下:

爬取了200頁的招聘數據,共10000條招聘信息,用時49.919s。

2. 數據查看和預處理
import pandas as pd

df = pd.read_csv('job_info.csv')
# 異步爬蟲爬取數據時  datas.to_csv('job_info.csv', mode='a+', index=False, header=True)  刪除多的列名
df1 = df[df['salary'] != 'salary']
# 查看前10行
df1.head(10)

# city那一列數據  處理為城市
# 按 - 分割   expand=True  0那一列重新賦值給df['city']
df1['city'] = df1['city'].str.split('-', expand=True)[0]
df1.head(10)

# 經驗要求  學歷要求   有的話是在attribute_text列裡
df['attribute_text'].str.split('|', expand=True)

df1['experience'] = df1['attribute_text'].str.split('|', expand=True)[1]
df1['education'] = df1['attribute_text'].str.split('|', expand=True)[2]
df1

保存為已清洗數據

df1.to_csv('已清洗數據.csv', index=False)

查看索引、數據類型和內存信息

df2 = pd.read_csv('已清洗數據.csv')
df2.info()

3. 數據分析與可視化(1) 柱形圖展示招聘崗位數最多的城市Top10

代碼如下:

import pandas as pd
import random
import matplotlib.pyplot as plt
import matplotlib as mpl

df = pd.read_csv('已清洗數據.csv')
# 有些是異地招聘   過濾掉
data = df[df['city'] != '異地招聘']['city'].value_counts()
city = list(data.index)[:10]    # 城市
nums = list(data.values)[:10]   # 崗位數
print(city)
print(nums)

colors = ['#FF0000', '#0000CD', '#00BFFF', '#008000', '#FF1493', '#FFD700', '#FF4500', '#00FA9A', '#191970', '#9932CC']
random.shuffle(colors)

# 設置大小   像素
plt.figure(figsize=(9, 6), dpi=100)
# 設置中文顯示
mpl.rcParams['font.family'] = 'SimHei'
# 繪製柱形圖  設置柱條的寬度和顏色
# color參數  每根柱條配置不同顏色
plt.bar(city, nums, width=0.5, color=colors)

# 添加描述信息
plt.title('招聘崗位數最多的城市Top10', fontsize=16)
plt.xlabel('城市', fontsize=12)
plt.ylabel('崗位數', fontsize=12)

# 展示圖片
plt.show()

運行效果如下:

['上海', '深圳', '廣州', '北京', '杭州', '成都', '武漢', '南京', '蘇州', '長沙']
[2015, 1359, 999, 674, 550, 466, 457, 444, 320, 211]

上海、深圳、廣州、北京提供了很多崗位,杭州、成都、武漢、南京等城市的招聘崗位數量也比較可觀。

(2) 計算崗位數據的薪酬,處理為多少K/月,劃分薪酬區間,統計薪酬分布情況,餅圖展示。

代碼如下:

# 設置中文顯示
mpl.rcParams['font.family'] = 'SimHei'
# 設置大小  像素
plt.figure(figsize=(9, 6), dpi=100)
plt.axes(aspect='equal')   # 保證餅圖是個正圓
explodes = [0, 0, 0, 0.1, 0.2, 0.3, 0.4, 0.5]
plt.pie(nums, pctdistance=0.75, shadow=True,
  colors=colors, autopct='%.2f%%', explode=explodes,
  startangle=15, labeldistance=1.1,
  )

# 設置圖例   調節圖例位置
plt.legend(part_interval, bbox_to_anchor=(1.0, 1.0))
plt.title('招聘崗位的薪酬分布', fontsize=15)
plt.show()

運行效果如下:招聘崗位給的薪酬在5K-10K和10K-15K區間所佔的比例較大,也有一定比例的50K以上的高薪資崗位。

(3) 查看招聘崗位對學歷的要求的情況,水平柱形圖可視化。
mport pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl


df = pd.read_csv(r'已清洗數據.csv')['education']
data = df.value_counts()

labels = ['大專', '本科', '碩士', '博士']
nums = [data[i] for i in labels]
print(labels)
print(nums)

colors = ['cyan', 'red', 'yellow', 'blue']
# 設置中文顯示
mpl.rcParams['font.family'] = 'SimHei'
# 設置顯示風格
plt.style.use('ggplot')
# 設置大小  像素
plt.figure(figsize=(8, 6), dpi=100)
# 繪製水平柱狀圖 
plt.barh(labels, nums, height=0.36, color=colors)
plt.title('招聘崗位對學歷的要求', fontsize=16)
plt.xlabel('崗位數量', fontsize=12)
plt.show()

運行效果如下:

['大專', '本科', '碩士', '博士']
[2052, 6513, 761, 45]

(4) 查看招聘崗位對工作經驗的要求的情況,水平柱形圖可視化。

由於得到的工作經驗列裡的數據並不規範,統計時需做特殊處理

代碼如下:

# 設置中文顯示
mpl.rcParams['font.family'] = 'SimHei'
# 設置顯示風格
plt.style.use('ggplot')
# 設置大小  像素
plt.figure(figsize=(9, 6), dpi=100)
# 繪製水平柱狀圖
plt.barh(labels, nums, height=0.5, color=colors)
plt.title('招聘崗位對工作經驗的要求', fontsize=16)
plt.xlabel('崗位數量', fontsize=12)
plt.show()

運行效果如下:

3-4年經驗      3361
2年經驗        2114
1年經驗        1471
5-7年經驗      1338
在校生\/應屆生     661
無需經驗         417
本科           182
8-9年經驗       105
10年以上經驗       64
碩士            59
招1人           57
招若干人          57
招2人           42
大專            30
招3人           14
博士            11
招5人            9
招4人            5
招10人           2
招7人            1
Name: experience, dtype: int64
['無需經驗', '1年經驗', '2年經驗', '3-4年經驗', '5-7年經驗', '8-9年經驗', '10年以上經驗']
[1260, 1530, 2114, 3372, 1338, 105, 64]

【】#### (5) 查看招聘公司所屬行業的分布情況,詞雲展示。

代碼如下:

import pandas as pd
import collections
from wordcloud import WordCloud
import matplotlib.pyplot as plt


df = pd.read_csv(r'已清洗數據.csv')['category']
data = list(df.values)


word_list = []
for i in data:
    x = i.split('/')
    for j in x:
        word_list.append(j)

word_counts = collections.Counter(word_list)

# 繪製詞雲
my_cloud = WordCloud(
    background_color='white',  # 設置背景顏色  默認是black
    width=900, height=500,
    font_path='simhei.ttf',    # 設置字體  顯示中文
    max_font_size=120,         # 設置字體最大值
    min_font_size=15,          # 設置子圖最小值
    random_state=60            # 設置隨機生成狀態,即多少種配色方案
).generate_from_frequencies(word_counts)

# 顯示生成的詞雲圖片
plt.imshow(my_cloud, interpolation='bilinear')
# 顯示設置詞雲圖中無坐標軸
plt.axis('off')
plt.show()

運行效果如下:

(6) 查看招聘崗位的職位福利,詞雲展示。

代碼與上文一致

運行效果如下:職位福利關鍵詞中出現頻率較高的有五險一金、年終獎金、績效獎金、定期體檢、餐飲補貼等。

源碼&數據下載

https://alltodata.cowtransfer.com/s/b1c87350fd8a47

網頁打開連結即可不限速下載

相關焦點

  • 會Python薪資可達50K!爬蟲實戰看看我們真的「前程無憂」嗎?
    利用python爬取在前程無憂網搜索python關鍵字出現的最新的招聘數據,保存到本地Excel,進行數據查看和預處理,然後利用matplotlib進行數據分析和可視化。目標url:https://www.51job.com/在前程無憂網輸入關鍵字python,搜索有關的崗位數據。翻頁查看這些招聘崗位信息,可以發現url翻頁的規律。
  • 前程無憂51job: 人力資源江湖神話
    截至2017年9月30日,前程無憂51job第三季度總營收為人民幣7.282億元,比去年同期增長22.4%,淨收益為人民幣2.098億元,比去年同期的1.719億元增長22.0%。幾個關鍵數據20%以上的增長很是亮眼。筆者好奇的查閱了前程無憂51job往年財報,這家神一般存在的公司自2004年上市以來竟然一直保持持續盈利。什麼概念?
  • 前程無憂為什麼收購應屆生求職網?
    2015年中國網絡招聘行業的大事之一,就是前程無憂51job以2.5億元人民幣完成對應屆生求職網的收購。據熟悉此事的行業人士透露,收購始於一年前,直至完成全部收購事項後,這家在美上市十一年、一貫低調的公司才在新近發布的2015年二季度的財務報告中,用幾句話披露此事項,財報還顯示前程無憂買下了北京智鼎優源管理諮詢有限公司60%的股權,後者主營人才測評業務。
  • 前程無憂51Job網頁版登錄
    我們分享此資源僅可應用於使用和探究,請勿有其他目的。如有侵權,請在後臺留言聯繫我們進行刪除,謝謝!(若資源失效,我們會儘快更新)前程無憂51Job,中國網際網路百強企業,2004年美國納斯達克上市。許多知名公司、世界500強企業都在51Job招聘人才、發布職位。
  • 隨時找工作:前程無憂合作WiFi萬能鑰匙
    而WiFi萬能鑰匙與招聘行業領軍企業前程無憂通過深度合作,幫助用戶進一步實現隨時隨地找工作。用戶只要通過WiFi萬能鑰匙免費連上網絡後,即可以直接獲取前程無憂提供的本地位置附近的最新招聘信息。據悉,WiFi萬能鑰匙和前程無憂雙方合作已經持續半年,未來雙方或將繼續探索更多互動模式。  目前,招聘領域移動化日趨明顯。
  • 前程無憂(51job)職位信息爬取
    於是找到了前程無憂,爬取一些職位信息以供選擇。步驟1. 網址URL解碼 我們看到的URL是信息(職位、城市、日期...)編碼之後的結果,瀏覽器幫我們進行了編碼和讀取URL。為了實現更為完全的自動化,這裡對前程無憂的網址URL進行了分析和編碼。 如下,020000,000000,0000,00是城市編碼,代表上海。
  • 智鼎諮詢引入前程無憂投資,在測評領域深度合作
    智鼎優源公司總經理連旭女士表示:「前程無憂的注資與雙方的合作將會增強智鼎在產品與品牌上的競爭力,來自前程無憂的投資將大力用於測評產品的研發與創新、技術優化以及優秀潛才的儲備,雙方的合作將對整個在線測評產品起到積極的推進作用。」行業前景是市場加大投入的先決條件。
  • 市值一年翻一倍,前程無憂51job躋身全球人力資源服務供應商TOP20
    截止3月28日,前程無憂51job市值已超50億美金。去年同期約為26億美金。這家成立20周年的公司,自上市以來一直保持著持續盈利的傲人業績。用實力和財報向市場霸氣宣告:我們不一樣。無憂工作網正式上線。從1999年到2002年的三年間,前程無憂營業收入就增長了25倍。在全國19個城市與當地媒體合作,推出了針對當地市場的《前程招聘專版》。一個覆蓋全國的人力資源服務版圖初現雛形。憑藉對行業趨勢的敏銳判斷,經過幾年的飛速發展,前程無憂已發展成為一家集報紙、網站、獵頭、「網才」軟體、校園招聘方案、企業管理培訓於一體的全方位人力資源服務供應商。
  • 前程無憂1.2億美元投資拉勾網,佔股60%,剛剛,許單單回應了所有質疑
    許單單:這其實是有意而為之,剛開始前程沒有打算投那麼多,是在我們的提議下才投了60%。其實前程無憂B輪就給過我們投資意向,我們當時就給拒了,後來我們拓展行業不成功,再加上現在我更看重的是SaaS的機會,就找了前程無憂。
  • 前程無憂發布2020年Q1財報,淨營收7.911億元、淨利潤2.052億元,超市場預期
    前程無憂今日發布了截至3月31日的2020財年第一季度財報。財報顯示,前程無憂第一季度淨營收為人民幣7.911億元;淨利潤為人民幣2.052億元,相比之下去年同期的淨虧損為人民幣8480萬元;每股完全攤薄收益為人民幣3.02元;上市至今的63個財務季度全部實現盈利。
  • 挑戰、機遇和平衡,前程無憂開啟「因她閃耀」女性職業論壇
    中國權威的人力資源服務商前程無憂(NASDAQ: JOBS)近日連續第13年舉辦了2020中國典範僱主雲頒獎盛典,盛典當天,「因她閃耀」女性職業論壇在線上線下同步開啟。前程無憂早前的女性職業調查也印證了這一趨勢,46.9%的受訪女性認為「與同崗位同工種的男性相比,女性表現並不弱」,迫切希望職業上有突破(授權重要職責或快速漲薪)的受訪女性約佔21.4%。通過相關數據更能直觀看到當下職業女性的佔比分布,前程無憂日前發布的《2020年度中國典範僱主報告》顯示,分布在十三大行業的132家行業標杆的典範僱主中,50.5%為女性僱員。
  • 用 Python 爬取網頁
    在幾次嘗試之後,網頁爬取對我來說就幾乎是種本能行為了。如今,它更成為了我幾乎每天都要用到的少數幾個技術之一。在今天的文章中,我將會用幾個簡單的例子,向大家展示如何爬取一個網站——比如從 Fast Track 上獲取 2018 年 100 強企業的信息。用腳本將獲取信息的過程自動化,不但能節省手動整理的時間,還能將所有企業數據整理在一個結構化的文件裡,方便進一步分析查詢。
  • 是否在斷送前程?
    如果你做了三年裝配工藝工程師,你不懂點過程質量管理和物流,精益等職位的知識,你真的是自斷前程。而研發的天然障礙是因為工具鏈不同,部門不同,無法在一個統一的環境裡長期一同共事。大多數ME長期在做文件類工作,產品多,審核多,文件和工具使用的就熟練。跳槽基本不愁適應的壓力大。但以上的優勢,僅適用於繼續在代工,零部件,家電行業的製造公司工作,進汽車製造公司比較難。
  • awesome-spider:80 個 Python 爬蟲項目
    awesome-spider收集各種爬蟲 (默認爬蟲語言為 python), 歡迎大家提 pr 或 issue, 收集腳本見此項目 github-search
  • 用Python爬取手機APP
    前言如果你以為python只可以爬取web網頁,那就大錯特錯了,本篇文章教你如何爬取手機app的信息。
  • 手把手教你用python 爬取京東評論
    本次python實戰,主要目標是利用 Python爬取京東商品評論數,如上圖所示:爬取「Python之父」推薦的小藍書,這些信息主要包括用戶名、
  • 祝事業前程似錦的祝福語
    前程似錦,財運亨通,飛黃騰達,官運亨通!  10. 有一種酒一點點就能醉人,有一種愛一點點就能溫馨,有一個你一相識就難以忘懷,有一種心就算不常見面也會彼此掛念,直到永遠。  11. 我在十月十日,表達內心的滿腔祝福,願君前程似錦,事業有成,事事順利,萬事大吉,十全十美。此心天地可鑑日月可表!願各路神仙護佑。  12.
  • 未來的遠大前程,願我們一起同行
    QNAP NAS成為您的多方影音管理中心享受流暢影音串流體驗任何角落皆有聲有色還是熱情的舞蹈演員和Showgirl當然還有每一位蒞臨QNAP展位的小夥伴希望大家都獲得了一段開心的體驗也感謝這次展會中陪伴、支持及幫助QNAP的每一位願未來的遠大前程
  • 10分鐘教你用Python爬取Baidu文庫全格式內容
    在爬取任何東西之前,我們都要先確認需要爬取的數據是不是異步加載的。如果是異步加載的直接爬取網頁是爬不到的。要知道是不是異步加載其實很簡單,就用request對網頁發起請求,看看response是什麼就可以了。
  • 用python爬蟲爬取圖片實戰
    爬取糗事百科用戶的頭像圖片#爬取圖片的關鍵:構建頭像的正則表達式# pattern