1、数据的获(pa)取

目录

1、数据的(pa)取

你不会以为这就结束了?才走了一半的路,坚持点!继续

2、数据清洗进行可视化

3、成品展示


俩天没见,大家的爬虫能力如何了?不知道大家的能力如何,反正我的代码结果依旧很乱,这次我爬的是某聘wang,数据分析的前10页岗位内容,多的不说少的不唠,上代码!!

from selenium import webdriver
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains

'''开始实例化浏览器'''
print(0)
f = open('大家记得改下这里-数据分析招聘信息.txt', 'w')
drive = webdriver.Chrome()
drive.get('https://www.zhipin.com/?sid=sem_pz_bdpc_dasou_title')
drive.maximize_window()
drive.find_element(By.CSS_SELECTOR, ".home-body-wrapper .column-search-panel .ipt-search").send_keys("数据分析")
drive.find_element(By.CSS_SELECTOR, ".search-panel-new .btn-search").click()

1-这里的代码是啥意思,相信大家也应该或多或少等看清楚一些,第一个内容当然是用库来获取了,而第二个内容,依旧老样子,初始化浏览器,输入你想要的岗位名称并点击

'''获取元素 1、职位名称
2公司名称
3、薪资水平
4、工作地点
5、工作经验
6、学历条件
'''
for i in range(1, 11):
    drive.refresh()
    print(1)
    drive.implicitly_wait(10)
    框架 = drive.find_elements(By.CSS_SELECTOR, '.job-card-wrapper')
    print(2)
    time.sleep(2)
    if len(框架) >= 1:
        for i in 框架:
            print(3)
            time.sleep(2)
            '''获取岗位地址'''
            address = i.find_element(By.CSS_SELECTOR,
                                     '.job-card-wrapper .job-card-left .job-title .job-area-wrapper .job-area').text
            '''获取岗位名称'''
            job_name = i.find_element(By.CSS_SELECTOR, '.job-card-wrapper .job-card-left .job-title .job-name').text
            '''获取公司名称'''
            company = i.find_element(By.CSS_SELECTOR, '.job-card-wrapper .job-card-right .company-name a').text
            '''获取薪资水平'''
            money = i.find_element(By.CSS_SELECTOR, '.job-card-wrapper .job-card-left .salary').text
            '''这个是啥意思你就慢慢猜吧,我也是英汉互译,毕竟英语水平有限(经验)'''
            experience = i.find_element(By.CSS_SELECTOR, '.job-card-wrapper .job-card-left .tag-list :first-child').text
            '''获取学历要求'''
            edcation = i.find_element(By.CSS_SELECTOR, '.job-card-wrapper .job-card-left .tag-list li+li').text
            '''写入文档'''
            f.write(
                str(address + ',' + job_name + ',' + company + ',' + money + ',' + experience + ',' + edcation) + "\n")
            print(str(address + ',' + job_name + ',' + company + ',' + money + ',' + experience + ',' + edcation))

2-以上呢就是我如何获取元素信息的内容了,大家记得找元素定位的时候,如果你找的元素不止一个,记得element要加S,这个初中英语老师就已经给你们讲过了吧!

        time.sleep(2)
        '''利用滑块,使得页面得以跳动,模拟人工'''
        js = 'window.scrollTo(0,2000)'
        drive.execute_script(js)#读不懂就对了,这是js代码,滑动滑块的
        time.sleep(3)
        drive.find_element(By.XPATH, '//*[@class="options-pages"]/a[10]').click()
        time.sleep(3)
    #这里因为我爬取了很多次,为了防止IP被限制,我特地打印一下看看有没有获取到内容,当然
    #这里你也可以用try
    else:
        print('没有内容,停止运行')
        break
'''重点,这里一定要记得关闭文档,否则,你看看里面能给你什么'''
f.close()

3-这里是个小重点,一定一定一定要记得close()以下文件,否则你会和我一样懵逼,是不是有没找到元素

上完整代码!

'''导入相关的库'''
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains

'''开始实例化浏览器'''
print(0)
'''先打开文件'''
f = open('BOSS直聘网-数据分析招聘信息.txt', 'w')
drive = webdriver.Chrome()
drive.get('https://www.zhipin.com/?sid=sem_pz_bdpc_dasou_title')
drive.maximize_window()
drive.find_element(By.CSS_SELECTOR, ".home-body-wrapper .column-search-panel .ipt-search").send_keys("数据分析")
drive.find_element(By.CSS_SELECTOR, ".search-panel-new .btn-search").click()
'''获取元素 1、职位名称
2公司名称
3、薪资水平
4、工作地点
5、工作经验
6、学历条件
'''
for i in range(1, 11):
    drive.refresh()
    print(1)
    drive.implicitly_wait(10)
    框架 = drive.find_elements(By.CSS_SELECTOR, '.job-card-wrapper')
    print(2)
    time.sleep(2)
    if len(框架) >= 1:
        for i in 框架:
            print(3)
            time.sleep(2)
            '''获取岗位地址'''
            address = i.find_element(By.CSS_SELECTOR,
                                     '.job-card-wrapper .job-card-left .job-title .job-area-wrapper .job-area').text
            '''获取岗位名称'''
            job_name = i.find_element(By.CSS_SELECTOR, '.job-card-wrapper .job-card-left .job-title .job-name').text
            '''获取公司名称'''
            company = i.find_element(By.CSS_SELECTOR, '.job-card-wrapper .job-card-right .company-name a').text
            '''获取薪资水平'''
            money = i.find_element(By.CSS_SELECTOR, '.job-card-wrapper .job-card-left .salary').text
            '''这个是啥意思你就慢慢猜吧,我也是英汉互译,毕竟英语水平有限(经验)'''
            experience = i.find_element(By.CSS_SELECTOR, '.job-card-wrapper .job-card-left .tag-list :first-child').text
            '''获取学历要求'''
            edcation = i.find_element(By.CSS_SELECTOR, '.job-card-wrapper .job-card-left .tag-list li+li').text
            '''写入文档'''
            f.write(
                str(address + ',' + job_name + ',' + company + ',' + money + ',' + experience + ',' + edcation) + "\n")
            print(str(address + ',' + job_name + ',' + company + ',' + money + ',' + experience + ',' + edcation))
        time.sleep(2)
        '''利用滑块,使得页面得以跳动,模拟人工'''
        js = 'window.scrollTo(0,2000)'
        drive.execute_script(js)#读不懂就对了,这是js代码,滑动滑块的
        time.sleep(3)
        drive.find_element(By.XPATH, '//*[@class="options-pages"]/a[10]').click()
        time.sleep(3)
    #这里因为我爬取了很多次,为了防止IP被限制,我特地打印一下看看有没有获取到内容,当然
    #这里你也可以用try
    else:
        print('没有内容,停止运行')
        break
'''重点,这里一定要记得关闭文档,否则,你看看里面能给你什么'''
f.close()

你不会以为这就结束了?才走了一半的路,坚持点!继续

2、数据清洗进行可视化

        这里是可视化部分,你看,这样看我这些字好看吗?

那不得这样看?继续,上代码!

import pandas as pd
import seaborn as sb
import matplotlib.pyplot as plt
import jieba
f=open('BOSS直聘网-数据分析招聘信息.txt','r')
f1=f.readlines()#导入爬取的文本数据
'''文本数据处理方法'''
def data_handle():
    '''定义三个列表,分别为:'''
    '''地区'''
    address=[]
    '''薪资'''
    money=[]
    '''学历'''
    edcation=[]
    for i in f1:
        '''直接向导入money的平均值'''
        money_1=i.strip().split(",")[-3]
        if '薪' in money_1:
           money_2=money_1[:-5:].split("-")
           money.append((int(money_2[0])+int(money_2[1]))//2)
        elif '天' in money_1:
            pass
            money_3=money_1[:-3:].split('-')
            money.append((int(money_3[0])+int(money_3[1]))//2)
        else:
            money_4 = money_1[:-1:].split('-')
            money.append((int(money_4[0])+int(money_4[1]))//2)
        '''添加学历'''
        if '月' in i.split(',')[-1]:
            edcation.append('本科')
        else:
            edcation.append(i.split(',')[-1].strip('\n'))
        '''添加地址'''
        address_1=i.split(',')[0].split('·')
        address.append(address_1[0])
    return address,money,edcation
'''数据处理及异常值清洗'''
def save(address,money,edcation):
    data={"工作地点":address,
          "薪资":money,
    "学历":edcation}
    '''使得数据整体美观'''
    pd.set_option("display.unicode.east_asian_width", True)
    df=pd.DataFrame(data=data)
    '''重复值处理'''
    df[df.duplicated(subset=['工作地点'])]#查找重复值
    df.drop_duplicates(subset=['工作地点'],inplace=True)#删除重复值,我这里就保留第一条
    return df

n--不记得多少了--还记得你保存了的数据文档吗?很难慢慢翻构思出大概情况来吧。。。。。。。。这里就该好好的处理一下它,让他变得好看起来,同学们要记得数据分析可视化的库,pandas,numpy ,sklearn,seaborn,matplotlib,当然,就这些小数据用不上这么大排面,熊猫(pandas)和matplotlib就够了,你又不是要进行什么聚类分析,相关分析,敏感分析啥的,这些就够了,想要去了解这些库的同学记得画圈,是个小重点

第一个方法!!!这是说的是上图,第一个方法的作用是用于进行数据的清洗,你爬这么多页人家肯定会有重复的地区吧,咱现在就把重复的地区给去除掉,薪资就取平均值,学历就取众数,当然,我这里是瞎取得,数据分析岗位的薪资咋可能这么低是吧。df[df.duplicated(subset=['工作地点'])]这个方法要记得是用于按照某列筛选重复值的, df.drop_duplicates(subset=['工作地点'],inplace=True)而这个方法是按照什么列来去掉重复值的,data={"工作地点":address,
          "薪资":money,
    "学历":edcation}
    '''使得数据整体美观'''
    pd.set_option("display.unicode.east_asian_width", True)
    df=pd.DataFrame(data=data),
这个方法,是用来将txt文本的内容读取出来筛选后转化为熊猫duixiang的,没错,就是他的对象。

def show(df):
    df1=df[0:15]
    df2=df[15:30]
    df3=df[30:46]
    return df1,df2,df3
def show_1(df):
    '''这里需要提前说明解决中文乱码问题'''
    plt.rcParams["font.sans-serif"]=["SimHei"]
    '这里通过print(df.shape[0]) 返回行数'
    x=[i for i in range(15)]
    fig = plt.figure(figsize=(10, 10))
    ax1 = fig.add_subplot(1, 1, 1)
    '''设置图表标题'''
    plt.title("数据分析岗位要求情况",fontsize=20,fontweight=20)
    '''绘制柱状图'''
    ax1.bar(df['工作地点'], df['薪资'])
    '''添加x标签'''
    ax1.set_xlabel('地区', fontsize=20)
    '''添加y1轴标签'''
    ax1.set_ylabel('薪资/千元', fontsize=20)
    '''共享x轴'''
    ax2 = ax1.twinx()
    '''绘制y形式'''
    ax2.plot(x, df["学历"], color='red', linestyle='--', marker='o')
    '''添加y2轴标签'''
    ax2.set_ylabel("学历", fontsize=15,fontweight=20)
    plt.show()

2n--——能看懂吗?看不懂?那就对了,这玩意是用来把你清洗好的数据绘图的,思考一下,你的变量有三个,money,学历,公司地址,但是你又想只在一张表上做,这咋办?换样?不可能,好歹还是个python,当然自有双y方法,来,上完整代码

# 作者:杨家乐
# 阶段:进阶练习中,请稍后.......
# 开发时间:2022/10/10 21:24
import pandas as pd
import seaborn as sb
import matplotlib.pyplot as plt
import jieba
f=open('BOSS直聘网-数据分析招聘信息.txt','r')
f1=f.readlines()#导入爬取的文本数据
'''文本数据处理方法'''
def data_handle():
    '''定义三个列表,分别为:'''
    '''地区'''
    address=[]
    '''薪资'''
    money=[]
    '''学历'''
    edcation=[]
    for i in f1:
        '''直接向导入money的平均值'''
        money_1=i.strip().split(",")[-3]
        if '薪' in money_1:
           money_2=money_1[:-5:].split("-")
           money.append((int(money_2[0])+int(money_2[1]))//2)
        elif '天' in money_1:
            pass
            money_3=money_1[:-3:].split('-')
            money.append((int(money_3[0])+int(money_3[1]))//2)
        else:
            money_4 = money_1[:-1:].split('-')
            money.append((int(money_4[0])+int(money_4[1]))//2)
        '''添加学历'''
        if '月' in i.split(',')[-1]:
            edcation.append('本科')
        else:
            edcation.append(i.split(',')[-1].strip('\n'))
        '''添加地址'''
        address_1=i.split(',')[0].split('·')
        address.append(address_1[0])
    return address,money,edcation
'''数据处理及异常值清洗'''
def save(address,money,edcation):
    data={"工作地点":address,
          "薪资":money,
    "学历":edcation}
    '''使得数据整体美观'''
    pd.set_option("display.unicode.east_asian_width", True)
    df=pd.DataFrame(data=data)
    '''重复值处理'''
    df[df.duplicated(subset=['工作地点'])]#查找重复值
    df.drop_duplicates(subset=['工作地点'],inplace=True)#删除重复值,我这里就保留第一条
    return df
'''制作双2-y轴图标'''#应为要涉及到学历与薪资这俩个应变量,也可以用热力图
def show(df):
    df1=df[0:15]
    df2=df[15:30]
    df3=df[30:46]
    return df1,df2,df3
def show_1(df):
    '''这里需要提前说明解决中文乱码问题'''
    plt.rcParams["font.sans-serif"]=["SimHei"]
    '这里通过print(df.shape[0]) 返回行数'
    x=[i for i in range(15)]
    fig = plt.figure(figsize=(10, 10))
    ax1 = fig.add_subplot(1, 1, 1)
    '''设置图表标题'''
    plt.title("数据分析岗位要求情况",fontsize=20,fontweight=20)
    '''绘制柱状图'''
    ax1.bar(df['工作地点'], df['薪资'])
    '''添加x标签'''
    ax1.set_xlabel('地区', fontsize=20)
    '''添加y1轴标签'''
    ax1.set_ylabel('薪资/千元', fontsize=20)
    '''共享x轴'''
    ax2 = ax1.twinx()
    '''绘制y形式'''
    ax2.plot(x, df["学历"], color='red', linestyle='--', marker='o')
    '''添加y2轴标签'''
    ax2.set_ylabel("学历", fontsize=15,fontweight=20)
    plt.show()
if __name__ == '__main__':
    address,money,edcation=data_handle()
    df=save(address,money,edcation)
    df1,df2,df3=show(df)
    show_1(df1)
    show_1(df2)
    show_1(df3)

4n—————大家千万要记得,我的df1 df2 df3 是用熊猫对象来切分出来的,这么多数据,你不得从电脑这头看到你宿舍对面去?肯定得让他们乖乖分开,至于在哪分的,你好好思考看看。

好奇图片长啥样吗?、、

、、、要学会坚持,这个就会是你的成果啦

图片与具体情况不具体符合,因为是我的处理,所以误差不可避免

3、成品展示

 

 大家千万不要被作者的成果蒙蔽了双眼,数据可视化的能力可不止这一点,是我的能力太弱,只能勉强召唤一下它,给你们好好看看他的真正面目(数据可视化也能如此)

怎么样?炫酷吧,没错,也许你看到的只是图片,但其实图片下面隐藏了成千百万条数据,如果让你一个个慢慢看,肯定得猴年马月了,这就是数据可视化的作用,想学吗?从熊猫开始!变成一名强者。不断地坚持你就能拥有它!

今日美文:如果你在学习的过程中感受到了枯燥与无味,你不妨好好看看那些用剩余时间偷闲的人,他们放松了你就能从枯燥与无味的学习里获取到了优越!!!因为坚持学习本就不是一件容易的事。但是如果你比别人坚持得久,你就能超越他们,慢慢来,时间会证明一切。别让拖延症误了你,摆脱它!!!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐