项目网址:http://47.242.82.87:8089/
项目效果图:
全国的岗位供需
- 项目说明
首先着眼于当下严峻的就业形势,我们需要知道各个行业的供需关系以及薪酬范围.大到全国薪酬,小到城市平均薪酬,细致到每个公司历史招聘数据都要保留并加以分析
- 技术栈
爬虫:webmagic框架+selenium爬取动态页面
Springboos数据交互
Dom4j解析数据
IO流递归读取文件
Linux shell命令
Html.css.js
- 流程
3.1首先使用爬虫实现动态页面的数据捕获
3.2 输出流将元数据保存成文件
3.3读取数据文件
3.4 数据结构化
3.5 数据持久化
3.6 搭建springboot进行数据交互
3.7 将前面的步骤抽象优化,并交由springboot管理
3.8 linux部署
4.实现
代码很全,具体参考源码
5.遇到的问题总结
1.webmagic爬取动态加密页面,需要耗费大量时间研究解密策略,直接使用selenium获取动态数据
2.反扒机制封IP,购买ip池,当检测到异常页面时自动更换IP,继续当前爬取任务
3.webmagic爬虫监控,单纯maven项目无法解决依赖问题,直接使用springboos管理依赖就可以监控爬虫
5.递归获取文件,先递归获取所有文件路径全名存储,然后在遍历集合进行IO读取
6.数据解析,使用dom4j的时候,无法解析双标签中存在的单标签,所以需要熟悉数据结构,将单标签处理删除掉
7.数据结构化,数据结构化的时候,需要创建实体类进行管理,实体类的属性需要匹配相应字段,不呢全部为string,例如薪酬字段是2k-3k,200元/天 这种数据,就需要正则替换.并且调用integer.pasint进行转换包装.其次想要数据持久化,需要考虑表结构的问题,留出富裕属性,增加项目的扩展性,避免新的需求出现时需要更改全部代码
8.脏数据处理,当出现重复数据的时候,合理使用hashset去重属性直接去重而不是到数据库中处理.如果存在特殊字符,使用黑名单+白名单进行数据过滤
9.数据持久化,持久化的时候,需要考虑数据量,查询效率,字段名称是否合理等问题
10.manager管理全流程,当你要把全部操作都交给springboot管理时,会出现很多问题,这时候就要考虑合理使用try catch,什么时候抛异常,什么时候忽略异常,并且要考虑管理时存在的交互问题
6.待解决的bug
1.mybatis的int类型注入问题,因为要在薪酬中匹配范围,所以要传入int类型的值,但是总是一传入就报错,也不知道是哪里的问题,int和integer都试过了都不可以
2.selenium的linux部署问题,selenium的linux 环境配置不太友好,命令行模式并不能打开google chrome,而且system,config配置中显然无法配置selenium的环境变量
3.webmagic的多个问题:1.pipline的数据下载问题2.自定义pipline类的问题3.指定不能访问更多分页的api设计技术问题,屏蔽掉继续爬取数据的来源4.多线程异步爬取数据时数据安全问题
7.待优化的地方
1.SpiderManage的源码暴露在外,并且很简陋,没有进行解耦操作
2.数据量过大会让动态渲染的过程卡顿,为了提升用户体验应该进行分页操作,而分页操作的配置又很麻烦,这就是在项目初始没有想好架构的问题,导致扩展性差,想要添加功能就要改变大部分源码.
3.处理数据时对性能过高的开销,因为整个过程中为了实现解耦,创建了多个list和set集合,并且没有交由spring管理,导致处理数据时占用内存稍高
4.表架构设计时没有考虑分区,每日相同数据无法分辨,需要添加字段进行分辨
8.扩展计划
1.增加数据可视化功能,对地点-工作岗位-工资薪酬-供应需求4个维度进行可视化
2.增加公司维度数据分析,记录每个公司历史数据
3.增加公司权重分析,增加新的爬虫对数据中的公司进行更全面的数据获取,并且为其添加标签,以及权重
4.增加boss爬虫的第二维度数据获取
5.完善webmagic框架,进行扩展监控,和自定义pipline