前言
什么是网络爬虫
狭义的网络爬虫是指从互联网网站上获取信息的程序,如常用的搜索引擎——百度、360、搜狗等。同时,网络爬虫也是一门复合型技术,涉及的技术领域广泛,如JavaScript、HTML、CSS、MySQL、Java等。广义的爬虫技术除狭义的网络爬虫的内容,还包括自动化。在这个概念下,网络爬虫不再只是从目标网站获取链接、图片、文字等信息,甚至不再是为了获取这些信息,而是为了完成某个特定任务,如定时打卡、自动统计、财务计算等。
网络爬虫的应用前景
随着互联网各大平台将网络爬虫列为防御的目标之一,网络爬虫与反爬虫技术开始全面角逐。网络爬虫行业越发地蓬勃发展,爬虫技术不断地更新迭代,同时,网络爬虫的技术体系愈加庞大和完善,不管是互联网的大公司还是小公司,或多或少都对网络爬虫有需求。此外,随着智能时代的到来,得益于RPA(Robotic Process Automation,机器人流程自动化)技术的发展,网络爬虫在自动化领域有着广泛的应用市场,如财务数据的统计分析、后台订单的自动化管理、用户的自动维护等,所以网络爬虫的需求呈现井喷式增长的趋势。
关于本书
本书指出了Python网络爬虫开发从业者的提升方向。在分布式爬虫方面,通过对Scrapy框架源码进行剖析,使读者全面掌握Scrapy的设计理念; 在异步编程方面,从异步编程原理到异步请求,再到数据库、文件读写的异步操作,对全体系做了全面的介绍,并从异步编程的思想上,详细介绍了异步的浏览器自动化工具pyppeteer; 在反爬虫方面,对指纹技术、滑动验证、字体和CSS样式反爬虫技术、动态渲染、图片验证码处理等方面的原理进行剖析,并对其处理方案做深入介绍,其中图片验证码处理还涉及机器学习的内容; 在分布式爬虫的设计上,通过不同的消息中间件设计满足具体业务场景的分布式框架,如基于RabbitMQ的分布式设计、基于Kafka的分布式设计和基于Celery的分布式设计; 在编码和加密方面,讲解编码原理和常用的集中加密算法,如DES、AES、MD5和SHA; 在JavaScript安全分析方面,对目前前端常用的反爬虫措施进行深入分析,同时对目前流程的混淆与还原进行全面的介绍; 在搜索引擎技术方面,对搜索引擎原理、搜索引擎的实现过程进行介绍,并通过Elasticsearch实现一个垂直领域的搜索服务。
各个章节的大致内容如下。
第1章讲解Scrapy的架构和使用方法,深入介绍Scrapy各个组件的工作原理及源码的实现流程,扩展分布式Scrapy的结构及重要组件的工作原理、实现流程,以及中间件开发的关键接口、常用的中间件源码解析。
第2章讲解异步爬虫,重点介绍异步请求和异步文件读写的实现,同时介绍了常用数据库MySQL、Redis、MongoDB的异步操作。
第3章讲解异步的浏览器自动化工具pyppeteer。作为与Selenium齐名的浏览器自动化工具,pyppeteer在一些特殊场景下拥有更出色的性能。
第4章讲解反爬虫的原理及其处理方案,包括设备指纹技术、滑动验证的轨迹识别和轨迹生成算法、字体反爬虫和CSS样式反爬虫的原理和处理方案、动态渲染流程及新的动态渲染处理技术方案、图片验证码的生成和识别训练、IP限制的现状和突破口。
第5章讲解针对具体的业务实现分布式爬虫框架,从消息系统的消息传递方式到基于RabbitMQ、Kafka、Celery的分布式爬虫设计。
第6章讲解编码和加密,主要介绍编码的原理及其发生乱码的原因、常用编码方式的转换和应用、Python实现常用的加密方式
,如DES、3DES、AES、RSA、MD5和SHA。
第7章讲解前端的JavaScript分析,包括常用的前端调试方法和工具、前端使用JavaScript防护的常用措施、基于AST的JavaScript源码混淆原理和还原方法。
第8章讲解搜索引擎技术的原理和架构,以及开源搜索引擎框架Elasticsearch的常用操作,介绍Elasticsearch集群的快速部署、Elasticsearch的常用管理接口,以及Python与之交互的方法。
第9章开发一个搜索引擎的项目,主要涉及Elasticsearch的部署、搜索引擎爬虫的开发、搜索结果的展示等环节。
本书配套源代码请扫描下方二维码下载。
关于作者
我是非科班出身的程序员,中途转行从事Python网络爬虫开发和Python全栈开发工作,从零基础到掌握网络爬虫开发的全体系技术,一路走过很多曲折的道路。编写本书的原因之一是帮助那些与曾经的我一样不知道如何提升技术水平,以及在网络爬虫领域还比较迷茫的读者。在技术道路上没有成功的捷径,如果有,那就是昼夜兼程地学习和实践。希望本书能起到抛砖引玉的效果。我曾就职于Synnex,这是一家优秀的世界五百强公司。在职时,我从事流程自动化方面的工作,遇到了平易近人的领导及一群友好和富有爱心的同事,他们在我的技术提升和视野开阔方面给予了很大的帮助,在这里我十分感谢他们。同时,在个人博客中我不断地总结,并将平时工作中的经验记录在其中。这个习惯也为我编写本书奠定了基础。为了更系统地学习和总结,我萌生了写这本书的想法,这也是编写本书的另一个原因。在离开Synnex,向更高技术台阶奋进的同时,我也开启了本书的编写。
由于我的水平有限,书中不当之处在所难免,欢迎广大同行和读者批评指正。
李科均2023年1月