基于python的数据采集以及可视化脚本的开发(超详细)

时间:2024-03-08 21:28:12

目 录

1 引言.............................................................5

1.1 Python的介绍...................................................5

1.2 数据采集(爬虫)介绍............................................5

1.2.1 什么是爬虫....................................................5

1.2.2 通用爬虫和聚焦爬虫............................................5

1.2.3 数据采集研究现状..............................................6

1.3 数据清洗介绍....................................................6

1.4 数据可视化介绍..................................................6

1.4.1 数据可视化发展史..............................................6

1.4.2 数据可视化研究概述............................................7

2 数据采集(爬虫)技术实现..........................................8

2.1 采集需求........................................................8

2.2 爬虫设计流程....................................................8

2.3 采集网站分析....................................................9

2.4 采集代码实现....................................................10

3 数据清洗技术.....................................................13

4 数据可视化技术...................................................14

4.1 可视化技术实现.................................................14

4.1.1 字段确认.....................................................14

4.1.2 数据获取.....................................................15

4.1.2.1 获取薪资数据...............................................15

4.1.2.2 获取城市数据...............................................16

4.1.2.3 获取学历数据...............................................17

4.1.2.4 获取工作性质数据...........................................18

4.1.2.5 获取工作经验数据...........................................19

4.1.3 可视化实现.................................................19

4.2 数据展示与分析.................................................20

4.2.1 薪资可视化...................................................20

4.2.2 城市地区分布.................................................21

4.2.3 学历要求.....................................................21

4.2.4 工作性质.....................................................22

4.2.5 工作经验.....................................................24









1 引言

1989年,软件工程师蒂莫西·约翰·伯纳斯-李爵士(Sir Timothy John Berners-Lee)发明了万维网,直至今日,已经有三十年的了,这三十年来,互联网发展特别的迅速,网络的发展,造成了World Wide Web成了大批数据的载体,而如何利用这些数据来改善人们的生活和工作是一个值得研究的课题。

应届生毕业,面临着最紧急的事,那就是找工作,但是很多毕业生不知道自己想要做的工作岗位的地区分布、薪资待遇等方面的情况。本脚本就是基于Python的一个数据采集和数据可视化,以java为例,使用requests库采集智联招聘上的网站的有关java的职位数据,并存储到阿里云数据库中,之后对数据库中的相关职位信息进行修正,可视化等操作,利用这些数据来了解java的职位信息。

1.1 Python

Python编程语言和java编程语言一样,都是一种高级编程语言,不过不同于Java语言的是,Python是解释型,Java是编译型。

Python和Perl语言相同, Python和Perl语言的源代码都是遵循 GPL协议。

1.2 数据采集(爬虫)介绍

1.2.1 什么是爬虫

什么是爬虫?搜索引擎就是爬虫的一个典型示例,像百度、谷歌等等这些都属于搜索引擎。网络爬虫的别称有很多,像网络机器人、网络追逐者,还有人很形象地称之为网络蜘蛛,它的本质上是一个程序或者一个脚本,通过某些特定的规则自动的去爬取网络中的数据。

一般来说,爬虫是模拟浏览器请求服务器。它可以使用某些规则自动请求网页且抓取有用的数据。

1.2.2 通用爬虫和聚焦爬虫

爬虫分为通用爬虫和聚焦爬虫。

通用爬虫:它是各大搜索引擎(Google,百度,搜狗)的重要组成部分,主要是用来下载互联网的网页到本地,来形成一个互联网内容的镜像备份。

聚焦爬虫:它是一种面向特定需求的网络爬虫的程序,它和通用爬虫的区别在于,聚焦爬虫不但会下载网页,还会对网页里面的内容进行筛选,尽量只提取与需求相关的数据。

本设计就是一个爬取智联招聘的聚焦爬虫。

1.2.3 数据采集研究现状

目前,网络数据采集技术基本上是通过网络蜘蛛(或数据采集机器人)、分词系统、任务索引系统等垂直搜索引擎技术的综合应用完成的。随着海量网络信息的增长和互联网技术的发展,人们对信息获取和分类的需求日益增加。

人们通常通过上述技术收集大量的信息和数据,然后对其进行两次分类和处理,以最大化网络数据的价值和效益,使其更加专业。

在我国,有许多企业从事“海量数据收集”,其中大部分是通过垂直搜索引擎技术实现的。同时,一些企业也实现了各种技术的综合应用。例如,“火车收集器”是垂直搜索引擎网络雷达中的信息跟踪、自动索引和自动排序技术,它结合了海量数据收集和后处理。

一般来说,从事大规模数据收集的企业属于计算机数据分析的研究范畴。

1.3 数据清洗介绍

数据清理:重新检查和验证数据以纠正现有错误、删除重复信息并提供数据一致性的过程。

数据清理是对脏数据进行清理的过程,是指查找和纠正数据文件中可识别错误的过程,包括检查数据一致性、处理丢失和无效值等。因为在数据仓库中,数据是一个面向特定主题的数据集,从许多不同的业务中提取出来。系统中包含历史数据,必然会出现数据错误和数据之间的冲突或者重复的数据。显然,这些非要求的数据不是我们所需要的,那么我们就称它们为脏数据。我们使用特定的规则来清理脏数据,这就是数据清理。数据清理的任务是对不符合要求的数据进行过滤,并将过滤结果传递给业务主管部门。我们在提取相关数据之前,需要先看看这些数据是否需要过滤或者删除。不完全数据、重复数据和不正确数据是不符合要求的主要数据。数据清理不同于问卷审查。输入后的数据清理通常由计算机完成,而不是手动完成。


1.4 数据可视化介绍

1.4.1 数据可视化发展史

数据可视化始于20世纪50年代,当时计算机图形学仍处于早期开发阶段,人们使用计算机制作第一个图形和图表。1987年,Maxine Brown和其他人撰写了美国国家科学基金会的一份报告,该报告极大地刺激和促进了数据可视化领域。本文重点介绍了新计算机可视化技术的必要性和重要性。随着计算机的发展,计算机的计算能力迅速提高。越来越多的大规模、复杂的数值模型被建立起来,产生了各种异常大的数据集。与此同时,人们使用显微镜和扫描仪等数据采集设备来生成大数据集,也使用能够存储文本、数值和多媒体信息的大型数据库来收集大量数据。随着数据量的增加,需要更先进的计算机图形技术和方法来处理和可视化这些数据集。

数据可视化最初是指科学计算中的可视化:即在科学和工程实践中使用计算机建模和仿真。随着时代的发展,人们越来越关注视觉数据,包括行政、金融、商业、数字媒体等大型数据集。

从那时起,数据可视化已经成为一个不断发展的概念,其边界越来越大。所以当我们定义它时,最好是更宽泛。数据可视化是一种相对先进的技术,允许用户使用图形,用户界面,计算机视觉和图像处理。通过表面、立体、属性和动画建模、表达和显示、数据的直观解释。

1.4.2 数据可视化研究概述

通过数据可视化,我们可以增强数据的呈现效果,让用户更直观地查看数据,从而发现大量数据中的稀有银。可视化具有广泛的应用范围,但主要涉及社会可视化、数据挖掘数据可视化、文本数据可视化、交通可视化、生物医学可视化、网络数据可视化等领域。通过卡片可视化模型,将数据可视化过程分为数据预处理、绘制、显示和交互三个阶段。

目前,高维数据已成为计算机领域的研究热点。这里的高维数据意味着每个样本数据包含超过四维的空间特征。然而,人们对数据的理解主要集中在低维空间的表示上。如果只分析高维数据的抽象数据值,就很难获得有用的信息。与高维数据仿真相比,低维空间可视化技术更直观、简单。此外,高维空间元素比低维空间元素更为复杂,更容易在人们的分析中引起混淆。我们可以将高维数据的信息映射到二维或三维空间,这有助于高维数据与低维数据的交互,有助于数据分类和聚类。

分层数据是分层的,或分层的。层次数据可视化主要有两种方法:树图和节点链接图。树形图通过一系列嵌套的块和环显示分层数据。

网络数据是一个更*但更复杂的网络。

随着大数据时代的到来,数据可视化也应运而生。在大数据分析中,可视化分析是必不可少的重要工具和手段。只有真正理解可视化概念的本质,才能更好地研究和应用数据可视化,以获得数据背后的隐藏值。

2 数据采集(爬虫)技术

2.1 采集需求

本次采集的网站是智联招聘,需要获取其中的一些职位的信息,来完成后面的数据可视化部分,需要获取的信息包括但不限于:每个职位独有的ID,职位所在的城市,职位薪资,职位福利,职位类型,职位要求的最低学历,职位标签,职位要求的工作经验。

2.2 爬虫设计流程



v2-397b99de9bb749c7e357f04fe9e7643c_b.jpg


图1 爬虫设计流程图

2.3 采集网站分析

我们在网站上搜索智联招聘,进入后,搜索相关职位,以”java“为例,搜索”java“,在搜索结果出来之后,右击去查看网页的源代码,效果如图1所示:



v2-ccc61b586abef2eb0cdfccb68058399a_b.jpg


图2 源代码效果图

仔细寻找发现并没有我们所需要的数据,表明数据不是从原网页中传递过来的,所以我们所需要的数据应该是从其他的请求传递过来的,我们按下F12,进入开发者模式,点击Network-->点击XHR-->点击如图2所示的requests-->在response中可以看到我们需要的数据就在这里。

v2-186008c6b0c055c4f083204082841d9f_b.jpg

图3 寻找数据来源

我们看一些这里服务器返回的数据的格式,是一个json的类型,那就很好解析了。

2.4 采集代码实现

现在就开始正式的构造请求,来用代码模拟客户端向服务器发送请求数据,我们需要构造请求头和相关参数来请求网页,相关代码如下图:


v2-079dd210b2db134745d9dce33c94e65d_b.jpg


图4 请求模块代码图

上图是请求模块,我们打印输出一下请求到的数据,如下图所示:



v2-4b2d37d5006377c9b90a84d39cf0c2a2_b.jpg


图5 请求到的数据

看到的数据和在浏览器上的数据相同,那么接下来就是对数据进行解析了,由于数据为json的格式,解析起来也是很方便的,如下图是解析模块的代码:



v2-a03d9ab9402b2493fd0861bf091dfe55_b.jpg


图6 解析模块代码图

解析后,我们将得到的单条数据构造成字典类型(dict),多条字典组成列表,方便之后的存储,如下图:


v2-fc6b2dd1e015e72a5239b1d105a7c948_b.jpg


图7 存储的相关格式

解析数据完成后,要将解析的数据存储起来,为了方便后面做数据可视化的时候调用它,我们将数据库放在了阿里云服务器上。而存储的方式也有很多种,可以存储成文件,包括csv格式,txt格式等,也可以存储到数据库中。而且流行的数据库类型有很多,大致的分为两类:关系型数据库和非关系型数据库,关系型数据库(Relational database)有MySQL、Oracle2、DB2等;非关系型数据库(NoSQL)包括MongoDB、Redis、Flare等。本脚本存储使用的是关系型数据库中的MySQL,建立一个MySQL数据表来存储数据,并根据爬取的信息来设置字段,如下图所示是创建数据库表格时的DDL(数据库模式定义语言):



v2-02927b6ac2b2f6a151228bc2e293ab84_b.jpg


图8 创建数据库表格时的DDL

在建好数据表后,我们使用Python,来连接数据库,并将解析后的数据存储到数据表中,我们使用批量存储的方法,每次存储1000条数据,避免频繁地连接数据库,造成数据库堵塞,存储模块部分代码如图:


v2-b0de9022dd437bd7e8fbce18c117a014_b.jpg


图9 数据存储模代码图块

3 数据清洗部分

数据清洗部分,主要是使用代码清洗MySQL数据库中的一些字段,包括salary(薪资)字段,city(城市)字段。

例如,在salary字段中,大部分类似如5K-10K的样式,也有一些像薪资面议无法判断薪资范围的,我们需要将这些“脏”数据清除或者转换成相同且容易处理的格式

如图是数据清洗的部分代码:

v2-acd16e12c7d2aeedd468f4b710990a6e_b.jpg


图10 数据清洗的部分代码

4 数据可视化技术

4.1 可视化技术实现

可视化技术的实现主要是分为三个部分,分别是:字段确定,数据获取,可视化实现。

4.1.1 字段确定

数据清洗完成之后,要进行的就是数据可视化,在此之前我们先看一下阿里云数据库中采集到的职位数据,如下图所示:


v2-c5101eaf408f39f0d897e00ee5689c24_b.jpg


图11 职位数据

采集到的数据有很多:职位名称(jobname),职位专属ID(job_id),招聘职位的公司所在的城市(city)等等。但是,并不是所有的数据都进行可视化操作,所以在这之前我们需要确定哪些字段来进行数据可视化分析,可视化字段包括:薪资,城市,学历要求,工作性质,工作经验。

4.1.2 数据获取

其实有很多的工具都可以来做数据可视化,不过我们将使用的是应用最广的matplotlib库,来对java的职位数据进行可视化。

我们创建一个新的Python文件来进行可视化操作,由于matplotlib库在做表格的时候默认不显示中文,我们通过matplotlib.rcParams["font.family"] = \'simhei\'来设置中文显示。

在进行可视化时,我们通过使用pymysql库链接数据库获取相关数据,写一个select_one函数将代码进行包装,以便之后更好的复用它,相关代码如下图所示:


v2-133fcf4ffb06bafae8de7ce54117365a_b.jpg


图12 从数据库获取数据的相关代码

操作数据库的相关代码可以复用,但是SQL语句需要重写,下面介绍不同可视化的sql语句的写法。

图13 SQL语句之获取薪资数据


4.1.2.1 获取城市数据

在数据库中,对应薪资的字段信息的字段是:city。city表示的是公司的具体地址信息。我们列举12个常见的城市作为统计关键字,使用SQL语句中的like关键字进行匹配,获取并统计city字段中各类城市出现的次数。如图是获取城市分布数据的SQL语句:



v2-b22f3af255deb13c371b875b4df2ea48_b.jpg


图14 SQL语句之获取城市分布数据

4.1.2.2 获取薪资数据

在数据库中,对应薪资的字段信息的字段是:salary和salary_code。salary表示的是具体的薪资数据;salary_code是进行数据清洗之后,所分配的薪资范围,例如:510表示薪资范围在5k到10k;1015表示薪资范围在10k到15k;以此类推。

我们需要通过SQL查询语句获取并统计salary_code字段中各类薪资出现的次数。如图是获取薪资数据的SQL语句:



v2-80f0a0e58407eee052e914fedfbffe56_b.jpg


4.1.2.3 获取学历数据

在数据库中,对应薪资的字段信息的字段是:edu_level_name和edu_level_code。edu_level_name表示的是学历信息;edu_level_code是学历信息标号,方便提取。本科学历对应标号4,硕士学历对应标号3等等。

我们需要通过SQL查询语句获取并统计edu_level_code字段中各类学历出现的次数。如图是获取学历数据的SQL语句:



v2-88743fa847006dc3e61a0e1938372836_b.jpg


图15 SQL语句之获取学历数据



4.1.2.4 获取工作性质数据

在数据库中,对应薪资的字段信息的字段是:emplType。emplType字段是工作性质,包括全职、校园、实习、兼职或临时。使用SQL来统计出各类工作性质的数量,如下图所示:


v2-167a97fb9a852d1d6b3b853bd2647443_b.jpg


图16 SQL语句之获取工作性质数据


4.1.2.5 获取工作经验数据

在数据库中,对应薪资的字段信息的字段是:workingExp_name,workingExp_code。workingExp_name字段是工作经验,包括不限、无经验、1年以下、1至3年、3至5年、5至10年、10年以上。workingExp_code字段是工作经验标号,不限用-1标识、无经验用0标识、1年以下用1标识,1至3年用103标识,以此类推。使用SQL语句统计出各类工作经验的数量,如下图所示:



v2-6055ba15eb05aa6c6799517efa792a76_b.jpg


图17 SQL语句之获取工作经验数据

4.1.3 可视化实现

获取到相关数据之后,下面就是最后一步的可视化实现,由于从数据库获取到的数据是字典类型(dict),我们先用x来等于字典全部的键,用y来等于字典全部的值。用python做可视化很简单,使用plt.bar(x,y),就能得到一个直方图,通过show()将图展示出来,并使用savefig()将图存储成图片。如下图是可视化的部分代码:


v2-21475ff08cd90b2602473822e5950b33_b.jpg


图18 可视化部分代码


4.2 数据展示与分析

可视化代码完成并运行后,会得到五张图片,下面展示这五张图片并进行分析。

4.2.1 薪资待遇

可视化薪资效果如下:


v2-6fff91a1cdcb0847162f5db552c85031_b.jpg


图19 薪资待遇可视化图


根据上图可以看到java的主要薪资分布在5k到15k之间,薪资待遇比一般的传统行业要高一点,薪资10k以上职位大概占总职位的50%,做java想月薪过万还是很有可行性的。

4.2.2 城市地区分布

由于城市太多,可视化之后看起来很不方便,选取了主流的12个城市,效果如图所示:


v2-abae7a360fef282b14534a53249f2948_b.jpg


图20 职位城市分布情况

可以看到,java职位最多地还是北京其次是上海,再后面就是深圳,职位主要还是分布在一线城市,二线城市也有一定的岗位,但是相对来说还是少一点。

4.2.3 学历要求

按学历分包括:博士,硕士,本科,大专以及大专以下,由于有些岗位并没有填要求或者没有要求,就放在不限类中,效果如下图所示:



v2-68cd1cb4d5e689ac8314db4e0e010cd1_b.jpg


图21 学历要求可视化图

学历要求主要是本科以上、和大专以上,各占一半左右,相对来说,做java学历要求并不是很高,本科学历已经满足大部分需求。

4.2.4 工作性质

工作性质如下图所示,包括全职、校园、实习、兼职或者临时。


v2-84f58eabc937aa29b78807e4e879fb5e_b.jpg


图22 工作性质可视化图

根据数据的可视化可以看到,公司在招聘java相关职位的时候,更多地希望是全职,校园招聘和实习相对来说少的多。

4.2.5 工作经验


v2-7753389014ab22109ea406e97dd8b7e5_b.jpg


图23 工作经验可视化图

就java 职位而言,有不少公司在招聘的时候并没有设定经验要求,而设定经验要求的公司,更多是想招聘1至3年和3至5年的应聘者,而无经验或者1年以下的需求就很少,所以刚毕业应届生可能在找工作的并不是很轻松,但是还是有机会的。