新書推薦:
《
人生解忧:佛学入门四十讲
》
售價:NT$
490.0
《
东野圭吾:分身(东野圭吾无法再现的双女主之作 奇绝瑰丽、残忍又温情)
》
售價:NT$
295.0
《
浪潮将至
》
售價:NT$
395.0
《
在虚无时代:与马克斯·韦伯共同思考
》
售價:NT$
260.0
《
日内交易与波段交易的资金风险管理
》
售價:NT$
390.0
《
自然信息图:一目了然的万物奇观
》
售價:NT$
640.0
《
经纬度丛书·州县之民:治乱之间的小民命运
》
售價:NT$
440.0
《
女性史:古代卷(真正意义上的女性大历史)
》
售價:NT$
560.0
|
編輯推薦: |
案例丰富,注重实战
博客文章过百万的静觅大神力作
全面介绍了数据采集、数据存储、动态网站爬取、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等
|
內容簡介: |
本书介绍了如何利用Python 3开发网络爬虫,书中首先介绍了环境配置和基础知识,然后讨论了urllib、requests、正则表达式、Beautiful Soup、XPath、pyquery、数据存储、Ajax数据爬取等内容,接着通过多个案例介绍了不同场景下如何实现数据爬取,*后介绍了pyspider框架、Scrapy框架和分布式爬虫。
本书适合Python程序员阅读。
|
關於作者: |
崔庆才
北京航空航天大学硕士,静觅博客(https:cuiqingcai.com)博主,爬虫博文访问量已过百万,喜欢钻研,热爱生活,乐于分享。欢迎关注个人微信公众号进击的Coder。
|
目錄:
|
第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和URL77
2.1.2 超文本78
2.1.3 HTTP和HTTPS78
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 会话和Cookies95
2.4.1 静态网页和动态网页95
2.4.2 无状态HTTP96
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 使用urllib102
3.1.1 发送请求102
3.1.2 处理异常112
3.1.3 解析链接114
3.1.4 分析Robots协议119
3.2 使用requests122
3.2.1 基本用法122
3.2.2 高级用法130
3.3 正则表达式139
3.4 抓取猫眼电影排行150
第4章 解析库的使用158
4.1 使用XPath158
4.2 使用Beautiful Soup168
4.3 使用pyquery184
第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 什么是Ajax232
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 模拟登录并爬取GitHub379
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对接Selenium506
13.9 Scrapy对接Splash511
13.10 Scrapy通用爬虫516
13.11 Scrapyrt的使用533
13.12 Scrapy对接Docker536
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对接Docker583
15.4 Scrapyd批量部署586
15.5 Gerapy分布式管理590
|
內容試閱:
|
前言
为什么写这本书
在这个大数据时代,尤其是人工智能浪潮兴起的时代,不论是工程领域还是研究领域,数据已经成为必不可少的一部分,而数据的获取很大程度上依赖于爬虫的爬取,所以爬虫也逐渐变得火爆起来。我是在2015年开始接触爬虫的,当时爬虫其实并没有这么火,我当时觉得能够把想要的数据抓取下来就是一件非常有成就感的事情,而且也可以顺便熟悉Python,一举两得。在学习期间,我将学到的内容做好总结,发表到博客上。随着我发表的内容越来越多,博客的浏览量也越来越多,很多读者对我的博文给予了肯定的评价,这也给我的爬虫学习之路增添了很多动力。在学习的过程中,困难其实还是非常多的,最早学习时使用的是Python 2,当时因为编码问题搞得焦头烂额。另外,那时候相关的中文资料还比较少,很多情况下还得自己慢慢去啃官方文档,走了不少弯路。随着学习的进行,我发现爬虫这部分内容涉及的知识点太多、太杂了。网页的结构、渲染方式不同,我们就得换不同的爬取方案来进行针对性的爬取。另外,网页信息的提取、爬取结果的保存也有五花八门的方案。随着移动互联网的兴起,App的爬取也成了一个热点,而为了提高爬取速度又需要考虑并行爬取、分布式爬取方面的内容,爬虫的通用性、易用性、架构都需要好好优化。这么多杂糅的知识点对于一个爬虫初学者来说,学习的挑战性会非常高,同时学习过程中大家或许也会走我之前走过的弯路,浪费很多时间。后来有一天,图灵的王编辑联系了我,问我有没有意向写一本爬虫方面的书,我听到之后充满了欣喜和期待,这样既能把自己学过的知识点做一个系统整理,又可以跟广大爬虫爱好者分享自己的学习经验,还可以出版自己的作品,于是我很快就答应约稿了。
一开始觉得写书并不是一件那么难的事,后来真正写了才发现其中包含的艰辛。书相比博客来说,用词的严谨性要高很多,而且逻辑需要更加缜密,很多细节必须考虑得非常周全。前前后后写了大半年的时间,审稿和修改又花费了几个月的时间,一路走来甚是不易,不过最后看到书稿成型,觉得这一切都是值得的。在书中,我把我学习爬虫的很多经验都写了进去。环境配置是学习的第一步,环境配置不好,其他工作就没法开展,甚至可能很大程度上打击学习的积极性,所以我在第1章中着重介绍了环境的配置过程。而因为操作系统的不同,环境配置过程又各有不同,所以我把每个系统(Windows、Linux、Mac)的环境配置过程都亲自实践了一遍,并梳理记录下来,希望为各位读者在环境配置时多提供一些帮助。后面我又针对爬虫网站的不同情形分门别类地进行了说明,如Ajax分析爬取、动态渲染页面爬取、App爬取、使用代理爬取、模拟登录爬取等知识,每个知识点我都选取了一些典型案例来说明,以便于读者更好地理解整个过程和用法。为了提高代码编写和爬取的效率,还可以使用一些爬虫框架辅助爬取,所以本书后面又介绍了两个流行的爬虫框架的用法,最后又介绍了一些分布式爬虫及部署方面的知识。总体来说,本书根据我个人觉得比较理想的学习路径介绍了学习爬虫的相关知识,并通过一些实战案例帮助读者更好地理解其中的原理。
本书内容
本书一共分为15章,归纳如下。
q 第1章介绍了本书所涉及的所有环境的配置详细流程,兼顾Windows、Linux、Mac三大平台。本章不用逐节阅读,需要的时候查阅即可。
q 第2章介绍了学习爬虫之前需要了解的基础知识,如HTTP、爬虫、代理的基本原理、网页基本结构等内容,对爬虫没有任何了解的读者建议好好了解这一章的知识。
q 第3章介绍了最基本的爬虫操作,一般学习爬虫都是从这一步学起的。这一章介绍了最基本的两个请求库(urllib和requests)和正则表达式的基本用法。学会了这一章,就可以掌握最基本的爬虫技术了。
q 第4章介绍了页解析库的基本用法,包括Beautiful Soup、XPath、pyquery的基本使用方法,它们可以使得信息的提取更加方便、快捷,是爬虫必备利器。
q 第5章介绍了数据存储的常见形式及存储操作,包括TXT、JSON、CSV各种文件的存储,以及关系型数据库MySQL和非关系型数据库MongoDB、Redis存储的基本存储操作。学会了这些内容,我们可以灵活方便地保存爬取下来的数据。
q 第6章介绍了Ajax数据爬取的过程,一些网页的数据可能是通过Ajax请求API接口的方式加载的,用常规方法无法爬取,本章介绍了使用Ajax进行数据爬取的方法。
q 第7章介绍了动态渲染页面的爬取,现在越来越多的网站内容是经过JavaScript渲染得到的,而原始HTML文本可能不包含任何有效内容,而且渲染过程可能涉及某些JavaScript加密算法,可以使用Selenium、Splash等工具来实现模拟浏览器进行数据爬取的方法。
q 第8章介绍了验证码的相关处理方法。验证码是网站反爬虫的重要措施,我们可以通过本章了解到各类验证码的应对方案,包括图形验证码、极验验证码、点触验证码、微博宫格验证码的识别。
q 第9章介绍了代理的使用方法,限制IP的访问也是网站反爬虫的重要措施。另外,我们也可以使用代理来伪装爬虫的真实IP,使用代理可以有效解决这个问题。通过本章,我们了解到代理的使用方法,还学习了代理池的维护方法,以及ADSL拨号代理的使用方法。
q 第10章介绍了模拟登录爬取的方法,某些网站需要登录才可以看到需要的内容,这时就需要用爬虫模拟登录网站再进行爬取了。本章介绍了最基本的模拟登录方法以及维护一个Cookies池的方法。
q 第11章介绍了App的爬取方法,包括基本的Charles、mitmproxy抓包软件的使用。此外,还介绍了mitmdump对接Python脚本进行实时抓取的方法,以及使用Appium完全模拟手机App的操作进行爬取的方法。
q 第12章介绍了pyspider爬虫框架及用法,该框架简洁易用、功能强大,可以节省大量开发爬虫的时间。本章结合案例介绍了使用该框架进行爬虫开发的方法。
q 第13章介绍了Scrapy爬虫框架及用法。Scrapy是目前使用最广泛的爬虫框架,本章介绍了它的基本架构、原理及各个组件的使用方法,另外还介绍了Scrapy通用化配置、对接Docker的一些方法。
q 第14章介绍了分布式爬虫的基本原理及实现方法。为了提高爬取效率,分布式爬虫是必不可少的,本章介绍了使用Scrapy和Redis实现分布式爬虫的方法。
q 第15章介绍了分布式爬虫的部署及管理方法。方便快速地完成爬虫的分布式部署,可以节省开发者大量的时间。本章结合Scrapy、Scrapyd、Docker、Gerapy等工具介绍了分布式爬虫部署和管理的实现。
致谢
感谢我的父母、导师,没有他们创造的环境,我不可能完成此书的写作。
感谢我的女朋友李园,在我写书期间给了我很多的支持和鼓励。同时她还主导设计了本书的封面,正是她的理解和付出才使本书得以完善。
感谢在我学习过程中与我探讨技术的各位朋友,特别感谢汪海洋先生在我初学爬虫过程中给我提供的指导,特别感谢崔弦毅、苟桃、时猛先生在我写书过程中为我提供的思路和建议。
感谢为本书撰写推荐语的李舟军老师、宋睿华老师、梁斌老师、施水才老师(排名不分先后),感谢你们对本书的支持和推荐。
感谢王军花、陈兴璐编辑,在书稿的审核过程中给我提供了非常多的建议,没有你们的策划和敦促,我也难以顺利完成此书。
感谢为本书做出贡献的每一个人!
相关资源
本书中的所有代码都放在了GitHub(详见https:github.comPython3WebSpider),书中每个实例对应的章节末也有说明。
本人的个人博客也会更新爬虫相关文章,欢迎读者访问交流,博客地址:https:cuiqingcai.com。
崔庆才
2018年1月
|
|