我爬取了爬蟲崗位薪資,分析後發現爬蟲真香
閒著無事逛逛招聘網站,無意看到了爬蟲崗位的薪資,發現真香,今天決定爬取下來並進行分析
【加群獲取學習資料QQ群:901381280】
識別文末二維碼,回覆:小白入門
未經允許,禁止裝載
目錄
2.分析目標網站的標籤,發現想要的欄位(崗位、公司名稱、城市、薪資)都在p標籤裡面,如下圖
首先,確定目標網站:
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,今天的分享就到此結束了,我們下次再見
【加群獲取學習資料QQ群:901381280】
識別文末二維碼,回覆:小白入門
【本文完整原始碼獲取方式】
識別文末二維碼,回覆:爬蟲薪資分析
【各種爬蟲原始碼獲取方式】
識別文末二維碼,回覆:爬蟲原始碼
歡迎關注公眾號:Python爬蟲資料分析挖掘,方便及時閱讀最新文章
記錄學習python的點點滴滴;
回覆【開源原始碼】免費獲取更多開源專案原始碼;
相關文章
- 什麼是爬蟲?Python爬蟲工程師崗位爬蟲Python工程師
- 【Python學習】爬蟲爬蟲爬蟲爬蟲~Python爬蟲
- 爬蟲:多程式爬蟲爬蟲
- python爬蟲---網頁爬蟲,圖片爬蟲,文章爬蟲,Python爬蟲爬取新聞網站新聞Python爬蟲網頁網站
- 通用爬蟲與聚焦爬蟲爬蟲
- 爬蟲--Scrapy簡易爬蟲爬蟲
- 我去!爬蟲遇到字型反爬,哭了爬蟲
- 反爬蟲之字型反爬蟲爬蟲
- 爬蟲進階:反反爬蟲技巧爬蟲
- 爬蟲爬蟲
- 網路爬蟲——爬蟲實戰(一)爬蟲
- 【爬蟲】爬蟲專案推薦 / 思路爬蟲
- 當我遇到了爬蟲爬蟲
- 2個月精通Python爬蟲——3大爬蟲框架+6場實戰+反爬蟲技巧+分散式爬蟲Python爬蟲框架分散式
- python爬蟲總是爬不到資料,你需要解決反爬蟲了Python爬蟲
- Java爬蟲與Python爬蟲的區別?Java爬蟲Python
- 爬蟲與反爬蟲技術簡介爬蟲
- python就是爬蟲嗎-python就是爬蟲嗎Python爬蟲
- Python爬蟲教程-01-爬蟲介紹Python爬蟲
- 爬蟲開發技巧爬蟲
- 那些年,我爬過的北科(四)——爬蟲進階之極簡併行爬蟲框架開發爬蟲框架
- Java爬蟲-爬取疫苗批次資訊Java爬蟲
- 天天聊爬蟲,今天我們來聊聊反爬爬蟲
- 爬蟲概述爬蟲
- app爬蟲APP爬蟲
- python 爬蟲Python爬蟲
- python爬蟲Python爬蟲
- 爬蟲案例爬蟲
- 爬 蟲包
- request爬蟲爬蟲
- nodejs 爬蟲NodeJS爬蟲
- 科普:爬蟲爬蟲
- Python爬蟲與Java爬蟲有何區別?Python爬蟲Java
- 什麼是爬蟲?Python爬蟲框架有哪些?爬蟲Python框架
- python爬蟲實戰,爬蟲之路,永無止境Python爬蟲
- C#爬蟲與反爬蟲--字型加密篇C#爬蟲加密
- 【python--爬蟲】彼岸圖網高清桌布爬蟲Python爬蟲
- Python爬蟲之路-chrome在爬蟲中的使用Python爬蟲Chrome