我将使用 scrapy 来抓取域。我计划使用 sqlalchemy 将所有这些信息存储到我的数据库中。每页的 xpath 选择器非常简单,我打算使用 HttpCacheMiddleware。
理论上,一旦我从蜘蛛那里获得数据,我就可以将数据插入我的数据库(这至少需要实例化 hxs)。这将允许我绕过实例化任何 Item 子类,因此不会有任何项目通过我的管道。
我认为这样做的好处是:
- CPU 密集度较低,因为管道不会有任何 CPU 处理
- 防止内存泄漏。
磁盘 I/O 比网络 I/O 快很多,所以我认为这不会对蜘蛛产生太大影响。
为什么我想使用 Scrapy 的 Item 类?
请您参考如下方法:
如果您直接在蜘蛛内部插入,那么您的蜘蛛将阻塞直到插入数据。如果您创建一个 Item 并将其传递给 Pipeline,则蜘蛛可以在插入数据的同时继续爬行。此外,如果多个蜘蛛试图同时插入数据,则可能会出现竞争条件。
