Python中文网

Python 3网络爬虫开发实战

cnpython1280

编程书籍推荐:Python 3网络爬虫开发实战,由人民邮电出版社2018-04-01月出版,本书发行作者信息: 崔庆才 著此次为第1次发行, 国际标准书号为:9787115480347,品牌为人民邮电出版社, 这本书采用平装开本为16开,附件信息:未知,纸张采为胶版纸,全书共有未知页字数万 字,值得推荐的Python Book。

此书内容摘要

本书介绍了如何利用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等


Python 3网络爬虫开发实战图书的目录

第1章开发环境配置1

1.1Python 3的安装1

1.1.1Windows下的安装1

1.1.2Linux下的安装6

1.1.3Mac下的安装8

1.2请求库的安装10

1.2.1requests的安装10

1.2.2Selenium的安装11

1.2.3ChromeDriver的安装12

1.2.4GeckoDriver的安装15

1.2.5PhantomJS的安装17

1.2.6aiohttp的安装18

1.3解析库的安装19

1.3.1lxml的安装19

1.3.2Beautiful Soup的安装21

1.3.3pyquery的安装22

1.3.4tesserocr的安装22

1.4数据库的安装26

1.4.1MySQL的安装27

1.4.2MongoDB的安装29

1.4.3Redis的安装36

1.5存储库的安装39

1.5.1PyMySQL的安装39

1.5.2PyMongo的安装39

1.5.3redis-py的安装40

1.5.4RedisDump的安装40

1.6Web库的安装41

1.6.1Flask的安装41

1.6.2Tornado的安装42

1.7App爬取相关库的安装43

1.7.1Charles的安装44

1.7.2mitmproxy的安装50

1.7.3Appium的安装55

1.8爬虫框架的安装59

1.8.1pyspider的安装59

1.8.2Scrapy的安装61

1.8.3Scrapy-Splash的安装65

1.8.4Scrapy-Redis的安装66

1.9部署相关库的安装67

1.9.1Docker的安装67

1.9.2Scrapyd的安装71

1.9.3Scrapyd-Client的安装74

1.9.4Scrapyd API的安装75

1.9.5Scrapyrt的安装75

1.9.6Gerapy的安装76

第2章爬虫基础77

2.1HTTP基本原理77

2.1.1URI和URL77

2.1.2超文本78

2.1.3HTTP和HTTPS78

2.1.4HTTP请求过程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.3JavaScript渲染页面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.1TXT文本存储197

5.1.2JSON文件存储199

5.1.3CSV文件存储203

5.2关系型数据库存储207

5.2.1MySQL的存储207

5.3非关系型数据库存储213

5.3.1MongoDB存储214

5.3.2Redis存储221

第6章Ajax数据爬取232

6.1什么是Ajax232

6.2Ajax分析方法234

6.3Ajax结果提取238

6.4分析Ajax爬取今日头条街拍美图242

第7章动态渲染页面爬取249

7.1Selenium的使用249

7.2Splash的使用262

7.3Splash负载均衡配置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.4ADSL拨号代理351

9.5使用代理爬取微信公众号文章364

第10章模拟登录379

10.1模拟登录并爬取GitHub379

10.2Cookies池的搭建385

第11章App的爬取398

11.1Charles的使用398

11.2mitmproxy的使用405

11.3mitmdump爬取“得到”App电子书

信息417

11.4Appium的基本使用423

11.5Appium爬取微信朋友圈433

11.6Appium+mitmdump爬取京东商品437

第12章pyspider框架的使用443

12.1pyspider框架介绍443

12.2pyspider的基本使用445

12.3pyspider用法详解459

第13章Scrapy框架的使用468

13.1Scrapy框架介绍468

13.2Scrapy入门470

13.3Selector的用法480

13.4Spider的用法486

13.5Downloader Middleware的用法487

13.6Spider Middleware的用法494

13.7Item Pipeline的用法496

13.8Scrapy对接Selenium506

13.9Scrapy对接Splash511

13.10Scrapy通用爬虫516

13.11Scrapyrt的使用533

13.12Scrapy对接Docker536

13.13Scrapy爬取新浪微博541

第14章分布式爬虫555

14.1分布式爬虫原理555

14.2Scrapy-Redis源码解析558

14.3Scrapy分布式实现564

14.4Bloom Filter的对接569

第15章分布式爬虫的部署577

15.1Scrapyd分布式部署577

15.2Scrapyd-Client的使用582

15.3Scrapyd对接Docker583

15.4Scrapyd批量部署586

15.5Gerapy分布式管理590


部分内容试读

前言

为什么写这本书

在这个大数据时代,尤其是人工智能浪潮兴起的时代,不论是工程领域还是研究领域,数据已经成为必不可少的一部分,而数据的获取很大程度上依赖于爬虫的爬取,所以爬虫也逐渐变得火爆起来。我是在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月


关于此书评价

专业评论:

在互联网软件开发工程师的分类中,爬虫工程师是非常重要的。爬虫工作往往是一个公司核心业务开展的基础,数据抓取下来,才有后续的加工处理和最终展现。此时数据的抓取规模、稳定性、实时性、准确性就显得非常重要。早期的互联网充分开放互联,数据获取的难度很小。随着各大公司对数据资产日益看重,反爬水平也在不断提高,各种新技术不断给爬虫软件提出新的课题。本书作者对爬虫的各个领域都有深刻研究,书中探讨了Ajax数据的抓取、动态渲染页面的抓取、验证码识别、模拟登录等高级话题,同时也结合移动互联网的特点探讨了App的抓取等。更重要的是,本书提供了大量源码,可以帮助读者更好地理解相关内容。强烈推荐给各位技术爱好者阅读!

——梁斌,八友科技总经理


数据既是当今大数据分析的前提,也是各种人工智能应用场景的基础。得数据者得天下,会爬虫者走遍天下也不怕!一册在手,让小白到老司机都能有所收获!

——李舟军,北京航空航天大学教授,博士生导师


本书从爬虫入门到分布式抓取,详细介绍了爬虫技术的各个要点,并针对不同的场景提出了对应的解决方案。另外,书中通过大量的实例来帮助读者更好地学习爬虫技术,通俗易懂,干货满满。强烈推荐给大家!

——宋睿华,微软小冰首席科学家


有人说中国互联网的带宽全给各种爬虫占据了,这说明网络爬虫的重要性以及中国互联网数据封闭垄断的现状。爬是一种能力,爬是为了不爬。

——施水才,北京拓尔思信息技术股份有限公司总裁


书摘内容

《Python 3网络爬虫开发实战》:
我们可以把互联网比作一张大网,而爬虫(即网络爬虫)便是在网上爬行的蜘蛛。把网的节点比作一个个网页,爬虫爬到这就相当于访问了该页面,获取了其信息。可以把节点间的连线比作网页与网页之间的链接关系,这样蜘蛛通过一个节点后,可以顺着节点连线继续爬行到达下一个节点,即通过一个网页继续获取后续的网页,这样整个网的节点便可以被蜘蛛全部爬行到,网站的数据就可以被抓取下来了。
2.3.1 爬虫概述
简单来说,爬虫就是获取网页并提取和保存信息的自动化程序,下面概要介绍一下。
1.获取网页
爬虫首先要做的工作就是获取网页,这里就是获取网页的源代码。源代码里包含了网页的部分有用信息,所以只要把源代码获取下来,就可以从中提取想要的信息了。
前面讲了请求和响应的概念,向网站的服务器发送一个请求,返回的响应体便是网页源代码。所以,最关键的部分就是构造一个请求并发送给服务器,然后接收到响应并将其解析出来,那么这个流程怎样实现呢?总不能手工去截取网页源码吧?
不用担心,Python提供了许多库来帮助我们实现这个操作,如urllib、requests等。我们可以用这些库来帮助我们实现HTTP请求操作,请求和响应都可以用类库提供的数据结构来表示,得到响应之后只需要解析数据结构中的Body部分即可,即得到网页的源代码,这样我们可以用程序来实现获取网页的过程了。
……

Python 3网络爬虫开发实战最新最全的试读、书评、目录、简介信息由Python中文网整理提供。