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


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

    目录

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

    耐得住寂寞,才能登得顶
    Gitee码云:https://gitee.com/lyc96/projects
  • 相关阅读:
    我画着图,FluentAPI 她自己就生成了
    寻找性能更优秀的不可变小字典
    寻找性能更优秀的动态 Getter 和 Setter 方案
    数据治理方案技术调研 Atlas VS Datahub VS Amundsen
    数据库读写分离这个坑,你应该踩过吧?
    写了一套优雅接口之后,领导让我给大家讲讲这背后的技术原理
    年轻人不讲武德,竟然重构出这么优雅后台 API 接口
    贞炸了!上线之后,消息收不到了!
    一笔订单,但是误付了两笔钱!这种重复付款异常到底该如何解决?
    自动化运维工具之Puppet master/agent模型、站点清单和puppet多环境设定
  • 原文地址:https://www.cnblogs.com/chenlove/p/15157863.html
Copyright © 2020-2023  润新知