前言:和以往大家爬取數據分析職位不同,我這項目爬取的是軟件測試的職位(我對象想去做軟件測試這塊,所以,咳咳),不過不影響大家學習,對scrapy的代碼簡單修改一下主要鏈接就可以爬取其他職位的數據了。
爬數據要好久,我爬取了近一萬條數據三四個小時吧,看完之後若是有對我這代碼感興趣,想練手學習數據分析的同學,可以留言 “源碼” ,我發源碼和數據給大家,供大家學習。
目錄
一、項目簡單介紹
目標網頁:51job職位
對目標網頁的軟件測試職位進行爬取分析。
使用到的主要技術:
- scrapy(數據收集)
- pandas(數據清洗分析)
- 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,測試一遍過,頭頂不掉髮。