疯狂Python讲义
  • 推荐0
  • 收藏0
  • 浏览371

疯狂Python讲义

李刚 (作者)  葛娜 (责任编辑)

  • 书  号:978-7-121-35197-6
  • 出版日期:2018-12-03
  • 页  数:648
  • 开  本:16(185*260)
  • 出版状态:上市销售
  • 维护人:张月萍
纸质版 ¥118.00
本书全面而深入介绍了Python编程的相关内容,全书内容大致可分为四个部分,第一部分系统讲解了Python的基本语法结构、函数编程、类和对象、模块和包、异常处理等;第二部分主要介绍Python常用的内置模块和包,这部分包括正则表达式支持IO编程、数据库编程、并发编程、网络通信编程等内容;第三部分主要介绍Python开发工程化方面的内容;第四部分则属于“Python项目实战”,这部分通过项目介绍了Python游戏开发、大数据展示、网络爬虫等热门技能,尤其是网络爬虫和大数据展示,均是当下Python最热的就业岗位。
前 言

创作本书纯属偶然,起因是我儿子想学编程。当他想报编程兴趣班时,居然没报上、满额了,而他是一个对生活充满好奇的小孩,望着他满是失落的眼睛,我想不如我来教吧,毕竟我曾经教了那么多别人的孩子。
我的想法是:挑一门上手足够容易的语言来教,毕竟他只是一个8岁的小孩。首先排除了Java和C,虽然我自己用这两种语言比较多,但对于小孩来说,上手它们显得有些枯燥;也考虑过Swift或Kotlin,能迅速带着做点手机小游戏比较酷,后来又觉得搭建运行环境有点费事;还是选一种能解释执行的脚本语言吧,我想到了Python或Ruby,后来又了解到那个兴趣班教的就是Python,那就选Python吧。
于是,他开始了自己的Python学习之旅。而我完全被困住了:每当他遇到一点问题就要来问我。这肯定不行,得找本书让他自己看,这样他就不用来烦我了。我是一个非常挑剔的人,找了不少书,却发现很少有合适的——有些书上手简单,但完全没有按照Python本身的知识体系讲解,单纯地为了简单而简单;有些书略微系统一些,却讲得晦涩难懂。典型来说,仅仅一个变量的概念,几乎没有一本书能通俗地讲明白。实际上,初学者并不需要知道变量的概念定义,他只要把变量当成一个小的“容器”,懂得对变量赋值就是把东西“装入”变量即可。那么我还是自己写一本吧,毕竟我曾经为别人写了那么多书。
创作这本书时,我有两点考虑。
1. 讲解要尽量通俗,避免搞那些晦涩的概念
编程,首要的是能动手编,让简单的程序跑起来。动手编得多了,那些概念的意义自然就浮现出来了。就像一个外星人来到地球,从未见过桌子,找个人一直给他讲桌子的概念,要他务必先理解桌子的概念,外星人的感觉一定是非常困惑;尝试用不同的方法:找一堆桌子放在一起,一张桌子、一张桌子给他看,让他在桌子上写字、用电脑、吃饭,甚至把桌子拆开给他看,相信外星人很快就能理解“什么是桌子”了。对于编程初学者而言,他们何尝不是刚来到地球的外星人?
2. 知识体系要完善,而且遵循Python内在的逻辑
一直以来,我写的书通常比较厚、内容也比较多。这和我挑剔的个性有关:既然做一件事情,当然要尽力做好它;否则干脆别做。一门工业级的编程语言,它不是玩具,它本身有那么多的知识点。不管你学还是不学,编程语言本身的内容就在那里!不管作者写还是不写,编程语言本身的内容就在那里。我写书总会尽量做到“够用”,起码认真学完这本书之后,不会随便遇到一个编程问题就只能问百度。
既要有完备的知识体系,又要详细讲透这些内容,书的篇幅自然就多了。同样的知识内容,一本厚厚的、讲解细致的图书,和一本薄薄的、浮光掠影的图书,哪本更容易看懂?
在知识内容相同的前提下,如果看不懂一本内容丰富、讲解细致的书,看一本薄薄的、浮光掠影的图书反而能看懂?这完全没道理。
但有些读者确实这样说过,这一点我也能理解,存在“鸵鸟心态”的人,他并不是第一个:看不到的就当它不存在。有些书之所以薄,无非是两个知识点不讲:这也不讲,那也不讲!读者阅读的时候固然是轻松,因为内容少呀。就像学数学,如果只教一加一等于二,当然讲得简单、学得轻松;但等到真正做事时才发现:啊?还有二加三等于五?数学还有乘法?还有除法?然后发现这也不会,那也看不懂,后果就是遇到问题就上百度。这就是有些所谓的开发者,他们是“面向百度”编程的。这些开发者往往哀叹:做程序员太累了,一个问题往往要调半天甚至一天,其实他们根本不是调试,只是在找别人的代码、试别人的代码,运气好找到了合适的代码,问题就解决了;找不到合适的代码就只能哀叹了。
正因为基于以上两点考虑进行创作,因此初学者上手本书的门槛比较低,大部分读者都能迅速地通过学习本书内容写出自己的Python程序、运行自己的Python程序;但要坚持把本书学完也需要一定的毅力:书中内容确实比较多,而且后面内容更偏向实际应用开发。
编程图书不仅是用来“看”的,更是需要动手“练”的,正如先圣王阳明所倡导的:知行合一。学习本书需要读者认真练习书中每个示例程序,还需要读者认真完成全书在各章节后所配的110道Python练习题(面试题),如果读者需要获取关于课后习题的解决方法、编程思路,可以登录http://www.crazyit.org站点或关注“疯狂图书”微信公众号(拿出手机扫描封面勒口处的二维码)。
本书有什么特点
本书并不是一本简单的Python入门教材,虽然本书上手门槛很低,但本书的知识体系很丰富。总结起来,本书具有如下三个特点。
1. 讲解通俗,上手门槛低
创作本书的最初目的决定了本书的上手门槛,本书不会故弄玄虚地纠缠于晦涩的概念,而是力求用浅显易懂的比喻引出概念、用口语化的方式介绍编程、用清晰的逻辑解释思路。
为了降低读者阅读的难度,书中代码的注释非常详细,几乎每两行代码就有一行注释。本书所有程序中关键代码以粗体字标出,也是为了帮助读者能迅速找到这些程序的关键点。
2.案例驱动,引爆编程激情
本书不是知识点的铺陈,而是致力于将知识点融入实际项目的开发中,所以书中涉及大量Python案例:五子棋游戏、画图板、桌面弹球、合金弹头、大数据展示、各国人均GDP对比、基于爬虫的招聘热点分析、基于爬虫的高清图片下载、基于Scrapy+Selenium的微博登录……希望读者通过编写这些程序找到编程的乐趣。
3.知识体系完备,直面企业开发实战
虽然本书在讲解上力求简单,但本书内容并不简单,全书知识体系完备且系统,不仅全方位地覆盖Python语言本身的语法,而且覆盖大数据展示、爬虫等Python的热门技术,这些内容能带领读者直面企业开发实战。
本书写给谁看
如果你仅仅想对Python有所涉猎,那么本书并不适合你;如果小朋友有兴趣学习本书,可先引导他阅读本书前半部分;如果你想全面掌握Python编程,并使用Python解决大数据分析、网络爬虫等实际企业开发项目,那么你应该选择本书,并认真学完此书。希望本书能引爆你内心潜在的编程激情,让你废寝忘食。


2018-09-20

目录

目 录

第1章 Python语言概述和开发环境 1
1.1 Python简介 2
1.1.1 Python简史 2
1.1.2 Python的特点 3
1.2 Python程序运行机制 3
1.3 开发Python的准备 4
1.3.1 在Windows上安装Python 4
1.3.2 在Linux上安装Python 6
1.3.3 在Mac OS X上安装Python 7
1.4 第一个Python程序 7
1.4.1 编辑Python源程序 7
1.4.2 使用IDLE运行Python程序 8
1.4.3 使用命令行工具运行Python程序 8
1.5 交互式解释器 10
1.6 本章小结 11
本章练习 11

第2章 变量和简单类型 12
2.1 单行注释和多行注释 13
2.2 变量 14
2.2.1 Python是弱类型语言 14
2.2.2 使用print函数输出变量 15
2.2.3 变量的命名规则 16
2.2.4 Python的关键字和内置函数 17
2.3 数值类型 18
2.3.1 整型 18
2.3.2 浮点型 20
2.3.3 复数 20
2.4 字符串入门 21
2.4.1 字符串和转义字符 21
2.4.2 拼接字符串 22
2.4.3 repr和字符串 22
2.4.4 使用input和raw_input获取用户输入 23
2.4.5 长字符串 24
2.4.6 原始字符串 24
2.4.7 字节串(bytes) 25
2.5 深入使用字符串 27
2.5.1 转义字符 27
2.5.2 字符串格式化 27
2.5.3 序列相关方法 29
2.5.4 大小写相关方法 30
2.5.5 删除空白 32
2.5.6 查找、替换相关方法 32
2.5.7 分割、连接方法 34
2.6 运算符 34
2.6.1 赋值运算符 34
2.6.2 算术运算符 35
2.6.3 位运算符 37
2.6.4 扩展后的赋值运算符 40
2.6.5 索引运算符 40
2.6.6 比较运算符与bool类型 40
2.6.7 逻辑运算符 41
2.6.8 三目运算符 42
2.6.9 in运算符 44
2.6.10 运算符的结合性和优先级 44
2.7 本章小结 45
本章练习 45

第3章 列表、元组和字典 46
3.1 序列简介 47
3.1.1 Python的序列 47
3.1.2 创建列表和元组 47
3.2 列表和元组的通用用法 48
3.2.1 通过索引使用元素 48
3.2.2 子序列 48
3.2.3 加法 49
3.2.4 乘法 49
3.2.5 in运算符 50
3.2.6 长度、最大值和最小值 50
3.2.7 序列封包和序列解包 51
3.3 使用列表 52
3.3.1 创建列表 52
3.3.2 增加列表元素 53
3.3.3 删除列表元素 54
3.3.4 修改列表元素 55
3.3.5 列表的其他常用方法 56
3.4 使用字典 58
3.4.1 字典入门 58
3.4.2 创建字典 58
3.4.3 字典的基本用法 59
3.4.4 字典的常用方法 60
3.4.5 使用字典格式化字符串 63
3.5 本章小结 63
本章练习 64

第4章 流程控制 65
4.1 顺序结构 66
4.2 if分支结构 66
4.2.1 不要忘记缩进 67
4.2.2 不要随意缩进 69
4.2.3 不要遗忘冒号 70
4.2.4 if条件的类型 70
4.2.5 if分支的逻辑错误 71
4.2.6 if表达式 72
4.2.7 pass语句 72
4.3 断言 73
4.4 循环结构 73
4.4.1 while循环 73
4.4.2 使用while循环遍历列表和元组 74
4.4.3 for-in循环 75
4.4.4 使用for-in循环遍历列表和元组 76
4.4.5 使用for-in循环遍历字典 77
4.4.6 循环使用else 78
4.4.7 嵌套循环 79
4.4.8 for表达式 80
4.4.9 常用工具函数 82
4.5 控制循环结构 83
4.5.1 使用break结束循环 83
4.5.2 使用continue忽略本次循环的剩下语句 85
4.5.3 使用return结束方法 85
4.6 牛刀小试 86
4.6.1 数字转人民币读法 86
4.6.2 绕圈圈 87
4.6.3 控制台五子棋 89
4.6.4 控制台超市系统 90
4.7 本章小结 94
本章练习 94

第5章 函数和lambda表达式 97
5.1 函数入门 98
5.1.1 理解函数 98
5.1.2 定义函数和调用函数 99
5.1.3 为函数提供文档 100
5.1.4 多个返回值 100
5.1.5 递归函数 101
5.2 函数的参数 102
5.2.1 关键字(keyword)参数 102
5.2.2 参数默认值 103
5.2.3 参数收集(个数可变的参数) 105
5.2.4 逆向参数收集 106
5.2.5 函数的参数传递机制 107
5.2.6 变量作用域 111
5.3 局部函数 113
5.4 函数的高级内容 114
5.4.1 使用函数变量 115
5.4.2 使用函数作为函数形参 115
5.4.3 使用函数作为返回值 116
5.5 局部函数与lambda表达式 117
5.5.1 回顾局部函数 117
5.5.2 使用lambda表达式代替局部函数 118
5.6 本章小结 119
本章练习 119

第6章 类和对象 120
6.1 类和对象 121
6.1.1 定义类 121
6.1.2 对象的产生和使用 122
6.1.3 对象的产生和使用 123
6.1.4 实例方法和自动绑定self 124
6.2 方法 126
6.2.1 类也能调用实例方法 126
6.2.2 类方法与静态方法 128
6.2.3 @函数装饰器 128
6.2.4 再论类命名空间 131
6.3 成员变量 131
6.3.1 类变量和实例变量 131
6.3.2 使用property函数定义属性 134
6.4 隐藏和封装 137
6.5 类的继承 139
6.5.1 继承的语法 139
6.5.2 关于多继承 140
6.5.3 重写父类的方法 140
6.5.4 使用未绑定方法调用被重写的方法 141
6.5.5 使用super函数调用父类的构造方法 142
6.6 Python的动态性 143
6.6.1 动态属性与__slots__ 144
6.6.2 使用type()函数定义类 145
6.6.3 使用metaclass 146
6.7 多态 147
6.7.1 多态性 147
6.7.2 检查类型 149
6.8 枚举类 150
6.8.1 枚举入门 150
6.8.2 枚举的构造器 152
6.9 本章小结 153
本章练习 153

第7章 异常处理 154
7.1 异常概述 155
7.2 异常处理机制 156
7.2.1 使用try...except捕获异常 156
7.2.2 异常类的继承体系 157
7.2.3 多异常捕获 159
7.2.4 访问异常信息 160
7.2.5 else块 161
7.2.6 使用finally回收资源 163
7.2.7 异常处理嵌套 165
7.3 使用raise引发异常 165
7.3.1 引发异常 165
7.3.2 自定义异常类 166
7.3.3 except和raise同时使用 167
7.3.4 raise不需要参数 168
7.4 Python的异常传播轨迹 168
7.5 异常处理规则 170
7.5.1 不要过度使用异常 171
7.5.2 不要使用过于庞大的try块 172
7.5.3 不要忽略捕获到的异常 172
7.6 本章小结 172
本章练习 173

第8章 Python类的特殊方法 174
8.1 常见的特殊方法 175
8.1.1 重写__repr__方法 175
8.1.2 析构方法:__del__ 176
8.1.3 __dir__方法 177
8.1.4 __dict__属性 178
8.1.5 __getattr__、__setattr__等 178
8.2 与反射相关的属性和方法 180
8.2.1 动态操作属性 180
8.2.2 __call__属性 182
8.3 与序列相关的特殊方法 183
8.3.1 序列相关方法 183
8.3.2 实现迭代器 185
8.3.3 扩展列表、元组和字典 186
8.4 生成器 186
8.4.1 创建生成器 187
8.4.2 生成器的方法 189
8.5 运算符重载的特殊方法 191
8.5.1 与数值运算符相关的特殊方法 191
8.5.2 与比较运算符相关的特殊方法 194
8.5.3 与单目运算符相关的特殊方法 195
8.5.4 与类型转换相关的特殊方法 196
8.5.5 与常见的内建函数相关的特殊方法 197
8.6 本章小结 198
本章练习 198

第9章 模块和包 199
9.1 模块化编程 200
9.1.1 导入模块的语法 200
9.1.2 定义模块 203
9.1.3 为模块编写说明文档 203
9.1.4 为模块编写测试代码 204
9.2 加载模块 205
9.2.1 使用环境变量 205
9.2.2 默认的模块加载路径 208
9.2.3 导入模块的本质 209
9.2.4 模块的__all__变量 211
9.3 使用包 212
9.3.1 什么是包 212
9.3.2 定义包 212
9.3.3 导入包内成员 214
9.4 查看模块内容 216
9.4.1 模块包含什么 216
9.4.2 使用__doc__属性查看文档 217
9.4.3 使用__file__属性查看模块的源文件路径 218
9.5 本章小结 218
本章练习 218

第10章 常见模块 219
10.1 sys 220
10.1.1 获取运行参数 222
10.1.2 动态修改模块加载路径 223
10.2 os模块 223
10.3 random 225
10.4 time 227
10.5 JSON支持 230
10.5.1 JSON的基本知识 230
10.5.2 Python的JSON支持 232
10.6 正则表达式 236
10.6.1 Python的正则表达式支持 236
10.6.2 正则表达式旗标 241
10.6.3 创建正则表达式 242
10.6.4 子表达式 244
10.6.5 贪婪模式与勉强模式 246
10.7 容器相关类 247
10.7.1 set和frozenset 248
10.7.2 双端队列(deque) 250
10.7.3 Python的堆操作 253
10.8 collections下的容器支持 255
10.8.1 ChainMap对象 255
10.8.2 Counter对象 257
10.8.3 defaultdict对象 260
10.8.4 namedtuple工厂函数 261
10.8.5 OrderedDict对象 262
10.9 函数相关模块 264
10.9.1 itertools模块的功能函数 264
10.9.2 functools模块的功能函数 267
10.10 本章小结 273
本章练习 273

第11章 图形界面编程 275
11.1 Python的GUI库 276
11.2 Tkinter GUI编程的组件 277
11.3 布局管理器 283
11.3.1 Pack布局管理器 283
11.3.2 Grid布局管理器 285
11.3.3 Place布局管理器 287
11.4 事件处理 288
11.4.1 简单的事件处理 289
11.4.2 事件绑定 289
11.5 Tkinter常用组件 293
11.5.1 使用ttk组件 293
11.5.2 Variable类 294
11.5.3 使用compound选项 295
11.5.4 Entry和Text组件 297
11.5.5 Radiobutton和Checkbutton组件 300
11.5.6 Listbox和Combobox组件 303
11.5.7 Spinbox组件 308
11.5.8 Scale和LabeledScale组件 309
11.5.9 Labelframe组件 312
11.5.10 Panedwindow组件 314
11.5.11 OptionMenu组件 316
11.6 对话框(Dialog) 318
11.6.1 普通对话框 318
11.6.2 自定义模式、非模式对话框 320
11.6.3 输入对话框 322
11.6.4 文件对话框 324
11.6.5 颜色选择对话框 326
11.6.6 消息框 327
11.7 菜单 330
11.7.1 窗口菜单 330
11.7.2 右键菜单 334
11.8 在Canvas中绘图 336
11.8.1 Tkinter Canvas的绘制功能 336
11.8.2 操作图形项的标签 343
11.8.3 操作图形项 345
11.8.4 为图形项绑定事件 349
11.8.5 绘制动画 354
11.9 本章小结 357
本章练习 357

第12章 文件I/O 358
12.1 使用pathlib模块操作目录 359
12.1.1 PurePath的基本功能 360
12.1.2 PurePath的属性和方法 362
12.1.3 Path的功能和用法 363
12.2 使用os.path操作目录 365
12.3 使用fnmatch处理文件名匹配 366
12.4 打开文件 367
12.4.1 文件打开模式 367
12.4.2 缓冲 368
12.5 读取文件 369
12.5.1 按字节或字符读取 369
12.5.2 按行读取 371
12.5.3 使用fileinput读取多个输入流 371
12.5.4 文件迭代器 372
12.5.5 管道输入 373
12.5.6 使用with语句 374
12.5.7 使用linecache随机读取指定行 376
12.6 写文件 376
12.6.1 文件指针的概念 376
12.6.2 输出内容 377
12.7 os模块的文件和目录函数 378
12.7.1 与目录相关的函数 379
12.7.2 与权限相关的函数 380
12.7.3 与文件访问相关的函数 381
12.8 使用tempfile模块生成临时文件和临时目录 383
12.9 本章小结 385
本章练习 385

第13章 数据库编程 386
13.1 Python数据库API简介 387
13.1.1 全局变量 387
13.1.2 数据库API的核心类 388
13.1.3 操作数据库的基本流程 389
13.2 操作SQLite数据库 389
13.2.1 创建数据表 390
13.2.2 使用SQLite Expert工具 391
13.2.3 使用序列重复执行DML语句 393
13.2.4 执行查询 395
13.2.5 事务控制 396
13.2.6 执行SQL脚本 397
13.2.7 创建自定义函数 398
13.2.8 创建聚集函数 399
13.2.9 创建比较函数 400
13.3 操作MySQL数据库 401
13.3.1 下载和安装MySQL数据库 401
13.3.2 使用pip工具管理模块 404
13.3.3 执行DDL语句 405
13.3.4 执行DML语句 407
13.3.5 执行查询语句 408
13.3.6 调用存储过程 409
13.4 本章小结 410
本章练习 411

第14章 并发编程 412
14.1 线程概述 413
14.1.1 线程和进程 413
14.1.2 多线程的优势 414
14.2 线程的创建和启动 415
14.2.1 调用Thread类的构造器创建线程 415
14.2.2 继承Thread类创建线程类 417
14.3 线程的生命周期 418
14.3.1 新建和就绪状态 418
14.3.2 运行和阻塞状态 419
14.3.3 线程死亡 420
14.4 控制线程 421
14.4.1 join线程 422
14.4.2 后台线程 422
14.4.3 线程睡眠:sleep 423
14.5 线程同步 424
14.5.1 线程安全问题 424
14.5.2 同步锁(Lock) 425
14.5.3 死锁 428
14.6 线程通信 430
14.6.1 使用Condition实现线程通信 430
14.6.2 使用队列(Queue)控制线程通信 433
14.6.3 使用Event控制线程通信 434
14.7 线程池 436
14.7.1 使用线程池 437
14.7.2 获取执行结果 439
14.8 线程相关类 440
14.8.1 线程局部变量 440
14.8.2 定时器 441
14.8.3 任务调度 442
14.9 多进程 443
14.9.1 使用fork创建新进程 443
14.9.2 使用multiprocessing.Process创建新进程 444
14.9.3 Context和启动进程的方式 446
14.9.4 使用进程池管理进程 448
14.9.5 进程通信 449
14.10 本章小结 451
本章练习 451

第15章 网络编程 452
15.1 网络编程的基础知识 453
15.1.1 网络基础知识 453
15.1.2 IP地址和端口号 454
15.2 Python的基本网络支持 455
15.2.1 Python的网络模块概述 455
15.2.2 使用urllib.parse子模块 456
15.2.3 使用urllib.request读取资源 459
15.2.4 管理cookie 464
15.3 基于TCP协议的网络编程 467
15.3.1 TCP协议基础 467
15.3.2 使用socket创建TCP服务器端 468
15.3.3 使用socket通信 469
15.3.4 加入多线程 470
15.3.5 记录用户信息 472
15.3.6 半关闭的socket 477
15.3.7 selectors模块 478
15.4 基于UDP协议的网络编程 480
15.4.1 UDP协议基础 480
15.4.2 使用socket发送和接收数据 481
15.4.3 使用UDP协议实现多点广播 483
15.5 电子邮件支持 484
15.5.1 使用smtplib模块发送邮件 484
15.5.2 使用poplib模块收取邮件 488
15.6 本章小结 491
本章练习 491

第16章 文档和测试 492
16.1 使用pydoc生成文档 493
16.1.1 在控制台中查看文档 494
16.1.2 生成HTML文档 495
16.1.3 启动本地服务器来查看文档信息 495
16.1.4 查找模块 496
16.2 软件测试概述 497
16.2.1 软件测试的概念和目的 497
16.2.2 软件测试的分类 498
16.2.3 开发活动和测试活动 499
16.2.4 常见的Bug管理工具 499
16.3 文档测试 500
16.4 单元测试 502
16.4.1 单元测试概述 502
16.4.2 单元测试的逻辑覆盖 504
16.5 使用PyUnit(unittest) 506
16.5.1 PyUnit(unittest)的用法 507
16.5.2 运行测试 510
16.5.3 使用测试包 511
16.5.4 测试固件之setUp和tearDown 513
16.5.5 跳过测试用例 515
16.6 本章小结 516
本章练习 516

第17章 打包和发布 517
17.1 使用zipapp模块 518
17.1.1 生成可执行的Python档案包 518
17.1.2 创建独立应用 519
17.2 使用PyInstaller生成可执行程序 520
17.2.1 安装PyInstaller 520
17.2.2 生成可执行程序 521
17.3 本章小结 523
本章练习 523

第18章 合金弹头 524
18.1 合金弹头游戏简介 525
18.2 pygame简介 525
18.2.1 安装pygame 526
18.2.2 pygame常用的游戏API 527
18.3 开发游戏界面组件 529
18.3.1 游戏界面分析 529
18.3.2 实现“怪物”类 529
18.3.3 实现怪物管理 534
18.3.4 实现“子弹”类 536
18.3.5 加载、管理游戏图片 538
18.3.6 让游戏“运行”起来 540
18.4 增加“角色” 541
18.4.1 开发“角色”类 541
18.4.2 添加角色 547
18.5 合理绘制地图 550
18.6 增加音效 551
18.7 增加游戏场景 554
18.8 本章小结 558
本章练习 558

第19章 数据可视化 559
19.1 使用Matplotlib生成数据图 560
19.1.1 安装Matplotlib包 560
19.1.2 Matplotlib数据图入门 561
19.1.3 管理图例 562
19.1.4 管理坐标轴 565
19.1.5 管理多个子图 566
19.2 功能丰富的数据图 570
19.2.1 饼图 570
19.2.2 柱状图 571
19.2.3 水平柱状图 573
19.2.4 散点图 574
19.2.5 等高线图 576
19.2.6 3D图形 577
19.3 使用Pygal生成数据图 578
19.3.1 安装Pygal包 578
19.3.2 Pygal数据图入门 578
19.3.3 配置Pygal数据图 580
19.4 Pygal支持的常见数据图 581
19.4.1 折线图 581
19.4.2 水平柱状图和水平折线图 581
19.4.3 叠加柱状图和叠加折线图 582
19.4.4 饼图 583
19.4.5 点图 584
19.4.6 仪表(Gauge)图 585
19.4.7 雷达图 586
19.5 处理数据 587
19.5.1 CSV文件格式 587
19.5.2 JSON数据 590
19.5.3 数据清洗 593
19.5.4 读取网络数据 595
19.6 本章小结 597
本章练习 597

第20章 网络爬虫 598
20.1 Scrapy简介 599
20.1.1 了解Scrapy 599
20.1.2 安装Scrapy 600
20.2 使用爬虫爬取、分析招聘信息 601
20.2.1 创建Scrapy项目 601
20.2.2 使用shell调试工具 603
20.2.3 Scrapy开发步骤 606
20.2.4 使用JSON导出信息 611
20.2.5 将数据写入数据库 611
20.2.6 使用Pygal展示招聘信息 612
20.3 处理反爬虫 613
20.3.1 使用shell调试工具分析目标站点 614
20.3.2 使用Scrapy爬取高清图片 616
20.3.3 应对反爬虫的常见方法 618
20.3.4 整合Selenium模拟浏览器行为 620
20.4 本章小结 624
本章练习 624

读者评论

  • 资源文件下载不下来,有限速吗?

    chuanshuo发表于 2019/3/5 10:46:11
  • henhao

    张智超萌发表于 2019/2/6 10:57:31

下载资源