我爬取了爬蟲崗位薪資,分析后發現爬蟲真香


閑着無事逛逛招聘網站,無意看到了爬蟲崗位的薪資,發現真香,今天決定爬取下來並進行分析

目錄

1.開始

2.分析目標網站的標簽,發現想要的字段(崗位、公司名稱、城市、薪資)都在p標簽里面,如下圖

3.開始編寫代碼

4.存儲到csv文件

5.分析數據並進行可視化

5.1.可視化1:爬蟲崗位常用名稱

5.2.可視化2:爬蟲崗位最多的城市

5.3.可視化3:薪資分布情況

首先,確定目標網站:

https://jobs.51job.com/pachongkaifa

1.開始

打開pycharm,新建文件->導入必備的庫->加入常用的請求頭header

# 導入requests包
import requests
from lxml import etree
# 網頁鏈接
url = "https://jobs.51job.com/pachongkaifa/p1/"
# 請求頭
headers = {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
    "Accept-Encoding": "gzip, deflate, br",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "Connection": "keep-alive",
    "Cookie": "guid=7e8a970a750a4e74ce237e74ba72856b; partner=blog_csdn_net",
    "Host": "jobs.51job.com",
    "Sec-Fetch-Dest": "document",
    "Sec-Fetch-Mode": "navigate",
    "Sec-Fetch-Site": "none",
    "Sec-Fetch-User": "?1",
    "Upgrade-Insecure-Requests": "1",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36"
}

2.分析目標網站的標簽,發現想要的字段(崗位、公司名稱、城市、薪資)都在p標簽里面,如下圖

<p class="info">

3.開始編寫代碼

先通過request請求網頁,防止中文亂碼,進行gbk的編碼(如果不設置則會出現亂碼)

res = requests.get(url=url, headers=headers)
res.encoding='gbk'
s = res.text

接着進行解析網頁,獲取想要的內容

selector = etree.HTML(s)
for item in selector.xpath('/html/body/div[4]/div[2]/div[1]/div/div'):
    title = item.xpath('.//p/span[@class="title"]/a/text()')
    name = item.xpath('.//p/a/@title')
    location_name = item.xpath('.//p/span[@class="location name"]/text()')
    sary = item.xpath('.//p/span[@class="location"]/text()')
    time = item.xpath('.//p/span[@class="time"]/text()')
    if len(title)>0:
        print(title)
        print(name)
        print(location_name)
        print(sary)
        print(time)
        print("-----------")

最后出現運行后,結果如下:

4.存儲到csv文件

為了方便下一步我們對數據進行分析,我將爬取下來的數據存儲到csv文件

導入需要的庫包

import csv
import codecs

創建csv文件,並設置為追加寫模式

f = codecs.open('爬蟲工程師崗位薪資.csv','a','gbk')
writer = csv.writer(f)
writer.writerow(["崗位","公司","城市","薪資"])

在爬取文件的時候將爬取的內容循環寫入csv

writer.writerow([title[0]+"",name[0]+"",location_name[0]+"",sary[0]+""])

保存好的csv數據如下:

5.分析數據並進行可視化

從csv中讀取爬取好的數據

with open('爬蟲工程師崗位薪資.csv','r',encoding = 'gbk') as fp:
    reader = csv.reader(fp)
    for row in reader:
        #崗位
        title_list.append(row[0])
        #城市
        city_list.append(row[2][0:2])
        #薪資分布
        sary = row[3].split("-")
        if(len(sary)==2):
            try:
                sary = sary[1].replace("/月","")
                if "萬" in sary:
                    sary = sary.replace("萬","")
                    sary = int(sary)
                    sary = sary*10000
                    sary_list.append(sary)
                if "千" in sary:
                    sary = sary.replace("千","")
                    sary = int(sary)
                    sary = sary * 1000
                    sary_list.append(sary)
            except:
                pass

這里用了三個集合來存儲系統分析的內容(崗位、城市、薪資分布)

#崗位
title_list=[]
#城市
city_list=[]
#薪資分布
sary_list=[]

由於薪資是1萬/月、2萬/月,為了轉為10000、20000,則需要進行相應的處理。

開始分析了

5.1.可視化1:爬蟲崗位常用名稱

dict_x = {}
for item in title_list:
    dict_x[item] = title_list.count(item)
sorted_x = sorted(dict_x.items(), key=operator.itemgetter(1), reverse=True)
k_list = []
v_list = []
for k, v in sorted_x[0:11]:
    k_list.append(k)
    v_list.append(v)
plt.axes(aspect=1)
plt.pie(x=v_list,labels= k_list,autopct='%0f%%')
plt.savefig("爬蟲崗位常用名稱.png", dpi=600)
plt.show()

從圖中可以看出,大多數公司都需要用"爬蟲開發工程師"這個詞

5.2.可視化2:爬蟲崗位最多的城市

dict_x = {}
for item in city_list:
    dict_x[item] = city_list.count(item)
sorted_x = sorted(dict_x.items(), key=operator.itemgetter(1), reverse=True)
k_list = []
v_list = []
for k, v in sorted_x[0:11]:
    print(k, v)
    k_list.append(k)
    v_list.append(v)
 
plt.bar(k_list,v_list, label='爬蟲崗位最多的城市')
plt.legend()
plt.xlabel('城市')
plt.ylabel('數量')
plt.title(u'爬蟲崗位最多的城市(李運辰)')
plt.savefig("爬蟲崗位最多的城市.png", dpi=600)
plt.show()

從圖中來看,大城市(北上廣深)的爬蟲工程師崗位居多

5.3.可視化3:薪資分布情況

dict_x = {}
for item in sary_list:
    dict_x[item] = sary_list.count(item)
sorted_x = sorted(dict_x.items(), key=operator.itemgetter(1), reverse=True)
k_list = []
v_list = []
for k, v in sorted_x[0:15]:
    print(k, v)
    k_list.append(k)
    v_list.append(v)
plt.axes(aspect=1)
plt.title(u'薪資分布情況(李運辰)')
plt.pie(x=v_list, labels=k_list, autopct='%0f%%')
plt.savefig("薪資分布情況.png", dpi=600)
plt.show()

我們可以發現,爬蟲工程師的薪資在20000+以上的占大半數,尤其是20000左右的居多,看來爬蟲崗位真是太香,你酸了嗎,哈哈哈哈

data = pd.DataFrame({"value":sary_list})
cats1 = pd.cut(data['value'].values, bins=[8000, 10000, 20000, 30000, 50000,data['value'].max()+1])
pinshu = cats1.value_counts()
pinshu_df = pd.DataFrame(pinshu, columns=['頻數'])
pinshu_df['頻率f'] = pinshu_df / pinshu_df['頻數'].sum()
pinshu_df['頻率%'] = pinshu_df['頻率f'].map(lambda x: '%.2f%%' % (x * 100))
pinshu_df['累計頻率f'] = pinshu_df['頻率f'].cumsum()
pinshu_df['累計頻率%'] = pinshu_df['累計頻率f'].map(lambda x: '%.4f%%' % (x * 100))
print(pinshu_df)
print()
print("李運辰")

從薪資范圍來看,在10000-20000之間站大多數,基本很不錯的薪資,大於20000+的很有一些,真是誘惑太大了

ok,今天的分享就到此結束了,我們下次再見


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM