当前位置:   article > 正文

Python爬虫爬取智联招聘(进阶版)(1),Python教程零基础入门_智联招聘爬取

智联招聘爬取

第一步已经将职位地址找到,在浏览器打开之后我们要找到如下几项数据:

在这里插入图片描述

在开发者工具中查找这几项数据,如下图所示:

在这里插入图片描述

HTML结构如下所示:

数据HTML结构

|------

==>|------

>>|------

    >>==>|------

    • 工作经验:3-5年
    • >>==>|------

    • 最低学历:本科
    • >>|------

      >>==>|------

      >>>>|------

      >>>>==>|------

      工作职责:

      >>>>==>|------

      ********

      >>>>==>|------

      ********

      # 工作职责详情

      ==>|------

      >>|------

      >>==>|------

        >>>>|------

      • 公司规模:100-499人
      • 3.2 代码实现

        为了学习一下BeautifulSoup库的使用,我们不再使用正则表达式解析,而是BeautifulSoup库解析HTML标签来获得我们想要得到的内容。

        解析库的安装:pip install beautifulsoup4

        下面介绍一下本例中使用到的功能:

        • 库的引入:from bs4 import BeautifulSoup

        • 数据引入:soup = BeautifulSoup(html, 'html.parser') ,其中html是我们要解析的html源码,html.parser指定HTML的解析器为Python标准库。

        • 查找标签:find(name,attrs,recursive,text,**kwargs),find返回的匹配结果的第一个元素

        • 查找所有标签:find_all(name,attrs,recursive,text,**kwargs)可以根据标签名,属性,内容查找文档,返回找到的所有元素

        • 获取内容:get_text()就可以获取文本内容

        • 获取子标签:soup.p这种方式就可以获取到soup下的第一个p标签

        ‘’’

        python学习交流群:1136201545更多学习资料可以加群获取

        ‘’’

        def get_job_detail(html):

        requirement = ‘’

        使用BeautifulSoup进行数据筛选

        soup = BeautifulSoup(html, ‘html.parser’)

        找到
        • 标签

        for ul in soup.find_all(‘ul’, class_=‘terminal-ul clearfix’):

        该标签共有8个子标签,分别为:

        职位月薪|工作地点|发布日期|工作性质|工作经验|最低学历|招聘人数|职位类别

        lis = ul.find_all(‘strong’)

        工作经验

        years = lis[4].get_text()

        最低学历

        education = lis[5].get_text()

        筛选任职要求

        for terminalpage in soup.find_all(‘div’, class_=‘terminalpage-main clearfix’):

        for box in terminalpage.find_all(‘div’, class_=‘tab-cont-box’):

        cont = box.find_all(‘div’, class_=‘tab-inner-cont’)[0]

        ps = cont.find_all(‘p’)

        "立即申请"按钮也是个p标签,将其排除

        for i in range(len(ps) - 1):

        requirement += ps[i].get_text().replace(“\n”, “”).strip() # 去掉换行符和空格

        筛选公司规模,该标签内有四个或五个
        • 标签,但是第一个就是公司规模

        scale = soup.find(class_=‘terminal-ul clearfix terminal-company mt20’).find_all(‘li’)[0].strong.get_text()

        return {‘years’: years, ‘education’: education, ‘requirement’: requirement, ‘scale’: scale}

        本次我们将职位描述写入txt文件,其余信息写入csv文件。

        csv文件采用逐行写入的方式这样也可以省点内存,修改write_csv_rows函数:

        def write_csv_rows(path, headers, rows):

        ‘’’

        写入行

        ‘’’

        with open(path, ‘a’, encoding=‘gb18030’, newline=‘’) as f:

        f_csv = csv.DictWriter(f, headers)

        如果写入数据为字典,则写入一行,否则写入多行

        if type(rows) == type({}):

        f_csv.writerow(rows)

        else:

        f_csv.writerows(rows)

        添加写txt文件函数:

        def write_txt_file(path, txt):

        ‘’’

        写入txt文本

        ‘’’

        with open(path, ‘a’, encoding=‘gb18030’, newline=‘’) as f:

        f.write(txt)

        我们最重要对职位描述的内容进行词频统计,一些标点符号等会影响统计,使用正则表达式将其剔除:

        对数据进行清洗,将标点符号等对词频统计造成影响的因素剔除

        pattern = re.compile(r’[一-龥]+')

        filterdata = re.findall(pattern, job_detail.get(‘requirement’))

        write_txt_file(txt_filename, ‘’.join(filterdata))

        至此,职位详细信息的获取及保存的工作已经完成,来看一下此时的main函数:

        def main(city, keyword, region, pages):

        ‘’’

        主函数

        ‘’’

        csv_filename = ‘zl_’ + city + ‘_’ + keyword + ‘.csv’

        txt_filename = ‘zl_’ + city + ‘_’ + keyword + ‘.txt’

        headers = [‘job’, ‘years’, ‘education’, ‘salary’, ‘company’, ‘scale’, ‘job_url’]

        write_csv_headers(csv_filename, headers)

        for i in range(pages):

        ‘’’

        获取该页中所有职位信息,写入csv文件

        ‘’’

        job_dict = {}

        html = get_one_page(city, keyword, region, i)

        items = parse_one_page(html)

        for item in items:

        html = get_detail_page(item.get(‘job_url’))

        job_detail = get_job_detail(html)

        job_dict[‘job’] = item.get(‘job’)

        job_dict[‘years’] = job_detail.get(‘years’)

        job_dict[‘education’] = job_detail.get(‘education’)

        job_dict[‘salary’] = item.get(‘salary’)

        job_dict[‘company’] = item.get(‘company’)

        job_dict[‘scale’] = job_detail.get(‘scale’)

        job_dict[‘job_url’] = item.get(‘job_url’)

        对数据进行清洗,将标点符号等对词频统计造成影响的因素剔除

        pattern = re.compile(r’[一-龥]+')

        filterdata = re.findall(pattern, job_detail.get(‘requirement’))

        write_txt_file(txt_filename, ‘’.join(filterdata))

        write_csv_rows(csv_filename, headers, job_dict)

        4、数据分析


        本节内容为此版本的重点。

        4.1 工资统计

        我们对各个阶段工资的占比进行统计,分析该行业的薪资分布水平。前面我们已经把数据保存到csv文件里了,接下来要读取salary列:

        def read_csv_column(path, column):

        ‘’’

        读取一列

        ‘’’

        with open(path, ‘r’, encoding=‘gb18030’, newline=‘’) as f:

        reader = csv.reader(f)

        return [row[column] for row in reader]

        main函数里添加

        print(read_csv_column(csv_filename, 3))

        #下面为打印结果

        [‘salary’, ‘7000’, ‘5000’, ‘25000’, ‘12500’, ‘25000’, ‘20000’, ‘32500’, ‘20000’, ‘15000’, ‘9000’, ‘5000’, ‘5000’, ‘12500’, ‘24000’, ‘15000’, ‘18000’, ‘25000’, ‘20000’, ‘0’, ‘20000’, ‘12500’, ‘17500’, ‘17500’, ‘20000’, ‘11500’, ‘25000’, ‘12500’, ‘17500’, ‘25000’, ‘22500’, ‘22500’, ‘25000’, ‘17500’, ‘7000’, ‘25000’, ‘3000’, ‘22500’, ‘15000’, ‘25000’, ‘20000’, ‘22500’, ‘15000’, ‘15000’, ‘25000’, ‘17500’, ‘22500’, ‘10500’, ‘20000’, ‘17500’, ‘22500’, ‘17500’, ‘25000’, ‘20000’, ‘11500’, ‘11250’, ‘12500’, ‘14000’, ‘12500’, ‘17500’, ‘15000’]

        从结果可以看出,除了第一项,其他的都为平均工资,但是此时的工资为字符串,为了方便统计,我们将其转换成整形:

        salaries = []

        sal = read_csv_column(csv_filename, 3)

        撇除第一项,并转换成整形,生成新的列表

        for i in range(len(sal) - 1):

        工资为’0’的表示招聘上写的是’面议’,不做统计

        if not sal[i] == ‘0’:

        salaries.append(int(sal[i + 1]))

        print(salaries)

        下面为打印结果

        [7000, 5000, 25000, 12500, 25000, 20000, 32500, 20000, 15000, 9000, 5000, 5000, 12500, 24000, 15000, 18000, 25000, 20000, 0, 20000, 12500, 20000, 11500, 17500, 25000, 12500, 17500, 25000, 25000, 22500, 22500, 17500, 17500, 7000, 25000, 3000, 22500, 15000, 25000, 20000, 22500, 15000, 22500, 10500, 20000, 15000, 17500, 17500, 25000, 17500, 22500, 25000, 12500, 20000, 11250, 11500, 14000, 12500, 15000, 17500]

        我们用直方图进行展示:

        plt.hist(salaries, bins=10 ,)

        plt.show()

        生成效果图如下:

        在这里插入图片描述

        从图中可以看出工资分布的情况,这样在你找工作时可以做一个参考。

        4.2 职位描述词频统计

        对职位描述词频统计的意义是可以了解该职位对技能的基本要求,如果正在找工作,可以估计一下自己的要求是否符合该职位;如果想要一年后换工作,那么也可以提前做好准备,迎接新的挑战。

        词频统计用到了 jieba、numpy、pandas、scipy库。如果电脑上没有这两个库,执行安装指令:

        • pip install jieba

        • pip install pandas

        • pip install numpy

        • pip install scipy

        4.2.1 读取txt文件

        前面已经将职位描述保存到txt文件里了,现在我们将其读出:

        def read_txt_file(path):

        ‘’’

        读取txt文本

        ‘’’

        with open(path, ‘r’, encoding=‘gb18030’, newline=‘’) as f:

        return f.read()

        简单测试一下:

        import jieba

        import pandas as pd

        ‘’’

        python学习交流群:1136201545更多学习资料可以加群获取

        ‘’’

        content = read_txt_file(txt_filename)

        segment = jieba.lcut(content)

        words_df=pd.DataFrame({‘segment’:segment})

        print(words_df)

        输出结果如下:

        segment

        0 岗位职责

        1 参与

        2 公司

        3 软件产品

        4 后台

        5 研发

        6 和

        7 维护

        8 工作

        9 参与

        10 建筑物

        11 联网

        12 数据分析

        自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

        深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

        因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
        img
        img



        既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

        由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

        如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
        img

        学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

        一、Python所有方向的学习路线

        Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

        二、学习软件

        工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

        三、全套PDF电子书

        书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

        四、入门学习视频

        我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

        五、实战案例

        光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

        六、面试资料

        我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

        .png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56iL5bqP5aqb56eD56eD,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)

        五、实战案例

        光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

        六、面试资料

        我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

      声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/939980
      推荐阅读
      相关标签
        

      闽ICP备14008679号