Scrapy:在哪里初始化数据库连接,以便在爬虫、管道和类中可用?
我有一个比较标准的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.py
、spider2.py
、spider3.py
)和 MyStatsCollector.py
中也从数据库获取一些数据。
我应该在项目的哪个地方设置数据库连接,这样我就可以只初始化一次数据库连接,然后在爬虫、管道或者 MyStatsCollector.py
中使用它。
现在,我唯一的想法是在每个文件里都初始化数据库连接,这样看起来不是很优雅。有什么更好的方法来处理这个问题吗?
1 个回答
0
如果你在爬虫里做这个操作,并把它赋值给爬虫的一个属性,那么你就可以在爬虫内部(这很明显)以及所有获取爬虫实例的组件中访问这个属性,包括数据处理管道和统计收集器。