「这是我参与11月更文挑战的第9天,活动详情查看:2021最后一次更文挑战」
一、需求分析
1.1 深圳大数据招聘信息分析
数据源: 智联招聘 网站: sou.zhaopin.com 题目: 深圳大数据招聘分析
1.2 要求
- 爬取前5页
- 将数据保存到sqlite数据库中
- 按企业性质(民营、上市公司、国企等)汇总做饼图
- 按学历汇总做柱形图
- 详情页对专业技能做词云图
- 可自由发挥分析展示其他信息
- 可以通过网页访问结果 参考步骤 数据获取 以深圳为例:在智联招聘网站上选择深圳->在搜素栏输入大数据->点击搜索
二、软件设计
表3-1 设计技术表
| 任务 | 采用的方法 |
|---|---|
| 数据的获取 | Scrapy爬虫框架,json |
| 数据的存储 | Python的sqlite轻量级关系型数据库 |
| 数据的处理 | Python的pandas库 |
| 数据的分析展示 | Python的pyecharts可视化库 |
| python服务器框 | Flask |
2.1 爬虫设计:
- 所选技术栈: 表3-2 实训爬虫技术表
| 技术 | 概念 |
|---|---|
| Scrapy | 数据的获取 |
| Json | 对Response返回的数据进行筛选 |
| SQLite | 进行数据的存储 |
-
软件框架: 简介: Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。其最初是为了页面抓取(更确切来说,网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如:Amazon Associates Web Services) 或者通用的网络爬虫。
图3-1 scrapy工程目录树图 -
分析思路
- 明确目标 我们打算抓取sou.zhaopin.com/招聘网的深圳大数据行业… 网站里的所有职位的名称、月薪、公司名称、学历、所需工作经验、详情页要求等
- 制作爬虫,数据的筛选 我们具体分析出数据的来源,如说智联招聘是一个前后端分离的网站,通过用户点击,返回特定的json文件从而渲染网站,展示给用户。因此我们需要通过json分析特定URL返回的js文件。用键值提取关键数据; 由于详情页的数据获取需要页面的跳转,且数据是一次性渲染展示,可通过Scrapy自带的Xpath选择器提取关键数据。
- 保存数据 对数据的存储,我定义了pipelines管道,通过管道,将数据存储进轻量关系型数据库Sqlite。
-
爬取的url及字段内容等 从图3-2、图3-3中,通过谷歌浏览器分网站分析工具了解,网站与用户的交互的其大部分数据来源与一个json文件
图3-2 网页数据传输图
图3-3 网页返回的json文件数据图
由此可得,该URL就是目标,由于我们是要爬取多页的数据,因此我将前三页的url对比分析
表3-3 前三页URL
| 页数 | url |
|---|---|
| 1 | fe-api.zhaopin.com/c/i/sou?pag… |
| 2 | fe-api.zhaopin.com/c/i/sou?sta… |
| 3 | fe-api.zhaopin.com/c/i/sou?sta… |
| 表中可得,从第二页开始URL的变化就在start=90、180,每一页都递增数为90 | |
| 总结得出,变换start的数值可得到不同的页面。 |
2.2 数据存取:数据表设计、相关SQL语句等
1.数据表的设计 表3-4 数据表字段的设计
| 字段 | 标题 | 公司 | 公司类型 | 薪酬 | 经验 | 学历 |
|---|---|---|---|---|---|---|
| 类型 | varchar | varchar | varchar | varchar | varchar | varchar |
| 字段 | 详细链接 | 工作地址 | 福利 | 技能 | 要求 | |
| 类型 | varchar | varchar | varchar | varchar | varchar | |
| 2.相关SQL语句 |
insert_sql = 'insert into bigDataZL values' \
' ("{}","{}", "{}","{}","{}", "{}","{}","{}", "{}","{}","{}")'.format(
item['title'],item['company'],item['company_type'],
item['salary'],item['experience'],item['education'],
item['detail_url'],item['address'],item['welfare'],
item['skill'],item['claim']
)
createSql = "create table bigDataZL(" \
"标题 varchar(100)," \
"公司 varchar(100)," \
"公司类型 varchar(100)," \
"薪酬 varchar(100)," \
"经验 varchar(100)," \
"学历 varchar(100)," \
"详细链接 varchar(100) primary key ," \
"工作地址 varchar(100)," \
"福利 varchar(100)," \
"技能 varchar(100)," \
"要求 varchar(100))"
2.3 数据分析:数据处理流程等
查重处理:以详情链接字段为主键。 数据的读取:pandas读取数据表转为DataFrame数据类型
- 企业性质汇总数据分析 按企业性质分组统计,得到企业性质的统计值
- 学历汇总数据分析 按学历分组统计,得到学历的统计值
- 详情页对专业技能做词云图数据分析
详细页的岗位要求需要我们对关键字的提取,其中不乏一些无用信息,也需要我们剔除掉,如图3-6:
图3-7的处理,首先为定义一个专业词库列表,并且让每一条数据都只提取不重复的关键字,且定义键为单词,值为1的字典存进列表中,再将列表转为Pandas的DataFrame类型统计单词出现的频率
- 薪酬汇总做数据分析 为了更好地进行分析,我们要对薪资做一个预处理。由于其分布比较散乱,很多值的个数只有1。为了不造成过大的误差,根据其分布情况,可以将它分成【5k 以下、5k-10k、10k-20k、20k-30k、30k-40k、40k 以上】,为了更加方便我们分析,取每个薪资范围的中位数,并划分到我们指定的范围内。
- 所需经验数据分析 按学历列分组统计,得到学历的统计值
2.4 结果展示:所选择的Web框架、网页展示的方案设计等
- 选择的Web框架: Flask是一个使用Python编写的轻量级 Web 应用框架。其WSGI工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 Flask使用 BSD 授权。 Flask也被称为“microframework”,因为它使用简单的核心,用 extension 增加其他功能。Flask没有默认使用的数据库、窗体验证工具。
- 网页展示的方案设计
通过用户点击从而展示不同的分析内容,如图
三、测试报告
3.1数据采集
3.2可视化图表