我的scrapy脚本是否写入了蜘蛛体中的MySQL数据库而不是通过pipelines.py?这会减慢蜘蛛的速度吗?请注意,我怀疑items.py
上列出了任何项目跟进:如何以及何时调用pipelines.py?在yield语句之后会发生什么?
答案 0 :(得分:1)
它在很大程度上取决于实现,但是如果以一种不会阻止过多的方式实现数据库编写,那么性能就不会有太大差异。
然而,有一个非常巨大的结构差异。 Scrapy的设计philosphy高度鼓励使用中间件和管道,以保持蜘蛛清洁和易于理解。换句话说 - 蜘蛛位应该抓取数据,中间件应该修改请求和响应,管道应该通过一些外部逻辑管道返回数据(比如将它放入数据库或文件中)。
关于你的跟进问题:
如何以及何时调用pipelines.py?在yield语句之后会发生什么?
看看Architectual Overview documentation page,如果您想深入挖掘,您必须了解twisted
异步框架,因为scrapy只是一个围绕它的大型智能框架。
答案 1 :(得分:1)
如果您希望获得最佳性能,请将项目存储在文件中(例如csv),并在爬网完成后将批量插入数据库。对于csv数据,您可以使用mysqlimport
(请参阅MySQL bulk insert from CSV data files)。推荐的方法是在插入时不阻止。这将要求您使用使用Twisted RDBMS API。