初窺數據分析之51job網職位分析項目

前言:和以往大家爬取數據分析職位不同,我這項目爬取的是軟件測試的職位(我對象想去做軟件測試這塊,所以,咳咳),不過不影響大家學習,對scrapy的代碼簡單修改一下主要鏈接就可以爬取其他職位的數據了。

爬數據要好久,我爬取了近一萬條數據三四個小時吧,看完之後若是有對我這代碼感興趣,想練手學習數據分析的同學,可以留言 “源碼” ,我發源碼和數據給大家,供大家學習。


一、項目簡單介紹

目標網頁:51job職位
對目標網頁的軟件測試職位進行爬取分析。

使用到的主要技術:

  1. scrapy(數據收集)
  2. pandas(數據清洗分析)
  3. pyecharts(數據可視化)

(一)數據收集

使用scrapy爬蟲對51job網職位,如下詳情頁裏的信息進行了爬取(有點兒出路,不過信息的位置是一樣的)。
在這裏插入圖片描述
Item代碼

import scrapy

class Job51Item(scrapy.Item):
    job_name = scrapy.Field()  # 工作名稱
    job_area = scrapy.Field()  # 工作區域
    experience_requirements = scrapy.Field()  # 經驗要求
    education = scrapy.Field()  # 學歷
    total_recruitment = scrapy.Field()  # 招人總數
    release_date = scrapy.Field()  # 發佈日期
    salary = scrapy.Field()  # 薪資
    welfare = scrapy.Field()  # 福利
    work_requirements = scrapy.Field()  # 工作要求
    company_name = scrapy.Field()  # 公司名
    company_url = scrapy.Field()  # 公司url
    company_type = scrapy.Field()  # 公司性質
    company_size = scrapy.Field()  # 公司規模
    company_field = scrapy.Field()  # 公司領域

spider代碼

# -*- coding: utf-8 -*-
import scrapy
from job51.items import Job51Item


class JobtestSpider(scrapy.Spider):
    name = 'JobTest'
    # allowed_domains = ['search.51job.com']
    
    ##################
    #
    #
    # 要爬取別的職位的就改這個start_urls就好
    #
    #
    ##################
    start_urls = ['https://search.51job.com/list/000000,000000,0000,00,9,99,' \
                  '%25E8%25BD%25AF%25E4%25BB%25B6%25E6%25B5%258B%25E8%25AF%2595,2,' \
                  '{}.html'.format(i) for i in range(1, 301)
                  ]

    def info_parse(self, response):
        print(response.url)

        Item = Job51Item()
        try:
            Item['job_name'] = response.xpath('/html/body/div[3]/div[2]/div[2]/div/div[1]/h1/@title').extract_first()

            data = response.xpath('/html/body/div[3]/div[2]/div[2]/div/div[1]/p[2]/@title').extract_first().split('|')
            Item['job_area'] = data[0]
            Item['experience_requirements'] = data[1]
            Item['education'] = data[2]
            Item['total_recruitment'] = data[3]
            Item['release_date'] = data[4]

            Item['salary'] = response.xpath('/html/body/div[3]/div[2]/div[2]/div/div[1]/strong/text()').extract_first()

            Item['welfare'] = response.xpath('/html/body/div[3]/div[2]/div[2]/div/div[1]/div/div/span/text()').extract()

            work_req = response.xpath('/html/body/div[3]/div[2]/div[3]/div[1]/div')
            Item['work_requirements'] = work_req[0].xpath('string(.)').extract()[0]

            Item['company_name'] = response.xpath('/html/body/div[3]/div[2]/div[4]/div[1]/div[1]/a/p/@title').extract_first()

            Item['company_url'] = response.xpath('/html/body/div[3]/div[2]/div[4]/div[1]/div[1]/a/@href').extract_first()

            Item['company_type'] = response.xpath('/html/body/div[3]/div[2]/div[4]/div[1]/div[2]/p[1]/@title').extract_first()

            Item['company_size'] = response.xpath('/html/body/div[3]/div[2]/div[4]/div[1]/div[2]/p[2]/@title').extract_first()

            Item['company_field'] = response.xpath('/html/body/div[3]/div[2]/div[4]/div[1]/div[2]/p[3]/@title').extract()

            yield Item
        except:
            pass

    def parse(self, response):
        link_url = response.xpath('//*[@id="resultList"]/div[@class="el"]/p/span/a/@href').extract()

        for url in link_url:
            yield scrapy.Request(url=url, callback=self.info_parse)

直接使用scrapy自帶的管道對數據存儲爲csv文件,在終端輸入以下指令即可。

scrapy crawl JobTest -o job.csv

(二)數據清洗

用padnas對數據進行清洗處理,我這裏直接放截圖了,見諒。

1、空值的處理
在這裏插入圖片描述

2、很多公司地址都是這樣的,我就取他前面的那部分。
在這裏插入圖片描述
在這裏插入圖片描述
3、工資單位的處理
工資的單位真是五花八門,統一處理成(千/月)
在這裏插入圖片描述

4、其他處理
在最後觀察整體數據時,發現有少量數據的位置是錯的,比如在學歷這欄出現了“招幾人”的信息。
判斷是如下欄的數據,在HR發佈的時候少寫了什麼,導致了錯位,我們直接刪除這一行數據。
在這裏插入圖片描述
在這裏插入圖片描述

(三)數據分析可視化

利用pycharts對清洗完的數據進行可視化,該部分沒啥代碼好講,主要是對【pycharts官方文檔】的學習理解。直接看下一部分:可視化結果。

二、可視化結果

對數據的收集處理都是過程,最後這可視化結果纔是給人決策的,這些圖表對我們未來的一些行爲有所幫助,我們對某一方面也加深了理解,使得我們行爲決策的正確性更高。

重提一下,這是對軟件測試職位的分析。下面我對每個圖都囉嗦一下,眼界淺薄,不喜勿噴,可視化的圖僅供參考,

(一)工資概觀

在這裏插入圖片描述
對最高、最低、平均工資都做了個盒須圖。看平均工資的,它的上下限差距還是蠻大的,最高近九千,最低兩千五,好的好壞的壞。拿正常點說,就它的平均值有七千五說,我這也沒上班也不能說它很高或很低或什麼的,聽朋友說七千五在整體看來不能算低,it行業裏一般水準。

(二)各個城市的工資水準

在這裏插入圖片描述
這是對每個城市的工資做了個比較,按平均值從大到小排序,然後做了最高工資和最低工資的平均線,做這個圖意思是想可以更好的選擇以後工作發展的城市。

對上圖的補充
在這裏插入圖片描述

(三)招聘的公司類型及規模佔比

在這裏插入圖片描述
招聘的公司可以看出是以50-150人規模的民營公司爲主,中小公司多些。

(四)平均工資與公司類型的關係

在這裏插入圖片描述
這裏外企、外資這工資給的要高一些,然而這個政府機關,不知道爲啥工資實在是低了些,連倒數第二的事業單位的一半都沒有,不過想來是鐵飯碗,待遇好些。

(五)平均工資與公司規模的關係

在這裏插入圖片描述
不用看圖,經驗來想也應該清楚,公司越大工資越高,然怪人人都想去大廠工作。

(六)招聘要求的學歷佔比,及學歷與工資的關係

![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20200409122045706.png?x-oss-process=image/w在這裏插入圖片描述
對本科生的需求量最大,平均工資也排在一箇中間的位置,工資最高的是博士,好待這麼高學歷,不過對博士的需求比較少。

(七)招聘要求的工作經驗佔比,及工作經驗與工資的關係

在這裏插入圖片描述
按經驗來想,工作經驗越多,工資越高,對三到四年工作經驗的需求最大了,這個時候的程序員不算小白也不算大神專家,對於公司而言可能最爲划算了吧,所以需求量特別大。

(八)招聘公司所在城市(工作城市)的地圖

在這裏插入圖片描述
這是公司所在城市的地圖,我用pyecharts無法顯示城市的地圖(其他的可以),這圖我用tableau做的,使用BI工具確實方便好多好多。公司最多的是上海,其次是深圳、廣州,對於軟件測試的朋友可以結合之前的“各個城市的工資水準”去這些地方找工作,不過這裏標出的城市都是大城市,工資也不會低的,關鍵是要找到好公司了。

(九)工作職責/需求詞雲圖

在這裏插入圖片描述
啊哈,有沒有對詞雲形狀眼熟的,這是哪吒的,哈哈哈。這裏有個槽點,我爬取的時候沒對工作職責和需求進行分開爬取,導致這裏有點混亂,添加自定義的停用詞表好費事。爲啥軟件測試的最多的是溝通能力,測試會和開發幹架嗎,所以要多溝通,我想分析開發職位它也是多溝通,都要多溝通呀,多交流學習。


好啦,到此告一段落,大家能給剛入門數據分析的我點個贊支持一下嘛,(我想點贊轉發收藏,三連,哈哈哈哈,大家開心就好)。
最後祝大家,學習無煩惱,代碼無bug,測試一遍過,頭頂不掉髮。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章