本书从实际的爬虫业务需求延伸到知识点和具体实现,并详细介绍了其中的原理。首先带领读者领略爬虫程序的构成和完整链条,学习自动化工具的应用场景和基本使用;接着介绍了增量爬取的分类和具体实现、基于Redis 的分布式爬虫实现和基于RabbitMQ 的分布式爬虫实现,通过阅读论文和源码剖析详细介绍了高准确率的网页正文自动化提取方法;然后通过源码调试了解到与Python 项目的部署和调度相关的知识,进而动手实践,编写了一款具备权限控制、Python 通用项目部署、定时调度、异常监控和钉钉机器人消息通知的爬虫项目管理平台;最后通过解读分布式调度平台的核心架构,帮助大家了解分布式架构中最为重要的节点通信、文件同步等知识。
本书适合爬虫工程师、爬虫技术爱好者和Python 开发者阅读,也适合爬虫团队管理者、高校教师和培训机构的讲师阅读。
第1 章 爬虫程序的构成和完整链条 . 1
1.1 一个简单的爬虫程序 . 1
1.2 爬虫的完整链条 . 3
1.3 爬取下来的数据被用在什么地方 . 7
1.4 爬虫工程师常用的库 . 11
1.4.1 网络请求库 . 11
1.4.2 网页文本解析. 19
1.5 数据存储 . 30
1.5.1 将数据存入MySQL 数据库 . 31
1.5.2 将数据存入MongoDB 数据库 . 34
1.5.3 将数据存入Redis 数据库 . 36
1.5.4 Excel 文件的读写 . 38
1.6 小试牛刀——出版社新闻资讯爬虫 . 42
实践题 . 46
本章小结 . 47
第2 章 自动化工具的使用 . 48
2.1 网页渲染工具 . 48
2.1.1 WebDriver 是什么 . 51
2.1.2 Selenium 的介绍和基本使用 . 52
2.1.3 Pyppeteer 的介绍和基本使用 . 59
2.1.4 Splash 知识扩展 . 61
本节小结 . 62
2.2 App 自动化工具 . 62
2.2.1 Android 调试桥 . 62
2.2.2 Airtest Project 与Poco . 64
VIII Python3 网络爬虫宝典
2.2.3 爬取App 中的图片 . 75
2.2.4 控制多台设备. 78
本节小结 . 79
实践题 . 79
本章小结 . 79
第3 章 增量爬取的原理与实现 . 80
3.1 增量爬取的分类和实现原理 . 81
3.1.1 增量爬取的分类 . 81
3.1.2 增量爬取的实现原理 . 83
本节小结 . 88
3.2 增量池的复杂度和效率 . 88
3.2.1 增量池的时间复杂度 . 88
3.2.2 增量池的空间复杂度 . 95
本节小结 . 103
3.3 Redis 的数据持久化 . 103
3.3.1 持久化方式的分类和特点 . 103
3.3.2 RDB 持久化的实践 . 106
3.3.3 AOF 持久化的实践 . 112
3.3.4 Redis 密码持久化 . 115
本节小结 . 115
实践题 . 115
本章小结 . 116
第4 章 分布式爬虫的设计与实现 . 117
4.1 分布式爬虫的原理和分类 . 117
4.1.1 分布式爬虫的原理 . 117
4.1.2 分布式爬虫的分类 . 120
4.1.3 共享队列的选择 . 122
本节小结 . 125
4.2 分布式爬虫库Scrapy-Redis . 126
4.2.1 Scrapy-Redis 的介绍和基本使用 . 127
4.2.2 去重器、调度器和队列的源码解析 . 129
目录 IX
本节小结 . 134
4.3 基于Redis 的分布式爬虫 . 134
4.3.1 对等分布式爬虫的实现 . 135
4.3.2 主从分布式爬虫的实现 . 139
本节小结 . 141
4.4 基于RabbitMQ 的分布式爬虫 . 141
4.4.1 RabbitMQ 的安装和基本操作 . 142
4.4.2 分布式爬虫的具体实现 . 146
本节小结 . 152
实践题 . 152
本章小结 . 152
第5 章 网页正文自动化提取方法 . 153
5.1 Python Readability . 155
5.2 基于文本及符号密度的网页正文提取方法 . 158
5.3 GeneralNewsExtractor . 162
5.3.1 GeneralNewsExtractor 的安装和使用 . 162
5.3.2 GeneralNewsExtractor 的源码解读 . 165
本节小结 . 175
本章小结 . 175
第6 章 Python 项目打包部署与定时调度 . 176
6.1 如何判断项目是否需要部署 . 176
6.2 爬虫部署平台Scrapyd . 179
6.2.1 Scrapyd 的安装和服务启动 . 179
6.2.2 爬虫项目的打包和部署 . 180
本节小结 . 184
6.3 Scrapyd 源码深度剖析 . 185
6.4 项目打包与解包运行实战 . 197
6.4.1 用Setuptools 打包项目 . 197
6.4.2 运行EGG 包中的Python 项目 . 199
6.4.3 编码实现Python 项目打包 . 201
本节小结 . 203
X Python3 网络爬虫宝典
6.5 定时功能 . 203
6.5.1 操作系统提供的定时功能 . 203
6.5.2 编程语言实现的定时功能 . 206
6.5.3 APScheduler . 209
本节小结 . 212
6.6 实战:开发Python 项目管理平台Sailboat . 212
6.6.1 Sailboat 的模块规划和技术选型 . 212
6.6.2 Sailboat 的权限设计思路 . 214
6.6.3 Sailboat 的数据结构设计 . 215
6.6.4 Sailboat 基础结构的搭建 . 218
6.6.5 Sailboat 用户注册和登录接口的编写 . 220
6.6.6 Sailboat 权限验证装饰器的编写 . 229
6.6.7 Sailboat 项目部署接口和文件操作对象的编写 . 232
6.6.8 Sailboat 项目调度接口的编写 . 240
6.6.9 Sailboat 执行器的编写和日志的生成 . 243
6.6.10 Sailboat 定时调度功能的实现 . 248
6.6.11 Sailboat 异常监控和钉钉机器人通知功能的编写 . 249
本节小结 . 258
6.7 分布式调度平台Crawlab 核心架构解析 . 259
实践题 . 262
本章小结 . 262
温馨提示:请使用泸西县图书馆的读者帐号和密码进行登录
在学习爬虫时,不能仅了解一个脚本下载了多少数据,更应该了解这背后的技术细节和风控对抗。再次看到韦老师的作品,感叹于他的持续学习能力和时间管理能力,相信本书能给大家带来更多的精彩内容!
——腾讯后端开发工程师 BruceDone
韦老师的又一力作, 从多个角度讲解爬虫知识,加入了分布式爬虫的相关知识以及实操案例,每一章都有相应的习题,可以让读者进一步巩固学习。除此之外,本书还分析了市面上的几个优秀的框架,手把手教大家如何阅读开源项目,提高综合技术能力。这本书值得拥有。
——知乎高级爬虫工程师 陈祥安
爬虫是一门非常方便又实用的技术。在当今这个时代,凡是对数据有一定需求的企业,都会使用爬虫采集一些有价值的数据做分析。
本书贴合爬虫技术的实际应用场景和核心需求,由浅入深地将爬虫的概念、基本操作、内容提取、项目部署和调度逐一进行讲解,非常适合于爬虫入门学员和爬虫爱好者们阅读。
——知名爬虫团队 夜幕
本书选取了爬虫的一些核心知识点进行了重点梳理,每个知识点从原理到实战都讲解得非常透彻。如果大家想深入了解爬虫的一些核心知识,本书是上上之选。
—— 微软(中国)工程师、《Python3网络爬虫开发实战》作者 崔庆才
本书深入浅出地讲解了网络爬虫技术的基本原理以及工程实战。无论是刚入门的爬虫开发者还是颇有经验的爬虫工程师,本书都是他们不可多得的参考书。书中关于企业级爬虫程序开发的介绍(包括增量抓取、分布式爬虫、爬虫调度等),能够让读者深入理解如何开发高效而健壮的企业级爬虫。本书的读者非常幸运,因为你们能够学到前沿实用的网络爬虫技术和知识。
—— 热门开源项目 Crawlab 作者 张冶青
看到本书样章时我非常惊讶,作者竟然把GNE的代码拆解分析,但转念一想,这正是作者一贯的风格——要使用一个库、框架、服务,就要先从源代码的层次去理解它的工作原理,这样不仅能用好它,还能提前考虑到是否会有潜在的风险和坑点。阅读本书,既能学习爬虫的开发理论,又能掌握爬虫工具的使用方法,还能了解他们的工作原理,一举多得,甚好甚好。
—— 热门开源项目 GNE 作者 青南