我将使用scrapy抓取域。我计划用sqlalchemy把所有的信息存储到我的数据库中。每个页面的xpath选择器非常简单,我计划使用HttpCacheMiddleware。
从理论上讲,只要我有来自spider的数据,我就可以将数据插入到我的db中(这至少需要示例化hxs)。这将允许我绕过示例化任何项目子类,所以不会有任何项目通过我的管道。
我认为这样做的好处是:
- CPU密集度更低,因为管道不需要任何CPU处理
1.防止内存泄漏。
磁盘I/O比网络I/O快得多,所以我不认为这会对蜘蛛造成很大影响。
我为什么要使用Scrapy的Item类?
3条答案
按热度按时间e5nszbig1#
如果您直接在spider中插入数据,则spider将阻塞,直到插入数据。如果您创建一个Item并将其传递给Pipeline,则在插入数据时,爬行器可以继续爬行。此外,如果多个spider同时尝试插入数据,则可能会出现竞争条件。
jv4diomz2#
这是一个老问题了,但我觉得投票结果不太正确。
我为什么要使用Scrapy的
Item
类?Web抓取的Scrapy模型本质上是:
1.用spider收集数据
1.将数据绑定到项中。
1.使用项管道处理这些项。
1.用另一个项目管道将这些项目存储在某个地方。
步骤3和4包括“大”项流水线。如果你没有子类化
Item
,你就不能在条目管道中输入一个对象,所以你必须规范化字段并将条目插入到你的数据库中,所有这些都在你的蜘蛛中完成。如果你 do 子类
Item
,你可以让你的项目处理代码更容易维护:c90pui9n3#
好吧,如果你在同一个项目中有多个蜘蛛,如果你想/需要更改项目,拥有一个项目可以更容易地管理它。假设你想添加项目,并已声明项目,你可以在一个地方做所有。否则,您将需要在项目中的每个蜘蛛中执行此操作。但对于较小的项目来说,显然不是这样。