前言
让我来做一个大胆的猜测。下面的两个故事之一会和你的经历有些相似。
你与Scrapy的第一次相遇是在网上搜索类似“Web scraping Python”的内容时。你快速对其进行了浏览,然后想“这太复杂了吧……我只需要一些简单的东西。”接下来,你使用Requests库开发了一个Python脚本,并且挣扎于Beautiful Soup中,但最终还是完成了很酷的工作。它有些慢,所以你让它整夜运行。你重新启动了几次,忽略了一些不完整的链接和非英文字符,到早上的时候,大部分网站已经“骄傲地”存在你的硬盘中了。然而难过的是,不知什么原因,你不想再看到自己写的代码。当你下一次再想抓取某些东西时,则会直接前往scrapy.org,而这一次文档给了你很好的印象。现在你可以感受到Scrapy能够以优雅且轻松的方式解决了你面临的所有问题,甚至还考虑到了你没有想到的问题。你不会再回头了。
另一种情况是,你与Scrapy的第一次相遇是在进行网络爬取项目的研究时。你需要的是健壮、快速的企业级应用,而大部分花哨的一键式网络爬取工具无法满足需求。你希望它简单,但又有足够的灵活性,能够让你为不同源定制不同的行为,提供不同的输出类型,并且能够以自动化的形式保证24/7可靠运行。提供爬取服务的公司似乎太贵了,你觉得使用开源解决方案比固定供应商更加舒服。从一开始,Scrapy就像一个确定的赢家。
无论你是出于何种目的选择了本书,我都很高兴能够在这本专注于Scrapy的图书中遇到你。Scrapy是全世界爬虫专家的秘密。他们知道如何使用它以节省工作时间,提供出色的性能,并且使他们的主机费用达到最低限度。如果你没有太多经验,但是还想实现同样的结果,那么很不幸的是,Google并没有能够帮到你。网络上大多数Scrapy信息要么太简单低效,要么太复杂。对于那些想要了解如何充分利用Scrapy找到准确、易理解且组织良好的信息的人们来说,本书是非常有必要的。我希望本书能够帮助Scrapy社区进一步发展,并使其得以广泛应用。
本书内容
第1章,Scrapy简介,介绍本书和Scrapy,可以让你对该框架及本书剩余部分有一个明确的期望。
第2章,理解HTML和XPath,旨在使爬虫初学者能够快速了解Web相关技术以及我们后续将会使用的技巧。
第3章,爬虫基础,介绍了如何安装Scrapy,并爬取一个网站。我们通过向你展示每一个行动背后的方法和思路,逐步开发该示例。学习完本章之后,你将能够爬取大部分简单的网站。
第4章,从Scrapy到移动应用,展示了如何使用我们的爬虫填充数据库并输出给移动应用。本章过后,你将清晰地认识到爬虫在市场方面所带来的好处。
第5章,迅速的爬虫技巧,展示了更强大的爬虫功能,包括登录、更快速地抓取、消费API以及爬取URL列表。
第6章,部署到Scrapinghub,展示了如何将爬虫部署到Scrapinghub的云服务器中,并享受其带来的可用性、易部署以及可控性等特性。
第7章,配置与管理,以组织良好的表现形式介绍了大量的Scrapy功能,这些功能可以通过Scrapy配置启用或调整。
第8章,Scrapy编程,通过展示如何使用底层的Twisted引擎和Scrapy架构对其功能的各个方面进行扩展,将我们的知识带入一个全新的水平。
第9章,管道秘诀,提供了许多示例,在这里我们修改了Scrapy的一些功能,在不会造成性能退化的情况下,将数据插入到数据库(比如MySQL、Elasticsearch及Redis)、接口API,以及遗留应用中。
第10章,理解Scrapy性能,将帮助我们理解Scrapy的时间是如何花费的,以及我们需要怎么做来提升其性能。
第11章,使用Scrapyd与实时分析进行分布式爬取,这是本书最后一章,展示了如何在多台服务器中使用Scrapyd实现横向扩展,以及如何将爬取得到的数据提供给Apache Spark服务器以执行数据流分析。
阅读本书的前提
为了使本书代码和内容的受众尽可能广泛,我们付出了大量的努力。我们希望提供涉及多服务器和数据库的有趣示例,不过我们并不希望你必须完全了解如何创建它们。我们使用了一个称为Vagrant的伟大技术,用于在你的计算机中自动下载和创建一次性的多服务器环境。我们的Vagrant配置在Mac OS X和Windows上时使用了虚拟机,而在Linux上则是原生运行。
对于Windows和Mac OS X,你需要一个支持Intel或AMD虚拟化技术(VT-x或AMD-v)的64位计算机。大多数现代计算机都没有问题。对于大部分章节来说,你还需要专门为虚拟机准备1GB内存,不过在第9章和第11章中则需要2GB内存。附录A讲解了安装必要软件的所有细节。
Scrapy本身对硬件和软件的需求更加有限。如果你是一位有经验的读者,并且不想使用Vagrant,也可以根据第 3 章的内容在任何操作系统中安装Scrapy,即使其内存十分有限。
当你成功创建Vagrant环境后,无需网络连接,就可以运行本书几乎全部示例了(第4章和第6章的示例除外)。是的,你可以在航班上阅读本书了。
本书读者
本书尝试着去适应广泛的读者群体。它可能适合如下人群:
- 需要源数据驱动应用的互联网创业者;
- 需要抽取数据进行分析或训练模型的数据科学家与机器学习从业者;
- 需要开发大规模爬虫基础架构的软件工程师;
- 想要为其下一个很酷的项目在树莓派上运行Scrapy的爱好者。
就必备知识而言,阅读本书只需要用到很少的部分。在最开始的几章中,本书为那些几乎没有爬虫经验的读者提供了网络技术和爬虫的基础知识。Python易于阅读,对于有其他编程语言基本经验的任何读者来说,与爬虫相关的章节中给出的大部分代码都很易于理解。
坦率地说,我相信如果一个人在心中有一个项目,并且想使用Scrapy的话,他就能够修改本书中的示例代码,并在几个小时之内良好地运行起来,即使这个人之前没有爬虫、Scrapy或Python经验。
在本书的后半部分中,我们将变得更加依赖于Python,此时初学者可能希望在进一步研究之前,先让自己用几个星期的时间丰富Scrapy的基础经验。此时,更有经验的Python/Scrapy开发者将学习使用Twisted进行事件驱动的Python开发,以及非常有趣的Scrapy内部知识。在性能章节,一些数学知识可能会有用处,不过即使没有,大多数图表也能给我们清晰的感受。