基于python的招聘信息爬取与分析
作者:潘承佳 刘冬冬
来源:《电脑知识与技术》2020年第27期
        摘要:随着人工智能,大数据时代的来临,python语言也因此大热,python语言在编程语言排行榜中也水涨船高。与python有关的岗位在lT求职市场中,也越发显得旺盛。分析python岗位的具体情况,对于大学生求职,以及自己未来的职业规划都具有深刻的指导意义。该文利用spider技术爬取了近700页的岗位信息,并对这些粗数据进行数据的清洗,分类。
利用预处理之后的有效数据,进行数据分析,并绘制相关图表。此外,还对招聘要求进行分词、去停用词后,绘制词云。通过一系列的可视化操作,该文对于python岗位在全国IT市场的行情,有了更深入的了解。可以得到薪资和学历,薪资和工作年限,一线城市岗位的规模比较以及岗位招聘要求的词云图等信息。
        关键词:spider;python;可视化;数据分析
        中图分类号:TP391.1 文献标识码:A
        文章编号:1009-3044(2020)27-0102-03
        開放科学(资源服务)标识码(OSID):
        1 背景
        目前,IT界对于python人才的需求已经越来越旺盛,然而python专业人才相对其他语言相对较少,这就使得python相关岗位数以及工作薪资待遇显著提升。本文选择国内最大的招聘网站51job为平台,利用爬虫技术、数据可视化技术对python岗位进行分析,从而从真实
的数据层面反映当前python人才市场情况。网络爬虫具有诸多优势,可根据用户的实际需求,进行爬取,获取整个网页,具备很强的自定义性特点[1]。
        2 相关技术
        2.1 爬虫技术
        网络爬虫[2](WebCrawler),是一种按照一定的规则,自动提取Web网页的应用程序或者脚本,工作原理是基于http协议中请求与响应机制[3]。网络爬虫的优点在于,它可以将整个网页完整爬取下来,而且具有高度的自定义性[4]。客户端发送HTTP请求,将url提交给服务器端。服务器端根据ur1l的信息进行逻辑处理,并将需要的数据返回给客户端。由于请求的信息不止在一个url中,不得不建立一个url列表通过持续的发送请求进而得到全部的信息。返回的信息是HTML( Hypertext MarkupLanguage),通过BeautifuISoup,XPath,正则表达式等技术可以高效地抽取具有固定特征的页面信息,准确率很高。
        2.2数据可视化
        Python为我们提供了用来制作图表的库函数如.matplot-lib,pandas等。事实证明这些
方法已经十分成功,而本文使用一个国产开源python库pyecharts,它是基于百度开源web可视化库Echarts,集合python语言自动生成Echarts图表。它不但可以绘制图表,还可以生成独立的HTML网页。具有良好的性能,并且使用方便。
        3 数据获取
        3.1 总体设计
        首先打开Chrome浏览器,进入前程无忧的网页,打开开发者选项,到其中的network,获取URL以及请求头中的head-ers[5]。本文利用request库的get方法模拟进入5ljob网站,在发送请求中添加python参数,进而可以得到整个网站关于python的所有岗位。我们得到的信息包括:公司名称、薪资水平、公司性质,以及岗位信息等等
        3.2 爬虫模块的设计
        第一步:我们定义一个名叫get_end_page的函数,在发送get请求后,得到HTML页面,利用XPath技术获取最后一页的字符串,即获取到该职位关键词总共在网站上有多少页数,并打印出来。XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的
子集)文档中某部分位置的语言[6]。这样也可以对数据量有个心理预期。
        第二步:由于页数众多,我们需要执行页面的跳转,这时候就需要我们知道每一页的URL。定义一个函数get_url,并将上一步得到的总共的页数传人函数参数。不难发现每一页的URL都是有相同的规律,通过这些网页链接,再继续寻新的网页链接[7]。我们通过XPath技术获得整页的URL列表。部分代码如下:
        Def' get_url(self,count):
        num=0#用于判断是请求响应失败,还是页数到底了
        while True:
        num+=1
        text= t.decode(’gb18030,)
        html= etree.HTML(text)
        detail_urls =html.xpath
        (”//div[@class=’dw_table']/div[@class=’el’]//p/span/a/@href")
        if len(detail_urls)==0:
        #防止返回的是空数据,设置休眠
        time.sleep(2)
        continue
        else:
        break
        return detail_urls
python正则表达式爬虫
        #url列表
        第三步:有了上一步得到的URL列表,再次利用request库的get方法实现网页的抓取,再利用XPath技术获取到相应岗位的具体信息。我们创建- csv文件并把数据保存进去,命名
为“python招聘职位.csv”。
        第四步:为了让代码看起来更加的简洁,本文采用封装的编码思想。把所有的步骤封装在一个类中,类名为PositionS-pider,爬虫的每个步骤定义为类的实例方法,类的初始化函数中定义headers,keyword,以及csv文件。这样可以做到代码的复用,符合“python之禅”的要求。
        经以上数据获取之后,获得2313行招聘信息,数据如下图所示:
        3.3 数据处理
        由上一步得到的源数据,称之为“糙数据”。由于本文主要做的就是薪资、,和学历这几个维度的关系。所以,必须对这些数据进行清洗出来,得到用来可视化的数据集。对于薪资数据,源数据表现形式为:“**千/月,**万/月,**元/天”,本文采用字符串的findall方法将前面的数字提取出来,在进行换算,得到类似于15000这样的表现形式,还有的薪资是某个期间范围内,如:0.6-1万/月,本文采用的是该区间平均数的方式处理。以下是核心代码: