第1章 Python环境搭建及基础学习 1
1.1 Python 3.6的安装与配置 1
1.1.1 Windows下的安装 1
1.1.2 Linux下的安装 5
1.1.3 macOS下的安装 6
1.2 IDE工具:PyCharm的安装 7
1.3基础语法 11
1.3.1第一个Python程序 11
1.3.2 Python命名规范 13
1.3.3行和缩进 15
1.3.4注释和续行 15
1.3.5 Python输出 16
1.4字符串 18
1.4.1字符串运算符 18
1.4.2字符串内置函数 19
1.5数据结构 22
1.5.1列表 22
1.5.2元组 25
1.5.3集合 27
1.5.4字典 29
1.6控制语句 31
1.6.1条件表达式 31
1.6.2选择结构 32
1.6.3循环结构 33
1.7函数、模块和包 36
1.7.1函数 36
1.7.2模块 40
1.7.3包 42
1.8文件的读写操作 45
1.8.1文件读写步骤与打开模式 46
1.8.2文件的基本操作 48
1.8.3文件写入操作 52
1.9面向对象 53
1.9.1类和对象 54
1.9.2封装性 58
1.9.3继承性 59
1.9.4多态性 60
1.10本章小结 61
练习题 61
第2章 爬虫原理和网络基础 62
2.1爬虫是什么 62
2.2爬虫的意义 62
2.3爬虫的原理 64
2.4爬虫技术的类型 66
2.4.1聚焦爬虫技术 66
2.4.2通用爬虫技术 67
2.4.3增量爬虫技术 69
2.4.4深层网络爬虫技术 70
2.5爬虫抓取策略 71
2.5.1深度优先遍历策略 71
2.5.2广度优先遍历策略 71
2.5.3 Partial PageRank策略 72
2.5.4大站优先策略 72
2.5.5反向链接数策略 73
2.5.6 OPIC策略 73
2.6反爬虫和反反爬虫 73
2.6.1反爬虫 73
2.6.2反反爬虫 77
2.7网络基础 79
2.7.1网络体系结构 79
2.7.2网络协议 79
2.7.3 Socket编程 86
2.8本章小结 88
练习题 88
第3章 Python常用库 89
3.1 Python库的介绍 89
3.1.1常用标准库 89
3.1.2安装使用第三方库 91
3.2 urllib库 92
3.2.1 urlopen()函数用法 93
3.2.2 urlretrieve()函数用法 95
3.2.3 URL编码和URL解码 96
3.2.4 urlparse()和urlsplit()函数用法 97
3.3 request库 99
3.3.1 request库的基本使用 99
3.3.2 request库的高级用法 109
3.4 lxml库 113
3.4.1 lxmnl库的安装和使用 113
3.4.2 XPath介绍 114
3.4.3 XPath语法 116
3.4.4 lxml和XPath的结合使用 119
3.5 Beautiful Soup库 122
3.5.1 Beautiful Soup库的安装和使用 123
3.5.2提取数据 125
3.5.3 CSS选择器 131
3.6实战案例 134
3.6.1使用Beautiful Soup解析网页 134
3.6.2微信公众号爬虫 135
3.6.3爬取豆瓣读书TOP500 136
3.6.4使用urllib库爬取百度贴吧 137
3.7本章小结 139
练习题 139
第4章 正则表达式 140
4.1概念介绍 140
4.2正则表达式语法 141
4.2.1正则模式的字符 141
4.2.2运算符优先级 142
4.3匹配规则 143
4.3.1单字符匹配规则 143
4.3.2多字符匹配规则 144
4.3.3边界匹配 146
4.3.4分组匹配 147
4.4 re模块常用函数 150
4.4.1 re.match函数 150
4.4.2 re.search函数 152
4.4.3 re.compile函数 153
4.4.4 re.sub函数 155
4.4.5 re.findall函数 156
4.4.6 re.finditer函数 157
4.4.7 re.split函数 157
4.5本章小结 158
练习题 158
第5章 验证码 159
5.1 PIL库 159
5.1.1 PIL库的安装 159
5.1.2 PIL库的常用函数 160
5.1.3 PIL库的应用 163
5.1.4应用PIL到实际开发 169
5.2 Tesseract库 172
5.2.1 Tesseract库的安装 172
5.2.2 Tesseract库的使用 174
5.2.3 Tesseract库的识别训练 174
5.3 TensorFlow库 180
5.3.1 TensorFlow库的安装 180
5.3.2 TensorFlow基本操作 184
5.3.3 TensorFlow基础架构 186
5.3.4 TensorFlow创建线性回归模型 189
5.3.5 TensorFlow识别知乎验证码 190
5.4 4种验证码的解决思路 191
5.5 OCR处理验证码 194
5.6实战案例 195
5.7本章小结 199
练习题 199
第6章 抓包利器Fiddler 200
6.1 Fiddler简介 200
6.2 Fiddler的安装和配置 200
6.2.1 Fiddler的安装 201
6.2.2 Fiddler的配置 202
6.3 Fiddler捕获会话 205
6.4 QuickExec命令行的使用 207
6.5 Fiddler断点功能 209
6.6 Fiddler的实用工具 210
6.7实战案例 212
6.7.1使用Fiddler抓取数据并分析 212
6.7.2使用Fiddler抓取HTTPS流量 214
6.7.3使用Fiddler抓取手机应用 215
6.8本章小结 219
练习题 219
第7章 数据存储 220
7.1数据的基本存储 220
7.1.1数据存储至TXT 220
7.1.2数据存储至CSV 222
7.1.3数据存储至JSON 223
7.2数据存储至MySQL数据库 227
7.2.1配置MySQL服务 227
7.2.2安装PyMySQL 228
7.2.3创建示例项目 230
7.2.4 PyMySQL基本操作 231
7.3数据存储至MongoDB数据库 231
7.4数据存储至XML 234
7.5常见数据存储方式的比较 235
7.6本章小结 237
练习题 237
第8章 Scrapy爬虫框架 238
8.1 Scrapy框架介绍 238
8.2 Scrapy框架详解 239
8.2.1框架内组件及作用 239
8.2.2 Scrapy运行流程 240
8.2.3数据流向 240
8.3 Scrapy框架中的Selector 240
8.4 Beautiful Soup库的使用 246
8.4.1简单示例 246
8.4.2四大对象种类 247
8.4.3遍历文档树 249
8.4.4搜索文档树 249
8.4.5 CSS选择器 253
8.5 CrawlSpider的使用 254
8.5.1 Spider的简单用法 254
8.5.2 CrawlSpider概述 254
8.5.3使用CrawlSpider获取rules 256
8.5.4使用CrawlSpider进行模拟登录 257
8.6 Scrapy Shell的使用 257
8.6.1启动Scrapy Shell 258
8.6.2功能函数 258
8.6.3 Scrapy对象 258
8.6.4 Scrapy Shell示例 258
8.7 Scrapyrt的使用 259
8.7.1 GET请求 259
8.7.2 POST请求 261
8.8 Scrapy对接Selenium 262
8.9实战案例 264
8.9.1 Scrapy知乎信息爬取 264
8.9.2 Scrapy微博信息爬取 268
8.9.3 Scrapy机票信息爬取 272
8.10本章小结 274
练习题 274
第9章 多线程爬虫 275
9.1多线程和Threading模块 275
9.1.1多线程定义和特点 275
9.1.2 Threading模块 276
9.2使用Thread类创建实例 277
9.2.1可传递函数的Thread类实例 277
9.2.2可调用的Thread类实例 278
9.2.3派生Thread子类 279
9.3多线程方法的使用 280
9.3.1多线程创建 280
9.3.2多线程冲突及解决 283
9.3.3使用Semaphore调度线程 285
9.3.4生产者-消费者模式 286
9.3.5共享全局变量及锁机制 288
9.4 Queue线程安全队列 289
9.5实战案例 291
9.5.1多线程爬取糗事百科 292
9.5.2多线程爬取网站图片 296
9.6本章小结 298
练习题 298
第10章 动态网页爬虫 299
10.1浏览器开发者工具 299
10.1.1调试工具的介绍 299
10.1.2调试工具的使用示例 306
10.2异步加载技术 309
10.2.1异步加载技术介绍 309
10.2.2 AJAX数据爬取 310
10.3表单交互与模拟登录 314
10.3.1表单交互 314
10.3.2模拟登录 315
10.4 Selenium模拟浏览器 316
10.4.1 Selenium操作浏览器 316
10.4.2 Selenium和ChromeDriver的配合使用 332
10.5实战案例 337
10.5.1 Selenium职位信息爬取 338
10.5.2 Selenium直播平台数据爬取 339
10.6本章小结 341
练习题 341
第11章 分布式爬虫 342
11.1分布式爬虫概述 342
11.1.1主从分布式爬虫 343
11.1.2对等分布式爬虫 343
11.2 Scrapy-redis分布式组件 345
11.2.1 Scrapy-redis简介 346
11.2.2 Scrapy-redis工作机制 348
11.2.3 Scrapy-redis安装配置 349
11.2.4 Scrapy-redis常用配置 356
11.2.5 Scrapy-redis键名介绍 357
11.2.6 Scrapy-redis简单示例 357
11.3 redis数据库 358
11.4 Scrapy-redis源码分析 364
11.5通过scrapy_redis实现分布式爬虫 369
11.6实战案例 371
11.7本章小结 376
练习题 377
第12章 电商网站商品信息爬虫项目 378
12.1商品信息爬虫功能分析 378
12.1.1商品信息爬虫接口分析 378
12.1.2商品信息爬虫页面分析 380
12.2商品信息爬虫实现思路 380
12.2.1 Selenium环境配置 380
12.2.2 pyquery环境配置 381
12.3电商网站商品信息编写实战 381
12.3.1获取电商网站商品信息列表 381
12.3.2电商网站商品信息列表解析 383
12.3.3保存爬取的商品信息 385
12.3.4电商网站商品信息的页码遍历 386
12.4 pyquery解析电商网站商品信息 388
12.4.1 pyquery调用CSS选择器 389
12.4.2 pyquery使用parent()获取父节点 391
12.4.3 pyquery遍历商品信息 393
12.4.4 pyquery获取商品信息内部文本 395
12.4.5 CSS选择器 398
12.5运行代码 399
12.5.1爬虫的Chrome Headless模式 400
12.5.2爬虫对接Firefox 400
12.5.3爬虫对接PhantomJS 400
12.6本章小结 401
练习题 401
第13章 生活娱乐点评类信息爬虫项目 402
13.1功能分析 402
13.1.1项目描述 402
13.1.2静态网页抓取 402
13.1.3动态网页抓取 404
13.2请求-响应关系 410
13.2.1请求对象 410
13.2.2请求方法 410
13.3请求头和请求体 411
13.3.1请求头 412
13.3.2响应 412
13.3.3保存响应结果 412
13.4通过Selenium模拟浏览器抓取 413
13.4.1 Selenium的安装 413
13.4.2 Selenium的实践案例 414
13.4.3 Selenium获取文章的所有评论 414
13.5实战演练Scrapy框架实例 415
13.5.1编写spider 416
13.5.2编写item.py 417
13.5.3为items对象赋值 417
13.5.4编写piplines.py 418
13.5.5配置setting.py 418
13.5.6完整代码及结果 419
13.6调试与运行 421
13.7本章小结 422
练习题 422
第14章 图片信息类爬虫项目 423
14.1功能分析 423
14.2实现思路 423
14.2.1 urllib模块的使用 424
14.2.2 Scrapy框架的使用 426
14.3程序执行 429
14.4实战演练图片验证码 429
14.4.1开发环境与工具 429
14.4.2 Anaconda3的安装 430
14.4.3问题步骤 434
14.4.4解决步骤 434
14.4.5图片预处理代码 435
14.4.6图片切割 437
14.4.7 KNN训练 437
14.4.8 CNN加载数据 439
14.4.9训练CNN模型 440
14.4.10 CNN模型预测 442
14.5调试运行 443
14.6本章小结 444
练习题 444
练习题答案 445