- Python3网络爬虫宝典
- 韦世东
- 3013字
- 2021-03-31 21:34:44
前言
爬虫技术是当今数据时代不可或缺的搬运技术。爬虫技术在金融、房产、科技和贸易等领域中产生了很大的正向作用。企业日益增长的数据需求创造了非常多的爬虫岗位,Python语言的蓬勃发展则造就了一大批优秀的爬虫工程师。
Python语言的学习门槛低,也降低了爬虫技术的学习门槛。爬虫技术的发展与业务需求紧密相连,对于数据量大、数据质量要求高且讲求实效性的团队来说,如何在单位时间内获取到更多数据以及如何确保数据源的稳定性和准确率是一个不小的挑战。其中涉及时间复杂度、空间复杂度、高效率、高可用、高准确率和高稳定性等诸多知识。很多开发者学习爬虫技术时会有“很容易”的感觉,但在实际工作中却处处碰壁,每天都会遇到各种各样的技术挑战。因此,爬虫技术的学习门槛低,但技术上限非常高,工资上限也非常高。
爬虫是一门综合技术,你不仅要学习如何发出网络请求、如何解析网页文本、如何将数据保存到数据库中,还需要掌握能显著提高单体爬取效率的异步I/O知识、能在单位时间内获取到更多数据的分布式爬虫相关知识、保证数据源稳定性的爬虫设计、高准确率的网页正文自动化提取方法、在贴近业务需求情况下优选的有效降低时间复杂度和空间复杂度的方法,以及分布式结构下多个节点通信、文件同步等。
本书内容均来自实际的业务需求,大部分都是爬虫工程师正面临的问题。我希望通过梳理和总结以往工作中的经验,帮助更多开发者了解并掌握在实际工作中需要用到的与爬虫技术相关的知识。
本书内容
本书共6章,各章内容归纳如下。
第1章介绍了爬虫程序的构成和完整链条。首先从一个简单的爬虫程序开始,学习了爬虫工程师常用的网络请求库和文本解析库;然后学习如何将数据分别存入MySQL数据库、MongoDB数据库、Redis数据库和Excel文件;最后以电子工业出版社新闻资讯页爬虫为例,演示了分析、发出网络请求、解析文本和数据入库的完整流程,这为我们后面的学习打下了坚实的基础。
第2章介绍了自动化工具的使用。首先通过一个真实的需求案例了解爬虫工程师为什么需要自动化工具,然后介绍了WebDriver的相关知识,学习了爬虫工程师常用的两款自动化工具——Selenium和Pyppeteer的基本使用。在2.2节我们学习App自动化工具的知识和基本使用,并动手实现了对App文字内容和图片内容的爬取。
第3章介绍了增量爬取的原理与实现。我们从一个真实的爬取需求了解到增量爬取的必要性,然后学习增量爬取的分类和不同增量类型的实现原理。要做增量爬取必然要考虑增量池的时间复杂度或空间复杂度,在3.2节中我们通过一个实际的需求延伸到增量池的时间复杂度和空间复杂度,并从准确的数值中找到合适的增量实现方式。由于Redis的高性能,很多爬虫工程师都会选择Redis作为URL增量池,这时候我们不得不考虑Redis数据持久化的方案,3.3节介绍了Redis持久化方式的分类和特点,并动手实践了不同类型的持久化。
第4章介绍了分布式爬虫的设计与实现。面对海量的数据或者紧迫的时间,我们需要寻找一种稳定、高效的爬取方法,分布式爬虫无疑是我们的最佳选择。在4.1节中,我们通过实际的需求案例了解爬虫工程师为什么需要分布式爬虫、分布式爬虫的原理、分布式爬虫的分类和共享队列的选择等。在4.2节中,我们剖析了爬虫业内著名的Scrapy-Redis库的源码,从而了解到分布式爬虫具体的工程实现。通过第2章的学习,我们了解到Redis在分布式爬虫结构中的应用,于是在4.3节中我们动手实现了对等分布式爬虫和主从分布式爬虫。相对于Redis来说,消息中间件能够确保每一条消息都能被消费,不会产生数据丢失的情况,这使得消息中间件受到很多中高级爬虫工程师的青睐,于是在4.4节中我们学习并动手实践基于消息中间件应用RabbitMQ的分布式爬虫。
第5章介绍了网页正文自动化提取方法。以往我们讨论的都是针对单个网站的聚焦爬虫,每个网站的页面在解析时都需要有一套对应的解析规则,但如果你的上司要求你爬取1000个网站,你该怎么办呢?这时候你需要一个能够帮助你自动识别和提取网页正文的工具——Readability。在5.1节中,我们学习爬虫业内著名的网页正文提取工具Readability的基本使用,并体验到它那“令人惊叹”的正文提取效果。这时候你肯定会好奇,这种工具如何判断哪部分内容是广告,哪部分内容是正文呢?它又是如何清除那些杂乱的文本,最后将正文返回的呢?在5.2节中,我们通过阅读论文《基于文本及符号密度的网页正文提取方法》了解将数学和HTML特性结合到一起的威力——准确率高达99%以上的网页正文提取方法。《基于文本及符号密度的网页正文提取方法》已经有了具体的代码实现,5.3节中我们剖析了GeneralNewsExtractor库的源码,以深入了解《基于文本及符号密度的网页正文提取方法》具体的工程实现,从而掌握这套算法。
第6章介绍了Python项目打包部署与定时调度的相关知识。首先我们从“如何判断项目是否需要部署”开始学习,然后学习爬虫业内著名的爬虫部署平台Scrapyd的基本使用,接着剖析Scrapyd源码,以了解Python项目打包和解包运行的工程实现。爬虫本身的业务特性使得爬虫项目需要用到定时调度,我们在6.5节中学习操作系统级定时调度和编程语言级定时调度的具体实现,同时学习Python领域备受工程师青睐的定时任务库APScheduler的结构和基本使用。掌握了前面讲解的知识后,你一定迫不及待地想要自己编写一款Python领域通用的项目部署与调度平台,在6.6节中,我们将学习如何设计和编码实现一款这样的平台,平台功能包括权限控制、项目打包与部署、定时调度、异常监控和钉钉机器人通知等。6.7节中解析了分布式调度平台Crawlab的核心架构,学习到分布式架构中节点通信、文件同步、任务调度和节点健康监控等知识。相信你在掌握这些知识后,技术能力和工资都将更上一层楼。
阅读建议
这是一本围绕着爬虫具体业务展开的书,书中提到了中高级爬虫工程师在实际工作当中常常遇到的问题和代码实践。这些知识并不具有强连贯性和依赖性,在阅读时可根据自己的需求直接阅读对应的章节,无须按章节顺序逐一阅读。动手实践很重要,千万不要依赖书本提供的代码,如果你在学习过程中能够自己动手写代码,相信你的进步一定会很快。
致谢
本书的顺利编写,得益于家人和朋友的帮助。首先感谢我的家人,我的爸爸妈妈、岳父岳母、夫人、妹妹和我的女儿。有了他们的支持,我才能用心写作。
特别感谢崔庆才(静觅)在我学习路上和写作期间给予的帮助。
感谢开源项目Crawlab作者张冶青(Marvin)为本书提供的技术支持。
感谢夜幕团队队友们对我的帮助,他们是我迷茫时的明灯、三岔路口的指示牌。
感谢匡水平在本书写作期间提供的帮助。
感谢开源项目GeneralNewsExtractor作者谢乾坤(Kingname)为本书提供的技术支持。
感谢在我学习过程中与我探讨技术的各位朋友,QQ群群友和微信群群友,他们对技术的研究和原理探究的精神带动着我,使我学到不少知识。
感谢掘金社区为本书提供的支持。
感谢林瑞和编辑,他在书稿立项和写作过程中给我提供了很多建议和帮助。
感谢在我学习之路和写作过程中提供帮助的每一个人。
免责声明
书中所有内容仅供技术学习与研究,本书提倡读者遵守国家法律法规,切勿将本书讲解的爬虫技术用于非法用途。
相关资源
书中用到的代码片段存放在GitHub仓库,具体网址请在电子工业出版社博文视点官网的本书页面(http://www.broadview.com.cn/39406)下载,代码仓库与本书章节的对应关系可查阅仓库中的README.md文件。
我是一名爬虫工程师,同时也是Python开发者和Golang开发者。我会在微信公众号和技术博客中更新相关的技术文章,欢迎读者访问交流。当然,大家也可以添加我的微信,期待和你共同进步,一起变强!
韦世东
2020年3月
读者服务
微信扫码回复:39406
·获取博文视点学院在线课程、电子书20元代金券
·获取本书配套代码资源
·获取更多技术专家分享视频与学习资源
·加入读者交流群,与其他读者互动