zoukankan      html  css  js  c++  java
  • 我爬取了爬虫岗位薪资,分析后发现爬虫真香

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

                                【加群获取学习资料QQ群:901381280

                                          识别文末二维码,回复:小白入门

                                                 未经允许,禁止装载

    目录

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

                                    【加群获取学习资料QQ群:901381280

                                          识别文末二维码,回复:小白入门

                                                 【本文完整源码获取方式

                                        识别文末二维码,回复:爬虫薪资分析

                                             【各种爬虫源码获取方式

                                          识别文末二维码,回复:爬虫源码

                            欢迎关注公众号:Python爬虫数据分析挖掘,方便及时阅读最新文章

                                               记录学习python的点点滴滴;

                                 回复【开源源码】免费获取更多开源项目源码;

                     

  • 相关阅读:
    linux常用命令
    mysql 开发基础系列20 事务控制和锁定语句(上)
    sql server 性能调优之 资源等待 CXPACKET
    mysql 开发基础系列19 触发器
    mysql 开发基础系列18 存储过程和函数(下)
    mysql 开发基础系列17 存储过程和函数(上)
    sql server 性能调优之 资源等待PAGEIOLATCH
    mysql 开发基础系列16 视图
    mysql 开发基础系列15 索引的设计和使用
    sql server 性能调优之 当前用户请求分析 (1)
  • 原文地址:https://www.cnblogs.com/chenlove/p/14128884.html
Copyright © 2011-2022 走看看