目 录
摘 要 I
ABSTRACT II
第 1 章 项目引言 1
1.1项目背景 1
1.2国内研究现状 1
1.3研究内容 2
1.4论文结构 2
第 2 章 项目框架 3
2.1HADOOP 框架 3
2.2HBASE 框架 4
2.3HIVE 框架 5
2.4SPARK 框架 6
第 3 章 项目设计 7
3.1数据采集 7
3.1.1爬虫简介 7
3.1.2爬虫设计 7
3.2数据清洗 10
3.1.1 数据清洗简介 10
3.2.2 数据清洗设计 11
3.3数据存储 11
3.3.1数据存储简介 11
3.3.2数据存储设计 12
3.4预测算法 12
3.1.1 预测算法简介 12
3.4.2 预测算法设计 13
3.5分词算法 13
3.5.1分词简介 13
3.5.2分词设计 14
3.6数据呈现 15
3.6.1数据呈现简介 15
3.6.2数据呈现设计 15
第 4 章 项目实现 16
4.1数据采集 16
4.1.1爬虫实现 16
4.1.2爬取结果 18
4.2数据清洗 19
4.2.1数据清洗实现 19
4.2.2数据清洗结果 20
4.3数据存储 22
4.3.1数据存储实现 22
4.3.2数据存储结果 24
4.4预测算法 24
4.4.1预测算法实现 24
4.4.2预测算法结果 26
4.5分词算法 26
4.5.1分词实现 26
4.5.2分词结果 27
4.6数据呈现 28
4.6.1数据呈现实现 28
4.6.2数据呈现结果 29
第 5 章 项目结论 31
参考文献 31
致 谢 33
本系统主要完成的是基于大数据的地域职位需求和薪资分析的设计和实现,主要实现了以下几个功能,分别是数据爬取、数据清洗、数据存储、预测薪资、分词统计和数据呈现等功能。数据爬取采用 Python 语言,主要使用的模块有 requests、bs4 和 re 数据清洗系统使用 Hive 框架,代码放在.hql 的脚本中。数据存储系统使用 Hbase 框架,使用
Java 语言先从 Hive 读取数据,然后把读取到的数据存储到 Hbase 上。预测薪资算法采用 Java 语言实现,分词统计采用 Spark 框架,然后使用 Java 语言实现。数据呈现是使用 Java Web 搭建网站,后台使用 SSM 框架调用预测算法和分词算法,前端使用 EChars 呈现出使用预测算法和分词算法得到的结果。
1.3研究内容
首先需要选择合适的招聘网站进行研究。由于 Robots 协议和网站爬虫的限制,选取猎聘网和前程无忧网最为研究对象。通过爬虫爬取岗位信息,从互联网上抓取有价值的信息。由于 Python 语言爬取网站具备简单、高效的特点,因此选择 Python 语言进行数据爬取。通过 Hive 进行数据清洗,Hive 是基于 Hadoop 的一个数据仓库工具,提供简单的 SQL 查询功能,可以将 SQL 语句转换为 MapReduce 任务进行运行。将爬取得到的数据存储到 Hbase 上,Hbase 是一个分布式的、面向列、基于 Hadoop 存储的数据库。使用 Spark 进行技能分词统计,Spark 的源生语言是 Scala,它使用 Scala 作为其应用程序框架。使用 ECharts 数据可视化,提供数据可视化图表。使用 Java Web 搭建网站,同时利用 SSM 框架,简化系统结构的设计。最后利用 Shell 脚本,将整个系统架构搭建起来。
1.4论文结构
本文根据猎聘网站和前程无忧网站,发布的网络招聘信息来研究岗位的薪资水平和技能要求。先通过关键字搜索,搜索到有关关键字的职位,进而选择爬虫进行爬取这些岗位的职位名称、公司、薪资和技能要求。利用 Hive 清洗掉不含关键字的职位,将数据存储到 Hbase 当中。利用 Python 语言对薪资进行数据分析,利用线性规划,预测岗位的工资。利用 Spark 分词统计,统计出岗位的技能要求有那些。接下来利用 Java Web 搭建网站,使用 Java 连接 Hbase 从而读取数据,以及读取 Python 对薪水分析和预测的结果和 Spark 分词统计后的结果,EChars 呈现出这些数据。
第一章:介绍项目研究的内容、目的和意义。查阅文献,然后对本课题的文献进行综合评述。
第二章:项目框架,对使用的 Hadoop、Hive、Spark、Hbase、Java Web 框架进行介绍和搭建。
第三章:项目设计,对使用的爬虫、数据清洗、数据存储、数据处理算法进行介绍和设计。
第四章:项目实现,实现爬虫、数据清洗、数据存储、数据处理和项目网站。第五章:对全文进行总结,简述怎么做的,项目的有缺点和自己的工作展望。
from liepinwang.liepin import Liepin
from qianchengwuyouwang.qianchengwuyou import Qianchengwuyou
import time
def main():
# 从文件中读取要爬取的职位
with open("position.txt", "r") as f:
position = f.read()
# 要保存的信息,文件路径
positionFilePath = position + ".txt"
# 记录下搜索记录 如果记录存在则忽略
with open("positionHistory.txt", "r") as f:
positionHistory = f.read()
if positionHistory.find(position) == -1:
with open("positionHistory.txt", "w") as f:
f.write(positionHistory + "," + position)
lp = Liepin()
# 从文件中读取要爬取的城市列表
with open("./liepinwang/citys.txt", "r") as f:
citysLiepinwang = f.read()
citysLiepinwang = citysLiepinwang.strip().split(",")
# 创建类对象
qcwy = Qianchengwuyou()
# 从文件中读取要爬取的城市列表
with open("./qianchengwuyouwang/citys.txt", "r") as f:
citysQianchengwuyouwang = f.read()
citysQianchengwuyouwang = citysQianchengwuyouwang.strip().split(",")
#读取城市的键和值 爬取的城市数量都是一样的 所以选择以谁为循环都是可以的
for iCity in range(len(citysQianchengwuyouwang)):
#爬取前程无忧网
cityListQianchengwuyouwang = citysQianchengwuyouwang[iCity].split(":")
qcwy.run(qcwy, position, positionFilePath, cityListQianchengwuyouwang[0], cityListQianchengwuyouwang[1])
print("前程无忧网","关键字",position,cityListQianchengwuyouwang[0],"爬取完毕")
#睡眠
time.sleep(10)
#爬取猎聘网
cityListLiepinwang = citysLiepinwang[iCity].split(":")
lp.run(lp,position,positionFilePath,cityListLiepinwang[0], cityListLiepinwang[1])
print("猎聘网", "关键字", position, cityListLiepinwang[0], "爬取完毕")
#睡眠
time.sleep(10)
if __name__ == '__main__':
main()