书籍作者:崔庆才 | ISBN:9787115480347 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:2676 |
创建日期:2021-02-14 | 发布日期:2021-02-14 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
本书介绍了如何利用Python 3开发网络爬虫,书中首先介绍了环境配置和基础知识,然后讨论了urllib、requests、正则表达式、Beautiful Soup、XPath、pyquery、数据存储、Ajax数据爬取等内容,接着通过多个案例介绍了不同场景下如何实现数据爬取,最后介绍了pyspider框架、Scrapy框架和分布式爬虫。
本书适合Python程序员阅读。
崔庆才
北京航空航天大学硕士,静觅博客(https://cuiqingcai.com/)博主,爬虫博文访问量已过百万,喜欢钻研,热爱生活,乐于分享。欢迎关注个人微信公众号“进击的Coder”。
案例丰富,注重实战
博客文章过百万的静觅大神力作
全面介绍了数据采集、数据存储、动态网站爬取、App爬取、验证码破解、模拟登录、代理使用、爬虫框架、分布式爬取等知识
涉及的库或工具:urllib、requests、Beautiful Soup、XPath、pyquery、redis-py、PyMongo、PyMySQL、Selenium、Splash、Charles、mitmproxy、mitmdump、Appium、pyspider、Scrapy、Scrapy-Redis、Scrapy-Splash、Docker、Bloom Filter、Gerapy等
前 言
为什么写这本书
在这个大数据时代,尤其是人工智能浪潮兴起的时代,不论是工程领域还是研究领域,数据已经成为必不可少的一部分,而数据的获取很大程度上依赖于爬虫的爬取,所以爬虫也逐渐变得火爆起来。我是在2015年开始接触爬虫的,当时爬虫其实并没有这么火,我当时觉得能够把想要的数据抓取下来就是一件非常有成就感的事情,而且也可以顺便熟悉Python,一举两得。在学习期间,我将学到的内容做好总结,发表到博客上。随着我发表的内容越来越多,博客的浏览量也越来越多,很多读者对我的博文给予了肯定的评价,这也给我的爬虫学习之路增添了很多动力。在学习的过程中,困难其实还是非常多的,最早学习时使用的是Python 2,当时因为编码问题搞得焦头烂额。另外,那时候相关的中文资料还比较少,很多情况下还得自己慢慢去啃官方文档,走了不少弯路。随着学习的进行,我发现爬虫这部分内容涉及的知识点太多、太杂了。网页的结构、渲染方式不同,我们就得换不同的爬取方案来进行针对性的爬取。另外,网页信息的提取、爬取结果的保存也有五花八门的方案。随着移动互联网的兴起,App的爬取也成了一个热点,而为了提高爬取速度又需要考虑并行爬取、分布式爬取方面的内容,爬虫的通用性、易用性、架构都需要好好优化。这么多杂糅的知识点对于一个爬虫初学者来说,学习的挑战性会非常高,同时学习过程中大家或许也会走我之前走过的弯路,浪费很多时间。后来有一天,图灵的王编辑联系了我,问我有没有意向写一本爬虫方面的书,我听到之后充满了欣喜和期待,这样既能把自己学过的知识点做一个系统整理,又可以跟广大爬虫爱好者分享自己的学习经验,还可以出版自己的作品,于是我很快就答应约稿了。
一开始觉得写书并不是一件那么难的事,后来真正写了才发现其中包含的艰辛。书相比博客来说,用词的严谨性要高很多,而且逻辑需要更加缜密,很多细节必须考虑得非常周全。前前后后写了大半年的时间,审稿和修改又花费了几个月的时间,一路走来甚是不易,不过最后看到书稿成型,觉得这一切都是值得的。在书中,我把我学习爬虫的很多经验都写了进去。环境配置是学习的第一步,环境配置不好,其他工作就没法开展,甚至可能很大程度上打击学习的积极性,所以我在第1章中着重介绍了环境的配置过程。而因为操作系统的不同,环境配置过程又各有不同,所以我把每个系统(Windows、Linux、Mac)的环境配置过程都亲自实践了一遍,并梳理记录下来,希望为各位读者在环境配置时多提供一些帮助。后面我又针对爬虫网站的不同情形分门别类地进行了说明,如Ajax分析爬取、动态渲染页面爬取、App爬取、使用代理爬取、模拟登录爬取等知识,每个知识点我都选取了一些典型案例来说明,以便于读者更好地理解整个过程和用法。为了提高代码编写和爬取的效率,还可以使用一些爬虫框架辅助爬取,所以本书后面又介绍了两个流行的爬虫框架的用法,最后又介绍了一些分布式爬虫及部署方面的知识。总体来说,本书根据我个人觉得比较理想的学习路径介绍了学习爬虫的相关知识,并通过一些实战案例帮助读者更好地理解其中的原理。
本书内容
本书一共分为15章,归纳如下。
? 第1章介绍了本书所涉及的所有环境的配置详细流程,兼顾Windows、Linux、Mac三大平台。本章不用逐节阅读,需要的时候查阅即可。
? 第2章介绍了学习爬虫之前需要了解的基础知识,如HTTP、爬虫、代理的基本原理、网页基本结构等内容,对爬虫没有任何了解的读者建议好好了解这一章的知识。
? 第3章介绍了最基本的爬虫操作,一般学习爬虫都是从这一步学起的。这一章介绍了最基本的两个请求库(urllib和requests)和正则表达式的基本用法。学会了这一章,就可以掌握最基本的爬虫技术了。
? 第4章介绍了页解析库的基本用法,包括Beautiful Soup、XPath、pyquery的基本使用方法,它们可以使得信息的提取更加方便、快捷,是爬虫必备利器。
? 第5章介绍了数据存储的常见形式及存储操作,包括TXT、JSON、CSV各种文件的存储,以及关系型数据库MySQL和非关系型数据库MongoDB、Redis存储的基本存储操作。学会了这些内容,我们可以灵活方便地保存爬取下来的数据。
? 第6章介绍了Ajax数据爬取的过程,一些网页的数据可能是通过Ajax请求API接口的方式加载的,用常规方法无法爬取,本章介绍了使用Ajax进行数据爬取的方法。
? 第7章介绍了动态渲染页面的爬取,现在越来越多的网站内容是经过JavaScript渲染得到的,而原始HTML文本可能不包含任何有效内容,而且渲染过程可能涉及某些JavaScript加密算法,可以使用Selenium、Splash等工具来实现模拟浏览器进行数据爬取的方法。
? 第8章介绍了验证码的相关处理方法。验证码是网站反爬虫的重要措施,我们可以通过本章了解到各类验证码的应对方案,包括图形验证码、极验验证码、点触验证码、微博宫格验证码的识别。
? 第9章介绍了代理的使用方法,限制IP的访问也是网站反爬虫的重要措施。另外,我们也可以使用代理来伪装爬虫的真实IP,使用代理可以有效解决这个问题。通过本章,我们了解到代理的使用方法,还学习了代理池的维护方法,以及ADSL拨号代理的使用方法。
? 第10章介绍了模拟登录爬取的方法,某些网站需要登录才可以看到需要的内容,这时就需要用爬虫模拟登录网站再进行爬取了。本章介绍了最基本的模拟登录方法以及维护一个Cookies池的方法。
? 第11章介绍了App的爬取方法,包括基本的Charles、mitmproxy抓包软件的使用。此外,还介绍了mitmdump对接Python脚本进行实时抓取的方法,以及使用Appium完全模拟手机App的操作进行爬取的方法。
? 第12章介绍了pyspider爬虫框架及用法,该框架简洁易用、功能强大,可以节省大量开发爬虫的时间。本章结合案例介绍了使用该框架进行爬虫开发的方法。
? 第13章介绍了Scrapy爬虫框架及用法。Scrapy是目前使用最广泛的爬虫框架,本章介绍了它的基本架构、原理及各个组件的使用方法,另外还介绍了Scrapy通用化配置、对接Docker的一些方法。
? 第14章介绍了分布式爬虫的基本原理及实现方法。为了提高爬取效率,分布式爬虫是必不可少的,本章介绍了使用Scrapy和Redis实现分布式爬虫的方法。
? 第15章介绍了分布式爬虫的部署及管理方法。方便快速地完成爬虫的分布式部署,可以节省开发者大量的时间。本章结合Scrapy、Scrapyd、Docker、Gerapy等工具介绍了分布式爬虫部署和管理的实现。
致谢
感谢我的父母、导师,没有他们创造的环境,我不可能完成此书的写作。
感谢我的女朋友李园,在我写书期间给了我很多的支持和鼓励。同时她还主导设计了本书的封面,正是她的理解和付出才使本书得以完善。
感谢在我学习过程中与我探讨技术的各位朋友,特别感谢汪海洋先生在我初学爬虫过程中给我提供的指导,特别感谢崔弦毅、苟桃、时猛先生在我写书过程中为我提供的思路和建议。
感谢为本书撰写推荐语的李舟军老师、宋睿华老师、梁斌老师、施水才老师(排名不分先后),感谢你们对本书的支持和推荐。
感谢王军花、陈兴璐编辑,在书稿的审核过程中给我提供了非常多的建议,没有你们的策划和敦促,我也难以顺利完成此书。
感谢为本书做出贡献的每一个人!
相关资源
本书中的所有代码都放在了GitHub(详见https://github.com/Python3WebSpider),书中每个实例对应的章节末也有说明。
本人的个人博客也会更新爬虫相关文章,欢迎读者访问交流,博客地址:https://cuiqingcai.com/。
崔庆才
2018年1月
第1章 开发环境配置 1
1.1 Python 3的安装 1
1.1.1 Windows下的安装 1
1.1.2 Linux下的安装 6
1.1.3 Mac下的安装 8
1.2 请求库的安装 10
1.2.1 requests的安装 10
1.2.2 Selenium的安装 11
1.2.3 ChromeDriver的安装 12
1.2.4 GeckoDriver的安装 15
1.2.5 PhantomJS的安装 17
1.2.6 aiohttp的安装 18
1.3 解析库的安装 19
1.3.1 lxml的安装 19
1.3.2 Beautiful Soup的安装 21
1.3.3 pyquery的安装 22
1.3.4 tesserocr的安装 22
1.4 数据库的安装 26
1.4.1 MySQL的安装 27
1.4.2 MongoDB的安装 29
1.4.3 Redis的安装 36
1.5 存储库的安装 39
1.5.1 PyMySQL的安装 39
1.5.2 PyMongo的安装 39
1.5.3 redis-py的安装 40
1.5.4 RedisDump的安装 40
1.6 Web库的安装 41
1.6.1 Flask的安装 41
1.6.2 Tornado的安装 42
1.7 App爬取相关库的安装 43
1.7.1 Charles的安装 44
1.7.2 mitmproxy的安装 50
1.7.3 Appium的安装 55
1.8 爬虫框架的安装 59
1.8.1 pyspider的安装 59
1.8.2 Scrapy的安装 61
1.8.3 Scrapy-Splash的安装 65
1.8.4 Scrapy-Redis的安装 66
1.9 部署相关库的安装 67
1.9.1 Docker的安装 67
1.9.2 Scrapyd的安装 71
1.9.3 Scrapyd-Client的安装 74
1.9.4 Scrapyd API的安装 75
1.9.5 Scrapyrt的安装 75
1.9.6 Gerapy的安装 76
第2章 爬虫基础 77
2.1 HTTP基本原理 77
2.1.1 URI和URL 77
2.1.2 超文本 78
2.1.3 HTTP和HTTPS 78
2.1.4 HTTP请求过程 80
2.1.5 请求 82
2.1.6 响应 84
2.2 网页基础 87
2.2.1 网页的组成 87
2.2.2 网页的结构 88
2.2.3 节点树及节点间的关系 90
2.2.4 选择器 91
2.3 爬虫的基本原理 93
2.3.1 爬虫概述 93
2.3.2 能抓怎样的数据 94
2.3.3 JavaScript渲染页面 94
2.4 会话和Cookies 95
2.4.1 静态网页和动态网页 95
2.4.2 无状态HTTP 96
2.4.3 常见误区 98
2.5 代理的基本原理 99
2.5.1 基本原理 99
2.5.2 代理的作用 99
2.5.3 爬虫代理 100
2.5.4 代理分类 100
2.5.5 常见代理设置 101
第3章 基本库的使用 102
3.1 使用urllib 102
3.1.1 发送请求 102
3.1.2 处理异常 112
3.1.3 解析链接 114
3.1.4 分析Robots协议 119
3.2 使用requests 122
3.2.1 基本用法 122
3.2.2 高级用法 130
3.3 正则表达式 139
3.4 抓取猫眼电影排行 150
第4章 解析库的使用 158
4.1 使用XPath 158
4.2 使用Beautiful Soup 168
4.3 使用pyquery 184
第5章 数据存储 197
5.1 文件存储 197
5.1.1 TXT文本存储 197
5.1.2 JSON文件存储 199
5.1.3 CSV文件存储 203
5.2 关系型数据库存储 207
5.2.1 MySQL的存储 207
5.3 非关系型数据库存储 213
5.3.1 MongoDB存储 214
5.3.2 Redis存储 221
第6章 Ajax数据爬取 232
6.1 什么是Ajax 232
6.2 Ajax分析方法 234
6.3 Ajax结果提取 238
6.4 分析Ajax爬取今日头条街拍美图 242
第7章 动态渲染页面爬取 249
7.1 Selenium的使用 249
7.2 Splash的使用 262
7.3 Splash负载均衡配置 286
7.4 使用Selenium爬取淘宝商品 289
第8章 验证码的识别 298
8.1 图形验证码的识别 298
8.2 极验滑动验证码的识别 301
8.3 点触验证码的识别 311
8.4 微博宫格验证码的识别 318
第9章 代理的使用 326
9.1 代理的设置 326
9.2 代理池的维护 333
9.3 付费代理的使用 347
9.4 ADSL拨号代理 351
9.5 使用代理爬取微信公众号文章 364
第10章 模拟登录 379
10.1 模拟登录并爬取GitHub 379
10.2 Cookies池的搭建 385
第11章 App的爬取 398
11.1 Charles的使用 398
11.2 mitmproxy的使用 405
11.3 mitmdump爬取“得到”App电子书
信息 417
11.4 Appium的基本使用 423
11.5 Appium爬取微信朋友圈 433
11.6 Appium+mitmdump爬取京东商品 437
第12章 pyspider框架的使用 443
12.1 pyspider框架介绍 443
12.2 pyspider的基本使用 445
12.3 pyspider用法详解 459
第13章 Scrapy框架的使用 468
13.1 Scrapy框架介绍 468
13.2 Scrapy入门 470
13.3 Selector的用法 480
13.4 Spider的用法 486
13.5 Downloader Middleware的用法 487
13.6 Spider Middleware的用法 494
13.7 Item Pipeline的用法 496
13.8 Scrapy对接Selenium 506
13.9 Scrapy对接Splash 511
13.10 Scrapy通用爬虫 516
13.11 Scrapyrt的使用 533
13.12 Scrapy对接Docker 536
13.13 Scrapy爬取新浪微博 541
第14章 分布式爬虫 555
14.1 分布式爬虫原理 555
14.2 Scrapy-Redis源码解析 558
14.3 Scrapy分布式实现 564
14.4 Bloom Filter的对接 569
第15章 分布式爬虫的部署 577
15.1 Scrapyd分布式部署 577
15.2 Scrapyd-Client的使用 582
15.3 Scrapyd对接Docker 583
15.4 Scrapyd批量部署 586
15.5 Gerapy分布式管理 590
作为技术博客是五颗星 作为爬虫参考书是四颗星 作为易读实用是三颗星 作为一本“书”是两颗星 作为值得反复翻阅、上书架的是一颗星。 这本书很好的体现了中国人写的书和外国人,尤其是美国人写的书的差别,看《python网络数据采集》看到高潮,很来劲地去搜各种扩展技术要点,而这本书我看得只有头大!
2018-04-20