Scrapy:为什么要使用管道?
我在Scrapy + Splash中有一个可用的爬虫。它在许多页面上启动了一个蜘蛛。每个页面都包含一个链接列表。对于每一页蜘蛛下载的页面,然后,一些页面链接(不递归)。所有页面都保存在文件系统上。该系统完美无瑕。目前我正在重构它来添加一些数据库交互。 我没有使用物品,也没有物品管道。 使用它们有什么好处?Scrapy:为什么要使用管道?
添加一些信息: 我的抓取工具的目的是下载整个页面(以html,png或使用库转换为txt)。只要蜘蛛具有要保存的response
,它就会将其传递给封装了所有io操作(文件系统和数据库)的库。所以通过这种方式,它比使用项目(用于转换的样板)和管道更简单。 那么我的疑问呢? 我不知道scrapy足够好用的方式。爬行器的实现方式是将io操作执行到蜘蛛的线程中。所以每个蜘蛛需要更长的时间来执行。如果我将io操作转移到流水线,相反,也许(?)scrapy可以更好地安排其工作,与爬行工作分开执行。会有真正的性能差异吗?
在我看来,使用管道只是遵循separation of concerns的原则。你的蜘蛛可以做很多事情,但它的核心功能是从网页中提取信息。其余部分可能(也可能应该)被重构为流水线或扩展。
如果你有一个蜘蛛网站可能不是这样的问题。但想象一下,您有一个Scrapy项目,其中包含数百个用于语义相似的网站的蜘蛛程序,并且您希望为每个项目应用相同的逻辑 - 获取页面快照,检查重复项,存储在数据库等中。现在想象一下维护地狱如果你拥有每个蜘蛛的所有逻辑,并且必须改变这个逻辑。
我编辑了问题 – chairam
检查[官方文档](https://doc.scrapy.org/en/latest/topics/item-pipeline.html)。 – Granitosaurus
我红色的官方文件呢,它不回答我的问题。我知道我可以使用Item Pipelines,它们的缺点是:它们需要一些样板代码,它们的优点是...什么? – chairam
如果我在蜘蛛的数据库上写了什么,如果有什么不对? – chairam