第1章 爬虫初步 1
1.1 爬虫与大数据 1
1.1.1 大数据架构 1
1.1.2 爬虫的作用与地位 3
1.1.3 Python与爬虫 5
1.1.4 Python的网络爬虫框架 6
1.1.5 虫术技术路线图 9
1.2 实例:简单的爬虫 10
1.3 内容分析进阶 13
1.3.1 选择器 15
1.3.2 深入BeautifulSoup 16
1.3.3 元素的搜寻 18
1.3.4 乱码与中文编码 22
1.4 新闻供稿的爬取实例 31
1.5 小结 39
第2章 Scrapy基础知识 40
2.1 Scrapy架构 41
2.2 Scrapy快速入手 43
2.3 数据模型Item 47
2.4 蜘蛛——Spiders 51
2.5 管道——Item Pipeline 54
2.6 Scrapy的运行与配置 60
2.7 新闻供稿爬虫的Scrapy实现 63
2.8 小结 65
第3章 Scrapy的工程管理 66
3.1 Scrapyd 67
3.2 scrapyd-client及部署 77
3.3 搭建爬虫服务器 81
第4章 中阶虫术 87
4.1 蜘蛛的演化 88
4.1.1 蜘蛛的本质——深入Spider 88
4.1.2 通用蜘蛛 93
4.1.3 蜘蛛中间件 117
4.2 爬虫系统的测试与调试 128
4.2.1 开发期调试 128
4.2.2 蜘蛛的测试 131
4.2.3 蜘蛛的运行期调试 133
4.2.4 调试内存溢出 139
4.3 处理HTTP请求 144
4.3.1 HTTP请求 145
4.3.2 Scrapy的Request对象 156
4.3.3 表单处理 162
4.3.4 下载器中间件 164
4.4 处理HTTP响应 177
4.4.1 HTTP响应 178
4.4.2 Scrapy的响应对象 182
4.4.3 深入选择器 184
4.4.4 非结构化数据的提取 196
4.4.5 黑夜中的眼睛 217
4.5 处理JavaScript 229
4.5.1 示例:电商产品爬虫 230
4.5.2 Selenium和PhantomJS 235
4.5.3 Scrapy与Splash 259
4.6 数据存储与后处理 292
4.6.1 图片的下载与存储 293
4.6.2 示例:产品图片采集 298
4.6.3 导出到数据文件 299
4.6.4 导出到数据库 302
4.6.5 示例:基于阿里云的存储后端 308
第5章 高阶虫术 324
5.1 增量式爬网 325
5.1.1 推演路由 326
5.1.2 时机的重要性 328
5.1.3 去重处理 329
5.1.4 布隆过滤器 331
5.1.5 基于Redis的布隆过滤器 336
5.2 突破封印 340
5.2.1 封禁浅析 343
5.2.2 客户端仿真 346
5.2.3 化身万千——蜘蛛世界的易容术 356
5.2.4 反跟踪 377
5.2.5 绕开蜜罐 380
5.3 虫海 385
5.3.1 分布式爬虫架构 385
5.3.2 认识scrapy-redis 386
5.3.3 示例:分布式电商爬虫 390
5.4 可视化爬虫 393
5.4.1 示例:某点评网爬虫 397
5.4.2 解读Portia爬虫代码 402
5.4.3 数据项加载器——Item Loaders 410
5.4.4 最后的工作 413