Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scrapy 通过spider v/s通过pipelines.py写入数据库_Scrapy - Fatal编程技术网

Scrapy 通过spider v/s通过pipelines.py写入数据库

Scrapy 通过spider v/s通过pipelines.py写入数据库,scrapy,Scrapy,我的scrapy脚本在spider的主体中而不是通过pipelines.py写入MySQL数据库,这有关系吗?这会减慢蜘蛛的速度吗?请注意,我怀疑items.py上是否列出了任何项目 跟进:如何以及何时调用pipelines.py?在yield语句之后会发生什么?这在很大程度上取决于实现,但是如果您以一种不会阻塞太多的方式实现数据库写入,那么在性能方面不会有太大的差异 然而,存在着相当大的结构性差异。Scrapy的设计哲学高度鼓励使用中间件和管道,以保持蜘蛛的干净和易懂 换句话说,spider位

我的scrapy脚本在spider的主体中而不是通过pipelines.py写入MySQL数据库,这有关系吗?这会减慢蜘蛛的速度吗?请注意,我怀疑items.py上是否列出了任何项目


跟进:如何以及何时调用pipelines.py?在yield语句之后会发生什么?

这在很大程度上取决于实现,但是如果您以一种不会阻塞太多的方式实现数据库写入,那么在性能方面不会有太大的差异

然而,存在着相当大的结构性差异。Scrapy的设计哲学高度鼓励使用中间件和管道,以保持蜘蛛的干净和易懂


换句话说,spider位应该抓取数据,中间件应该修改请求和响应,管道应该通过一些外部逻辑(比如将返回的数据放入数据库或文件)传递返回的数据

关于你的后续问题:

如何以及何时调用pipelines.py?收益率报表之后会发生什么


请看一看,如果您想更深入地了解,您必须了解
twisted
异步框架,因为scrapy只是围绕它的一个大型智能框架。

它高度依赖于实现,但是,如果您以一种不会阻塞太多的方式实现数据库写入,那么在性能方面就不会有太大的差异

然而,存在着相当大的结构性差异。Scrapy的设计哲学高度鼓励使用中间件和管道,以保持蜘蛛的干净和易懂


换句话说,spider位应该抓取数据,中间件应该修改请求和响应,管道应该通过一些外部逻辑(比如将返回的数据放入数据库或文件)传递返回的数据

关于你的后续问题:

如何以及何时调用pipelines.py?收益率报表之后会发生什么


看一看,如果你想更深入地挖掘,你必须理解
twisted
异步框架,因为scrapy只是围绕它的一个大而智能的框架。

如果你想要最好的性能,将项目存储在一个文件(例如csv)中,并在爬网完成后将它们批量插入数据库。对于csv数据,可以使用
mysqlimport
(请参阅)。建议的方法是插入时不要阻塞。这需要使用使用的管道。

如果希望获得最佳性能,请将项目存储在文件(例如csv)中,并在爬网完成后将其大容量插入数据库。对于csv数据,可以使用
mysqlimport
(请参阅)。建议的方法是插入时不要阻塞。这将要求您使用一个管道,该管道使用。

“管道应该通过一些外部逻辑将返回的数据管道化”——迂腐的,但是,我认为最好使用扩展,更具体地说是一个。是scrapy的默认提要导出位置。管道更多地用于特定于域的业务逻辑,可能会丰富或删除
@neverlastn虽然您正确地认为应该在可用时使用提要导出器,但这并不意味着您不能通过管道进行异步导出-毕竟整个scrapy引擎都在twisted引擎上运行,twisted引擎可以随时访问。内置的饲料出口商也很难扩展。我想更确切地说,我指的是“外部逻辑”是指任何不是页面解析的东西,不必调用外部脚本或程序。我可能有点愤世嫉俗,但对于非常小的爬网以外的任何东西,最简单、足够好的方法是转储到本地文件,并在爬网结束时使用另一种技术批量导入(例如,在单个SQL事务中,只锁定一次)。否则,您将得到大多数人无法正确使用的异步API、奇怪的性能问题和每项对每批/作业导入的模型,这意味着插入性能不好,并且您可能必须消除重复数据或修复损坏的数据,例如,如果您的作业崩溃,您必须重新启动。@neverlastn我同意您的看法,KISS:)不幸的是,这在复杂的生产爬网中并不总是可能的。“管道应该通过一些外部逻辑传递返回的数据”-迂腐的,但是,我想说的是,最好使用扩展,更具体地说是一个。是scrapy的默认提要导出位置。管道更多地用于特定于域的业务逻辑,可能会丰富或删除
@neverlastn虽然您正确地认为应该在可用时使用提要导出器,但这并不意味着您不能通过管道进行异步导出-毕竟整个scrapy引擎都在twisted引擎上运行,twisted引擎可以随时访问。内置的饲料出口商也很难扩展。我想更确切地说,我指的是“外部逻辑”是指任何不是页面解析的东西,不必调用外部脚本或程序。我可能有点愤世嫉俗,但对于非常小的爬网以外的任何东西,最简单、足够好的方法是转储到本地文件,并在爬网结束时使用另一种技术批量导入(例如,在单个SQL事务中,只锁定一次)。否则,您将得到大多数人无法正确使用的异步API、奇怪的性能问题和每项对每批/作业导入的模型,这意味着插入性能不好,并且您可能必须消除重复数据或修复损坏的数据,例如,如果您的作业崩溃,您必须重新启动。@neverlastn我同意您的看法,KISS:)不幸的是,在复杂的生产爬网中,这并不总是可能的。