python scrapy 里面的settings如何实现代码的抽离, 形成一个 base文件,线上环境文件,测试环境文件
时间: 2024-03-20 09:40:56 浏览: 18
在 Scrapy 中,可以通过使用 Python 模块的方式来实现代码的抽离。具体步骤如下:
1. 创建一个 base.py 文件,用于存放所有环境下都通用的配置项,如:
```python
# base.py
BOT_NAME = 'mybot'
SPIDER_MODULES = ['mybot.spiders']
NEWSPIDER_MODULE = 'mybot.spiders'
ROBOTSTXT_OBEY = False
```
2. 创建一个 prod.py 文件,用于存放线上环境的配置项,如:
```python
# prod.py
from mybot.settings.base import *
LOG_LEVEL = 'WARNING'
```
3. 创建一个 dev.py 文件,用于存放测试环境的配置项,如:
```python
# dev.py
from mybot.settings.base import *
LOG_LEVEL = 'DEBUG'
```
4. 在 Scrapy 的配置文件 settings.py 中,通过 importlib 动态加载不同环境的配置项,如:
```python
# settings.py
import importlib
import os
ENV = os.environ.get('ENV', 'dev') # 获取环境变量,默认为测试环境
base = importlib.import_module('mybot.settings.base')
env = importlib.import_module(f'mybot.settings.{ENV}')
# 合并配置项
settings_dict = {**vars(base), **vars(env)}
for key, value in settings_dict.items():
globals()[key] = value
```
这样,当需要切换环境时,只需要设置环境变量即可,如:
```bash
export ENV=prod
```
这样 Scrapy 在启动时会自动加载 prod.py 文件,覆盖 base.py 中的配置项。