第8章 Scrapy编程
到目前为止,我们编写的爬虫主要用于定义爬取数据源的方式以及如何从中抽取信息。除了爬虫外,Scrapy还提供了能够调整其大多数方面功能的机制。比如,你可能会发现自己经常在处理如下的一些问题。
1.你需要从同一个项目的其他爬虫中复制、粘贴大量代码。重复的代码与数据更加相关(比如,执行字段计算),而不是数据源。
2.你需要编写脚本,对Item进行后处理,执行像删除重复条目或后置处理值的事情。
3.你在不同的项目中有重复的代码,用于处理基础架构。比如,你可能需要登录并向专有仓库传输文件,向数据库中添加Item或在爬虫执行完成时触发后置处理操作。
4.你发现Scrapy的某个方面与你希望的功能并不完全一致,你想在自己的大部分项目中使用自定义或变通的方案。
Scrapy开发者所设计的架构,能够为我们解决这些常见的问题。我们将会在本章后续部分研究该架构。不过我们首先介绍支持Scrapy的引擎,该引擎叫作Twisted。
8.1 Scrapy是一个Twisted应用
Scrapy是一个内置使用了Python的Twisted框架的抓取应用。Twisted确实有些与众不同,因为它是事件驱动的,并且鼓励我们编写异步代码。习惯它需要一些时间,不过我们将通过只学习和Scrapy有关的部分,从而让任务变得相对简单一些。我们还可以在错误处理方面轻松一些。GitHub上的完整代码会有更加彻底的错误处理,不过在本书中将忽略该部分。
让我们从头开始。Twisted与众不同
本文详细介绍了Scrapy框架的编程原理,特别是其基于Twisted事件驱动架构,强调了异步I/O在提高性能和并发性方面的优势。通过示例展示了延迟和延迟链的概念,解释了非阻塞I/O如何通过回调和生成器简化编程。此外,文章还概述了Scrapy的架构,包括爬虫、Item管道、下载器中间件和扩展,并讨论了信号机制及其在Scrapy中的应用。最后,通过两个示例展示了如何使用Item管道处理数据和利用信号进行性能监测。
订阅专栏 解锁全文
3万+

被折叠的 条评论
为什么被折叠?



