写点什么

我爬取了爬虫岗位薪资,分析后发现爬虫真香

发布于: 4 小时前

闲着无事逛逛招聘网站,无意看到了爬虫岗位的薪资,发现真香,今天决定爬取下来并进行分析

目录

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 requestsfrom 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 csvimport 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,今天的分享就到此结束了,我们下次再见

发布于: 4 小时前阅读数: 4
用户头像

个人公众号:Python研究者 2021.04.26 加入

教你如何学Python,专注于Python入门与进阶、爬虫、数据分析挖掘、数据可视化。分享Python相关的技术文章、工具资源、视频教程、学习资料。

评论

发布
暂无评论
我爬取了爬虫岗位薪资,分析后发现爬虫真香