前言
为什么写这本书
当你看前言的时候,不得不说你做出了一个聪明的选择,因为前言中有作者对整本书的概括和学习建议,这会对大家之后的阅读产生事半功倍的效果。在聊这本书之前,首先给大家一个本书所有配套源码和说明的链接:https://github.com/qiyeboy/SpiderBook。大家可以在Github中对不懂的内容进行提问,我会尽可能地帮助大家解决问题。其实在前言开头放这个链接是挺突兀的,不过确实是担心大家不会完整地看完前言。
接下来聊一聊这本书,写这本书的原因来自于我个人的微信公众号:七夜安全博客。我经常在博客园、知乎和微信平台上发布技术文章,分享一些知识和见解,有很多热心的朋友愿意和我进行交流讨论。记得2016年4月初的某一天,有一个朋友在微信后台留言,问我怎样将Python爬虫技术学好,有什么书籍可以推荐。我当时回答了好长一段建议,但是那个朋友依然希望能推荐一本书籍帮助入门和提高。其实我特别能理解初学者的心情,毕竟我也是从初学者走过来的,但是确实挺纠结,不知从何推荐。于是,我专门找了一下这方面的书籍,只找到一本外国人写的书,中文版刚出版没多久,名字为《Python网络数据采集》。我花了半天看了一下里面的内容,整本书条理比较清晰,容易理解,但是很多知识点都谈得很浅,系统的实战项目基本上没有,更多的是一些代码片段,仅仅适合一些刚刚入门的朋友。自从这件事情以后,我就下定决心写一本Python爬虫方面的书籍,既然国内还没有人写这方面的书籍,我愿意做一个抛砖引玉的人,帮助大家更好地学习爬虫技术。
有了写书的想法后,开始列提纲,确定书的主题和内容。由于爬虫是一项实践性很强的技术,因此书的主题是以实战项目为驱动,由浅及深地讲解爬虫技术,希望你看这本书的时候是个菜鸟,认真学习完之后不再是个菜鸟,可以自主地开发Python爬虫项目了。从写书的那一刻开始,我就知道在书写完之前,我应该是没有周末了。这本书写了大半年的时间,由于我平时有写笔记、做总结的习惯,因此写书的时间不是特别长,不过直到2017年年初我依然在更新内容,毕竟爬虫技术更新得比较快,我努力将比较新的知识贡献给大家。
在写书的过程中,我的内心变得越来越平静,越来越有耐心,不断地修改更新,对每个实战项目进行反复验证和敲定,尽可能地贴近初学者的需求,希望能帮助他们完成蜕变。
最后做一下自我介绍,本人是一位信息安全研究人员,比较擅长网络安全、软件逆向,同时对大数据、机器学习和深度学习有非常浓厚的兴趣,欢迎大家和我交流,共同进步。
前路多艰,学习的道路不可能一帆风顺,爬虫技术只是个开始,愿与诸君一道共克难关。
本书结构
本书总共分为三个部分:基础篇、中级篇和深入篇。
基础篇包括第1~7章,主要讲解了什么是网络爬虫、如何分析静态网站、如何开发一个完整的爬虫。
第1~2章帮助大家回顾了Python和Web方面的知识,主要是为之后的爬虫学习打下基础,毕竟之后要和Python、Web打交道。
第3~5章详细介绍了什么是网络爬虫、如何分析静态网站、如何从HTML页面中提取出有效的数据,以及对如何将数据合理地存储成各类文件以实现持久化。
第6~7章包含了两个实战项目。第一个项目是基础爬虫,也就是一个单机爬虫,功能是爬取百度百科的词条,并据此讲解了一个爬虫所应该具有的全部功能组件以及编码实现。第二个项目是分布式爬虫,功能和基础爬虫一致,在单机爬虫的基础上进行分布式改进,帮助大家从根本上了解分布式爬虫,消除分布式爬虫的神秘感。
中级篇包括第8~14章,主要讲解了三种数据库的存储方式、动态网站的抓取、协议分析和Scrapy爬虫框架。
第8章详细介绍了SQLite、MySQL和MongoDB三种数据库的操作方式,帮助大家实现爬取数据存储的多样化。
第9章主要讲解了动态网站分析和爬取的两种思路,并通过两个实战项目帮助大家理解。
第10章首先探讨了爬虫开发中遇到的两个问题——登录爬取问题和验证码问题,并提供了解决办法和分析实例。接着对Web端的爬取提供了另外的思路,当在PC网页端爬取遇到困难时,爬取方式可以向手机网页端转变。
第11章接着延伸第10章的问题,又提出了两种爬取思路。当在网页站点爬取遇到困难时,爬取思路可以向PC客户端和移动客户端转变,并通过两个实战项目帮助大家了解实施过程。
第12~14章由浅及深地讲解了著名爬虫框架Scrapy的运用,并通过知乎爬虫这个实战项目演示了Scrapy开发和部署爬虫的整个过程。
深入篇为第15~18章,详细介绍了大规模爬取中的去重问题以及如何通过Scrapy框架开发分布式爬虫,最后又介绍了一个较新的爬虫框架PySpider。
第15章主要讲解了海量数据的去重方式以及各种去重方式的优劣比较。
第16~17章详细介绍了如何通过Redis和Scrapy的结合实现分布式爬虫,并通过云起书院实战项目帮助大家了解整个的实现过程以及注意事项。
第18章介绍了一个较为人性化的爬虫框架PySpider,并通过爬取豆瓣读书信息来演示其基本功能。
以上就是本书的全部内容,看到以上介绍之后,是不是有赶快阅读的冲动呢?不要着急,接着往下看。
本书特点及建议
本书总体来说是一本实战型书籍,以大量系统的实战项目为驱动,由浅及深地讲解了爬虫开发中所需的知识和技能。本书是一本适合初学者的书籍,既有对基础知识点的讲解,也涉及关键问题和难点的分析和解决,本书的初衷是帮助初学者夯实基础,实现提高。还有一点要说明,这本书对编程能力是有一定要求的,希望读者尽量熟悉Python编程。
对于学习本书有两点建议,希望能引起读者的注意。第一点,读者可根据自己的实际情况选择性地学习本书的章节,假如之前学过Python或者Web前端的知识,前两章就可以蜻蜓点水地看一下。第二点,本书中的实战项目是根据当时网页的情况进行编写的,可能当书籍出版的时候,网页的解析规则发生改变而使项目代码失效,因此大家从实战项目中应该学习分析过程和编码的实现方式,而不是具体的代码,授人以渔永远比授人以鱼更加有价值,即使代码失效了,大家也可以根据实际情况进行修改。
致谢
写完这本书,才感觉到写书不是一件容易的事情,挺耗费心血的。不过除此之外,更多的是一种满足感,像一种别样的创业,既紧张又刺激,同时也实现了我分享知识的心愿,算是做了一件值得回忆的事情。这是我写的第一本书,希望是一次有益的尝试。
感谢父母的养育之恩,是他们的默默付出支持我走到今天。
感谢我的女朋友,在每个写书的周末都没有办法陪伴她,正是她的理解和支持才让我如此准时地完稿。
感谢长春理工大学电子学会实验室,如果没有当年实验室的培养,没有兄弟们的同甘共苦,就没有今天的我。
感谢西安电子科技大学,它所营造的氛围使我的视野更加开阔,使我的技术水平更上一层楼。
感谢机械工业出版社的吴怡编辑,没有她的信任和鼓励,就没有这本书的顺利出版。
感谢Python中文社区的大力支持。
感谢本书中所用开源项目的作者,正是他们无私的奉献才有了开发的便利。
由于作者水平有限,书中难免有误,欢迎各位业界同仁斧正!