爬虫真香,我爬取了爬虫岗位薪资进行了分析

本文介绍了一个使用Python爬虫抓取并分析爬虫岗位薪资的过程,包括目标网站分析、编码防止乱码、数据存储到CSV,以及通过可视化展示岗位名称、城市分布和薪资情况。结果显示大城市爬虫工程师需求旺盛,薪资普遍集中在20000+。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理

首先,确定目标网站:

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

1.开始

打开pycharm,新建文件->导入必备的库->加入常用的请求头header

 
  1. # 导入requests包

  2. import requests

  3. from lxml import etree

  4. # 网页链接

  5. url = "https://jobs.51job.com/pachongkaifa/p1/"

  6. # 请求头

  7. headers = {

  8. "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",

  9. "Accept-Encoding": "gzip, deflate, br",

  10. "Accept-Language": "zh-CN,zh;q=0.9",

  11. "Connection": "keep-alive",

  12. "Cookie": "guid=7e8a970a750a4e74ce237e74ba72856b; partner=blog_youkuaiyun.com",

  13. "Host": "jobs.51job.com",

  14. "Sec-Fetch-Dest": "document",

  15. "Sec-Fetch-Mode": "navigate",

  16. "Sec-Fetch-Site": "none",

  17. "Sec-Fetch-User": "?1",

  18. "Upgrade-Insecure-Requests": "1",

  19. "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36"

  20. }

2.分析目标网站的标签,发现想要的字段(岗位、公司名称、城市、薪资)都在p标签里面,如下图

<p class="info">

 

3.开始编写代码

先通过request请求网页,防止中文乱码,进行gbk的编码(如果不设置则会出现乱码)

 
  1. res = requests.get(url=url, headers=headers)

  2. res.encoding='gbk'

  3. s = res.text

,接着进行解析网页,获取想要的内容

 
  1. selector = etree.HTML(s)

  2. for item in selector.xpath('/html/body/div[4]/div[2]/div[1]/div/div'):

  3. title = item.xpath('.//p/span[@class="title"]/a/text()')

  4. name = item.xpath('.//p/a/@title')

  5. location_name = item.xpath('.//p/span[@class="location name"]/text()')

  6. sary = item.xpath('.//p/span[@class="location"]/text()')

  7. time = item.xpath('.//p/span[@class="time"]/text()')

  8. if len(title)>0:

  9. print(title)

  10. print(name)

  11. print(location_name)

  12. print(sary)

  13. print(time)

  14. print("-----------")

最后出现运行后,结果如下:

 

4.存储到csv文件

为了方便下一步我们对数据进行分析,我将爬取下来的数据存储到csv文件

导入需要的库包

 
  1. import csv

  2. import codecs

创建csv文件,并设置为追加写模式

 
  1. f = codecs.open('爬虫工程师岗位薪资.csv','a','gbk')

  2. writer = csv.writer(f)

  3. writer.writerow(["岗位","公司","城市","薪资"])

在爬取文件的时候将爬取的内容循环写入csv

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

保存好的csv数据如下:

5.分析数据并进行可视化

从csv中读取爬取好的数据

 
  1. with open('爬虫工程师岗位薪资.csv','r',encoding = 'gbk') as fp:

  2. reader = csv.reader(fp)

  3. for row in reader:

  4. #岗位

  5. title_list.append(row[0])

  6. #城市

  7. city_list.append(row[2][0:2])

  8. #薪资分布

  9. sary = row[3].split("-")

  10. if(len(sary)==2):

  11. try:

  12. sary = sary[1].replace("/月","")

  13. if "万" in sary:

  14. sary = sary.replace("万","")

  15. sary = int(sary)

  16. sary = sary*10000

  17. sary_list.append(sary)

  18. if "千" in sary:

  19. sary = sary.replace("千","")

  20. sary = int(sary)

  21. sary = sary * 1000

  22. sary_list.append(sary)

  23. except:

  24. pass

这里用了三个集合来存储系统分析的内容(岗位、城市、薪资分布)

 
  1. #岗位

  2. title_list=[]

  3. #城市

  4. city_list=[]

  5. #薪资分布

  6. sary_list=[]

由于薪资是1万/月、2万/月,为了转为10000、20000,则需要进行相应的处理。

开始分析了

5.1.可视化1:爬虫岗位常用名称

 
  1. dict_x = {}

  2. for item in title_list:

  3. dict_x[item] = title_list.count(item)

  4. sorted_x = sorted(dict_x.items(), key=operator.itemgetter(1), reverse=True)

  5. k_list = []

  6. v_list = []

  7. for k, v in sorted_x[0:11]:

  8. k_list.append(k)

  9. v_list.append(v)

  10. plt.axes(aspect=1)

  11. plt.pie(x=v_list,labels= k_list,autopct='%0f%%')

  12. plt.savefig("爬虫岗位常用名称.png", dpi=600)

  13. plt.show()

从图中可以看出,大多数公司都需要用"爬虫开发工程师"这个词

5.2.可视化2:爬虫岗位最多的城市

 
  1. dict_x = {}

  2. for item in city_list:

  3. dict_x[item] = city_list.count(item)

  4. sorted_x = sorted(dict_x.items(), key=operator.itemgetter(1), reverse=True)

  5. k_list = []

  6. v_list = []

  7. for k, v in sorted_x[0:11]:

  8. print(k, v)

  9. k_list.append(k)

  10. v_list.append(v)

  11.  
  12. plt.bar(k_list,v_list, label='爬虫岗位最多的城市')

  13. plt.legend()

  14. plt.xlabel('城市')

  15. plt.ylabel('数量')

  16. plt.title(u'爬虫岗位最多的城市(李运辰)')

  17. plt.savefig("爬虫岗位最多的城市.png", dpi=600)

  18. plt.show()

 

从图中来看,大城市(北上广深)的爬虫工程师岗位居多

5.3.可视化3:薪资分布情况

 
  1. dict_x = {}

  2. for item in sary_list:

  3. dict_x[item] = sary_list.count(item)

  4. sorted_x = sorted(dict_x.items(), key=operator.itemgetter(1), reverse=True)

  5. k_list = []

  6. v_list = []

  7. for k, v in sorted_x[0:15]:

  8. print(k, v)

  9. k_list.append(k)

  10. v_list.append(v)

  11. plt.axes(aspect=1)

  12. plt.title(u'薪资分布情况(李运辰)')

  13. plt.pie(x=v_list, labels=k_list, autopct='%0f%%')

  14. plt.savefig("薪资分布情况.png", dpi=600)

  15. plt.show()

我们可以发现,爬虫工程师的薪资在20000+以上的占大半数,尤其是20000左右的居多,看来爬虫岗位真是太香,你酸了吗,哈哈哈哈

 
  1. data = pd.DataFrame({"value":sary_list})

  2. cats1 = pd.cut(data['value'].values, bins=[8000, 10000, 20000, 30000, 50000,data['value'].max()+1])

  3. pinshu = cats1.value_counts()

  4. pinshu_df = pd.DataFrame(pinshu, columns=['频数'])

  5. pinshu_df['频率f'] = pinshu_df / pinshu_df['频数'].sum()

  6. pinshu_df['频率%'] = pinshu_df['频率f'].map(lambda x: '%.2f%%' % (x * 100))

  7. pinshu_df['累计频率f'] = pinshu_df['频率f'].cumsum()

  8. pinshu_df['累计频率%'] = pinshu_df['累计频率f'].map(lambda x: '%.4f%%' % (x * 100))

  9. print(pinshu_df)

  10. print()

  11. print("李运辰")

从薪资范围来看,在10000-20000之间站大多数,基本很不错的薪资,大于20000+的很有一些,真是诱惑太大了

想要获取更多Python学习资料可以加QQ:2955637827私聊或加Q群630390733大家一起来学习讨论吧!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值