Scrapy:在哪里初始化数据库连接,以便在爬虫、管道和类中可用?

0 投票
1 回答
20 浏览
提问于 2025-04-14 15:45

我有一个比较标准的Scrapy项目,它的目录结构大概是这样的:

my_project
  scrapy.cfg
  my_project
    __init__.py
    items.py
    itemsloaders.py
    middlewares.py
    MyStatsCollector.py
    pipelines.py
    settings.py
    spiders
      __init__.py
      spider1.py
      spider2.py
      spider3.py

现在,我的数据库连接放在了 my_project/pipelines.py 这个文件里:

import psycopg2
class SaveToPostgresPipeline:
    def __init__(self):
        hostname = ''
        username = ''
        password = ''
        database = ''

然后,爬虫的工作方式是抓取数据,把数据发送到管道,然后保存到数据库里。

现在我需要在爬虫里(spider1.pyspider2.pyspider3.py)和 MyStatsCollector.py 中也从数据库获取一些数据。

我应该在项目的哪个地方设置数据库连接,这样我就可以只初始化一次数据库连接,然后在爬虫、管道或者 MyStatsCollector.py 中使用它。

现在,我唯一的想法是在每个文件里都初始化数据库连接,这样看起来不是很优雅。有什么更好的方法来处理这个问题吗?

1 个回答

0

如果你在爬虫里做这个操作,并把它赋值给爬虫的一个属性,那么你就可以在爬虫内部(这很明显)以及所有获取爬虫实例的组件中访问这个属性,包括数据处理管道和统计收集器。

撰写回答