pyspider里数据库密码怎么弄才能安全又不出错,求简单点的设置方法
- 问答
- 2026-01-17 18:43:13
- 2
绝对不要将密码直接写在代码文件里,尤其是当你打算把代码上传到GitHub等公共平台时,写死的密码就等于直接把钥匙挂在门上,非常危险,pyspider的爬虫脚本也是代码,所以这条原则完全适用。
怎样才能既安全又不出错呢?这里推荐几种简单实用的方法,你可以根据自己的情况选择。
使用环境变量(最推荐、最通用)
这个方法的思想是,把密码存放在运行代码的电脑系统的“环境变量”中,然后在pyspider的代码里从这个环境变量去读取,这样,密码本身完全不会出现在代码里。
具体操作步骤:
-
设置环境变量:
- Windows系统:
- 打开“控制面板” -> “系统和安全” -> “系统” -> “高级系统设置”。
- 点击下方的“环境变量”按钮。
- 在“用户变量”或“系统变量”区域,点击“新建”。
- 变量名可以起一个容易识别的,
MY_SPIDER_DB_PASSWORD。 - 变量值就是你的数据库密码。
- 点击“确定”保存。
- Linux/macOS系统:
- 打开终端。
- 编辑你的 shell 配置文件,比如对于 bash,可以编辑
~/.bashrc或~/.bash_profile,对于 zsh,编辑~/.zshrc。 - 在文件末尾添加一行:
export MY_SPIDER_DB_PASSWORD=你的数据库密码 - 保存文件后,执行
source ~/.bashrc(或对应的配置文件)让设置立即生效。
- Windows系统:
-
修改pyspider代码: 在你的pyspider爬虫脚本中,不再是直接写密码,而是使用
os.environ来获取环境变量。# 导入os模块 import os class MySpiderHandler(BaseHandler): @every(minutes=24 * 60) def on_start(self): # 从环境变量读取数据库连接信息 db_host = 'localhost' db_user = 'my_user' # 关键在这里:密码从环境变量获取 db_password = os.environ.get('MY_SPIDER_DB_PASSWORD') db_name = 'my_database' # 连接数据库(这里以MySQL为例) import pymysql self.db = pymysql.connect( host=db_host, user=db_user, password=db_password, # 这里使用的是变量 database=db_name ) self.crawl('http://example.com', callback=self.index_page) # ... 其他代码 ...
这种方法的好处:
- 安全: 密码隔离在代码之外。
- 灵活: 在不同环境(比如你的开发机、测试服务器、生产服务器)可以设置不同的密码,代码无需任何改动。
- 简单: 设置一次,永久受益。
使用配置文件(.gitignore掉)
这个方法是将配置信息(包括密码)单独写在一个配置文件中,config.py 或 config.json,并且确保这个文件被版本控制工具(如Git)忽略。
具体操作步骤:

-
创建配置文件: 在你的pyspider项目目录下,创建一个名为
config.py的文件。# config.py 内容 DB_CONFIG = { 'host': 'localhost', 'user': 'my_user', 'password': '你的超级秘密密码', # 密码写在这里 'database': 'my_database' } -
确保Git忽略此文件: 项目目录下有一个名为
.gitignore的文件(如果没有就新建一个),在里面添加一行:config.py这样,当你用
git add .命令时,config.py就不会被添加到版本库中,从而避免了密码被上传的风险。 -
修改pyspider代码: 在主爬虫脚本中,导入这个配置文件。
# 导入配置文件 from config import DB_CONFIG class MySpiderHandler(BaseHandler): @every(minutes=24 * 60) def on_start(self): # 直接使用配置字典 import pymysql self.db = pymysql.connect(**DB_CONFIG) # **DB_CONFIG 会将字典展开成参数 self.crawl('http://example.com', callback=self.index_page) # ... 其他代码 ...
这种方法的好处:

- 清晰: 所有配置项集中管理,一目了然。
- 方便: 修改配置不用去翻找代码主逻辑。
- 相对安全: 只要确保配置文件在
.gitignore里,就是安全的。
对于pyspider WebUI的数据库密码
上面两种方法主要解决的是爬虫脚本连接业务数据库(存储爬取结果)的问题,pyspider自身还有一个WebUI和内置的结果存储,它也需要连接数据库(默认为SQLite),它的密码配置是在启动pyspider时通过命令行参数或配置文件完成的。
最简单的方法:使用命令行参数
启动pyspider的scheduler(调度器)和webui时,可以通过参数指定数据库连接。
pyspider --taskdb "mysql+mysqlconnector://用户名:密码@localhost:3306数据库名" --resultdb "mysql+mysqlconnector://用户名:密码@localhost:3306数据库名" --projectdb "mysql+mysqlconnector://用户名:密码@localhost:3306数据库名" scheduler pyspider --taskdb "mysql+mysqlconnector://用户名:密码@localhost:3306数据库名" --resultdb "mysql+mysqlconnector://用户名:密码@localhost:3306数据库名" --projectdb "mysql+mysqlconnector://用户名:密码@localhost:3306数据库名" webui
如何让这个命令也安全? 同样,不要把带密码的命令行直接写在脚本里,你可以:
- 将密码设为环境变量,然后在shell脚本中引用:
#!/bin/bash export DB_PASS="你的密码" pyspider --taskdb "mysql+mysqlconnector://user:${DB_PASS}@localhost/dbname" ... scheduler - 或者,使用pyspider的配置文件(
pyspider.json),在配置文件中写好连接字符串,然后启动时指定配置文件,同样,这个配置文件需要被妥善保管,不能上传到公开仓库。
总结与最终建议
对于初学者或者追求简单安全的用户,我强烈推荐 方法一(环境变量)。
- 给你的爬虫脚本用: 用
os.environ.get('你的变量名')来读取数据库密码。 - 给pyspider系统本身用: 在启动scheduler和webui的命令中,通过环境变量来构造数据库连接字符串。
这样做的好处是统一了安全管理方式,无论是你的业务逻辑还是框架配置,都遵循同一套安全规范,你只需要在部署代码的服务器上正确设置一次环境变量,之后就再也不用担心密码泄露的问题了,安全无小事,从这些简单的习惯做起,能避免很多不必要的麻烦。
本文由畅苗于2026-01-17发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://www.haoid.cn/wenda/82572.html
