本书通过实践操作介绍大数据爬取、清洗与可视化的具体实施方案,共10章,包括大数据爬取、清洗与可视化概述,爬虫概述,Requests库,BeautifulSoup爬虫,自动化测试工具Selenium,中型爬虫框架Scrapy,数据存储,数据清洗,Matplotlib可视化,Pyecharts可视化。书中的案例均经过实践验证,可以帮助读者深入理解数据信息在大数据行业中的重要应用。为方便复习和自学,各章均配备丰富的习题。本书可作为高等院校大数据相关专业的教材,也可作为有关专业技术人员的培训教材,同时可作为大数据分析爱好者及从事网络数据安全管理工作人员的参考书。
前言
本书是学习大数据获取与分析的入门教材,从大数据信息的爬取开始,逐步讲述在大数据环境下,对海量信息进行爬取、预处理操作与管理的全过程。全书立足于实践与工程能力的培养,以关键技术和流行应用作为引导展开全书内容,通过“做中学”与“学中做”相结合的实践过程,从技术简介开始,进而进行关键技术分析与应用案例解析,总结涉及的Python方法和第三方库,最后给出具体功能分析和代码实现过程。本书重点介绍大数据爬取、清洗与可视化的具体实施方案,程序设计采用Python3.x语言,由多年讲授大数据方向相关课程、经验丰富的一线教师编写。全书内容循序渐进,按照初学者学习思路编排,条理性强,语言通俗,容易理解。全书共10章,包括大数据爬取、清洗与可视化概述,爬虫概述,Requests库,BeautifulSoup爬虫,自动化测试工具Selenium,中型爬虫框架Scrapy,数据存储,数据清洗,Matplotlib可视化,Pyecharts可视化。为方便复习和自学,各章均配备丰富的习题。本书可作为高等院校大数据相关专业的教材,也可作为有关专业技术人员的培训教材,同时可作为大数据分析爱好者及从事网络数据安全管理工作人员的参考书。本书以实践操作为主,涉及的待爬取数据仅供学习使用,禁止在其他场合传播。数据爬取的权限需参考待爬取网站的Robots协议。本书由贾宁担任主编并统稿。具体编写分工如下:第1~7章由贾宁编写,第8~10章由郑纯军编写。本书配有电子课件、程序源代码、习题解答等教学资源,读者可以登录华信教育资源网(www.hxedu.com.cn)注册后免费下载。本书在编写过程中,参考了许多国内外的著作和文献,在此对著作者致以由衷的谢意。本书的编写得到了很多人的帮助和支持,在此对他们表示衷心的感谢。同时,感谢同事及学生对本书提出的意见和建议。限于作者水平,书中错误和缺点在所难免,欢迎广大读者提出宝贵意见和建议,我们不胜感激。
作者
2021年2月
贾宁,大连东软信息学院副教授,多年来一直从事大数据技术及应用、人工智能、深度学习/云计算等方面的科研和教学工作。
第1章 大数据爬取、清洗与可视化概述 1
1.1 爬虫概述 1
1.1.1 爬虫简介 1
1.1.2 常见爬虫分类和工具 2
1.2 数据清洗概述 2
1.2.1 数据清洗简介 2
1.2.2 常见数据清洗工具 3
1.3 可视化技术概述 3
1.3.1 数据可视化概述 3
1.3.2 常见可视化工具 5
1.4 相关网络技术简介 5
1.4.1 HTTP 5
1.4.2 HTML 7
1.4.3 XML 10
1.4.4 JSON 13
1.4.5 JavaScript 14
1.4.6 正则表达式 17
1.5 Python开发环境配置 21
1.5.1 在Windows中安装Python 22
1.5.2 在Linux中安装Python 24
1.5.3 Python集成开发环境 26
1.5.4 Python第三方库管理 33
本章小结 35
习题 35
第2章 爬虫概述 36
2.1 爬虫基础概述 36
2.1.1 爬虫概念 36
2.1.2 爬虫基本原理 37
2.2 爬虫规范 39
2.2.1 爬虫尺寸 39
2.2.2 Robots协议 39
2.3 爬虫通用结构 43
2.3.1 爬虫通用结构简介 43
2.3.2 爬虫基本工作流程 43
2.3.3 异常处理机制 44
2.4 爬虫技术 46
2.4.1 urllib 3库 46
2.4.2 网页内容查看 51
2.4.3 XPath 56
本章小结 60
习题 60
第3章 Requests库 62
3.1 Requests库简介与安装 62
3.1.1 Requests库简介 62
3.1.2 Requests库安装 62
3.2 Requests库基本使用 63
3.2.1 Requests库的主要方法 63
3.2.2 发送基本请求 66
3.2.3 响应内容 66
3.2.4 访问异常处理方案 67
3.3 Requests库高级用法 69
3.3.1 定制请求头部 69
3.3.2 设置超时 70
3.3.3 传递参数 70
3.3.4 解析JSON 72
3.4 代理设置 72
3.5 模拟登录 73
3.5.1 保持登录机制 73
3.5.2 使用Cookies登录网站 74
3.5.3 登录流程分析 77
3.5.4 Requests会话对象 78
3.5.5 登录网站实例 80
3.6 资源下载 80
3.7 Requests库应用实例 82
3.7.1 具体功能分析 82
3.7.2 具体代码实现 85
本章小结 86
习题 87
第4章 BeautifulSoup爬虫 88
4.1 BeautifulSoup简介与安装 88
4.1.1 BeautifulSoup简介 88
4.1.2 BeautifulSoup4安装方法 88
4.1.3 BeautifulSoup解析器 90
4.1.4 BeautifulSoup初探 92
4.2 BeautifulSoup对象类型 93
4.2.1 Tag 93
4.2.2 NavigableString 95
4.2.3 BeautifulSoup 96
4.2.4 Comment 96
4.3 BeautifulSoup的遍历与搜索 97
4.3.1 遍历文档树 97
4.3.2 搜索文档树 105
4.4 BeautifulSoup应用实例 110
4.4.1 基于BeautifulSoup的独立数据爬取 110
4.4.2 融合正则表达式的数据爬取 112
本章小结 114
习题 115
第5章 自动化测试工具Selenium 116
5.1 Selenium简介与安装 116
5.1.1 Selenium简介 116
5.1.2 Selenium安装 116
5.2 Selenium基本用法 120
5.2.1 声明浏览器对象 120
5.2.2 访问页面 120
5.3 元素 121
5.3.1 定位元素 121
5.3.2 交互操作元素 126
5.3.3 动作链 127
5.3.4 获取元素属性 128
5.4 Selenium高级操作 129
5.4.1 执行JavaScript 129
5.4.2 前进、后退和刷新操作 130
5.4.3 等待操作 130
5.4.4 处理Cookies 132
5.4.5 处理异常 133
5.5 Selenium实例 134
5.5.1 具体功能分析 134
5.5.2 具体代码实现 135
本章小结 136
习题 137
第6章 中型爬虫框架Scrapy 138
6.1 Scrapy框架简介与安装 138
6.1.1 Scrapy运行机制 138
6.1.2 Scrapy框架简介 139
6.1.3 Scrapy安装 140
6.2 Scrapy命令行工具 141
6.2.1 全局命令 142
6.2.2 Project-only命令 144
6.3 选择器 146
6.3.1 选择器简介 147
6.3.2 选择器基础 147
6.3.3 结合正则表达式 151
6.3.4 嵌套选择器 152
6.4 Scrapy项目开发 152
6.4.1 新建项目 153
6.4.2 定义Items 153
6.4.3 制作爬虫 154
6.4.4 爬取数据 156
6.4.5 使用Items 160
6.5 Item Pipeline 161
6.5.1 Item Pipeline简介 161
6.5.2 Item Pipeline应用 162
6.6 中间件 164
6.6.1 下载器中间件 164
6.6.2 爬虫中间件 168
6.7 Scrapy实例 171
6.7.1 具体功能分析 171
6.7.2 具体代码实现 172
本章小结 174
习题 174
第7章 数据存储 176
7.1 数据存储简介 176
7.1.1 现代数据存储的挑战 176
7.1.2 常用工具 177
7.2 文本文件存储 179
7.2.1 文本数据的读写 179
7.2.2 CSV数据的读写 182
7.2.3 Excel数据的读写 187
7.2.4 JSON对象的读写 193
7.3 MongoDB数据库 197
7.3.1 MongoDB简介 197
7.3.2 MongoDB安装 198
7.3.3 MongoDB数据库操作 202
7.4 数据存储实例 207
7.4.1 具体功能分析 207
7.4.2 具体代码实现 208
本章小结 210
习题 210
第8章 数据清洗 212
8.1 数据清洗概述 212
8.1.1 数据清洗原理 212
8.1.2 主要数据类型 212
8.1.3 常用工具 213
8.2 数据清洗方法 215
8.2.1 重复数据处理 215
8.2.2 缺失数据处理 218
8.2.3 异常数据处理 224
8.2.4 格式内容清洗 226
8.2.5 逻辑错误清洗 227
8.3 数据规整 228
8.3.1 字段拆分 228
8.3.2 数据分组 229
8.3.3 数据聚合 232
8.3.4 数据分割 236
8.3.5 数据合并 238
8.4 数据清洗实例 244
8.4.1 具体功能分析 244
8.4.2 具体代码实现 245
本章小结 247
习题 247
第9章 Matplotlib可视化 249
9.1 Matplotlib简介与安装 249
9.1.1 Matplotlib简介 249
9.1.2 Matplotlib安装 250
9.2 基础语法和常用设置 251
9.2.1 绘图流程 251
9.2.2 布局设置 252
9.2.3 画布创建 255
9.2.4 参数设置 256
9.3 基础图形绘制 258
9.3.1 折线图 258
9.3.2 直方图 259
9.3.3 饼状图 260
9.3.4 箱形图 262
9.3.5 散点图 264
9.3.6 三维图 266
本章小结 269
习题 270
第10章 Pyecharts可视化 271
10.1 Pyecharts简介与安装 271
10.1.1 Pyecharts简介 271
10.1.2 Pyecharts安装 272
10.2 公共属性设置 272
10.2.1 全局配置项 272
10.2.2 系列配置项 275
10.3 二维图形绘制 276
10.3.1 柱状图 276
10.3.2 折线图 281
10.3.3 面积图 284
10.3.4 涟漪散点图 285
10.3.5 饼状图 286
10.3.6 漏斗图 290
10.4 三维图形绘制 292
10.4.1 三维柱状图 292
10.4.2 三维散点图 294
10.4.3 三维地图 296
10.5 Pyecharts实例 296
10.5.1 具体功能分析 296
10.5.2 具体代码实现 297
本章小结 298
习题 299
参考文献 300
第1章大数据爬取、清洗与可视化概述
在Web2.0时代,各大应用都在不断地累积产生数据,丰富的数据来源使得互联网数据的组成结构产生了巨大的变革。如何有效地获取海量资源,并对其进行有效的整合和分析,是现今大数据行业研究的重要方向之一。在获取海量数据后,需要将数据转换或映射为格式匹配的数据流,以便数据可以顺利地用于后续处理,即实现数据清洗的过程。实际上,该过程允许通过工具便利和自动使用数据来进行进一步的活动。清洗后的数据可以使用可视化图形表示。数据的可视化使得理解数据和沟通变得更容易,在确定干净且有效数据实体之间的关系的基础上,进一步提高商业洞察力。
1.1爬虫概述
1.1.1爬虫简介网络爬虫(WebCrawler,简称爬虫),又称网络蜘蛛、网络蚂蚁、网络机器人等,在社区中也被称为网页追逐者。爬虫是一个自动爬取网页的程序,它为搜索引擎实现了从万维网上下载网页的功能,爬虫是搜索引擎的重要组成部分。爬虫的重要性主要体现在获取海量资源这个环节,这个环节是整条数据处理链路的起始,如果没有数据,后续的处理工作将无法正常完成。爬虫的应用起源于20世纪90年代的传统搜索引擎,爬虫用于爬取网络中的Web页面,再用搜索引擎进行索引和存储,从而为用户提供检索信息服务。在系统架构上,爬虫位于整个引擎的后台,而且对用户屏蔽,因此在很长的一段时期,用户没有发现爬虫的存在,从而限制了相应技术的发展。在针对爬虫的调研中发现,2004年以前,相关技术和应用的关注度几乎为0,但2005年以后,人们对爬虫的关注度逐渐上升。通过进一步研究发现,对爬虫技术的关注度排名靠前的领域是计算机软件及应用、互联网技术与自动化技术、新闻与传媒、贸易经济、图书情报与数字图书馆等,其中大部分侧重于爬虫技术的研究,其次是爬虫的研究领域,可以看出这些领域与爬虫技术之间存在大量的耦合和交叉。爬虫是一个实践性很强的技术本领,因此,爬虫技术的关注度也从另一个角度反映了爬虫数量的增长速度,除为数不多的主流互联网搜索引擎爬虫外,大部分运行的爬虫来自个人或者中小型企业单位。爬虫的普及得益于大量爬虫的开源包或底层技术开源包的出现,这些开源包使得开发一个具体应用的爬虫采集系统变得容易很多。但是,也正是由于这个原因,高度封装开源句的流行使得很少有人愿意深入了解其中涉及的关键技术,导致现有的爬虫在质量、性能、创新性上都受到很大的影响。深入分析产生这种现象的原因之后,我们发现其中存在技术因素和非技术因素,可以总结为以下几个方面。①低质量的爬虫不遵守Robots 协议。连接一个网站之后不检测robots.xt文件内容,也不解析文件中关于页面访问许可列表的规定。由于Robots协议是一个行业规范,忽视或者不遵守该协议意味着这个行业的发展会进入恶性循环之中。2爬虫策略没有优化。一般开源系统实现了宽度优先或者深度优先的策略,但是并没有对Web页面的具体特征做优化,此时很容易对服务器造成攻击,甚至被服务器屏蔽。③许多爬虫实现了多线程或者分布式的架构,这个看似流行的架构对爬虫而言并非始终高效。即便客户端架构设计得再好,如果爬虫策略和增量模式等问题没有解决,它的效果仅相当于增加了很多个并行的爬虫,而且仅针对同一个服务器操作,这种做法对服务器的负面影响极大,而且制约了爬虫的发展。1.1.2常见爬虫分类和工具基于爬虫的发展现状,我们需要利用现有的爬虫框架和工具包,设计更有效、合理的爬虫,使其能够在不影响对方服务器的前提下,完成目标的数据爬取任务。目前,流行的爬虫工具主要来源于第三方,以下列出一些常见的爬虫工具。