【问题标题】:Database connectivity in ScrapyScrapy 中的数据库连接
【发布时间】:2015-10-27 09:43:48
【问题描述】:

Scrapy 文档很好地解释了如何连接到MongoDB Pipeline Example 中的数据库。

如果我编写另一个也需要数据库访问的管道,我将需要创建另一个连接。如果我编写一个下载器中间件(在数据库中记录请求),那是另一个。数据库连接相当昂贵,感觉相当浪费。例如,SQL Alchemy 为此使用了一个连接池。

对于我的问题:有没有更好的方法来建立连接并在扩展、中间件和管道之间重新使用它? Scrapy 的异步特性和默认的 DBAPI2 是否存在任何问题(即:使用twisted.enterprise.adbapi 会更好/无用吗?

我考虑了一个类似于以下内容的扩展(假设通过信号进行正确的函数调用):

import MySQLdb

def __init__(self):
    self.db = MySQLdb.connect('...')

def spider_opened(self, spider):
    spider.db = self.db

def spider_closer(self, spider):
    spider.db.close()

提前致谢。

【问题讨论】:

  • 我也有同样的问题。运气好吗?

标签: python python-2.7 scrapy


【解决方案1】:

您可以将共享代码保存在任意模块中,例如单例,并从您的任何项目管道、下载器中间件、蜘蛛中间件或扩展中调用该代码。

至于twisted.enterprise.adbapi,如果你能胜任任务肯定会更好,以免你的数据库连接阻塞你的爬取。

【讨论】:

    猜你喜欢
    • 2018-09-19
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 2017-07-08
    • 2010-10-26
    相关资源
    最近更新 更多