【发布时间】:2017-08-08 17:00:10
【问题描述】:
我在 Scrapy+Splash 中有一个工作爬虫。它在许多页面上启动蜘蛛。每个页面都包含一个链接列表。对于每个页面,蜘蛛都会下载该页面,然后从该页面链接一些页面(不是递归的)。所有页面都保存在文件系统中。该系统运行完美。目前我正在重构它以添加一些数据库交互。 我没有使用物品,也没有使用物品管道。 使用它们有什么好处?
添加一些信息:
我的爬虫的目的是下载整个页面(以 html、png 或使用库转换为 txt)。一旦蜘蛛有response 要保存,它就会将它传递给一个封装所有io ops(文件系统和数据库)的库。所以通过这种方式,它比使用项目(带有用于转换的样板)和管道更简单。
那么我的怀疑在哪里?
我不知道scrapy在内部的工作方式是否足够好。爬虫的实现方式是将 io ops 执行到蜘蛛的线程中。所以每个蜘蛛需要更长的时间来执行。相反,如果我将 io 操作移动到管道中,也许(?)scrapy 可以更好地安排其作业,将它们与爬行作业分开执行。会有任何真正的性能差异吗?
【问题讨论】:
-
我还红了官方文档,但它没有回答我的问题。我知道我可以使用 Item Pipelines,它们的缺点是:它们需要一些样板代码,它们的优点是......什么?
-
如果我在蜘蛛的数据库上写东西有什么问题?
-
这没有什么问题,但是你用数据库逻辑污染了你的蜘蛛代码。如果你有两只蜘蛛怎么办?您是否复制/粘贴数据库逻辑?这就是管道的用武之地——你的蜘蛛返回字典文档,在管道中你可以应用一些清理逻辑或将它们插入数据库。
-
我编辑了问题
标签: python scrapy web-crawler splash-screen