我们在开发Scrapy爬虫的时候,会把一些常用配置信息写到settings.py中。
例如爬虫需要把数据存入MongoDB里面,那么我可能会把MongoDB的链接URI写到settings.py中:
MONGODB_URI = 'mongodb://localhost' MONGODB_DB = 'test' MONGODB_COL = 'info'
但在正式的项目中,我们开发爬虫的时候,一般会有一个测试数据库,而爬虫部署以后会有一个正式数据库,他们的URI是不一样的。
这个时候,可能有一些同学会把两个配置信息都写到settings.py中:
MONGODB_URI = 'mongodb://localhost' #MONGODB_URI = 'mongodb://user:password@123.15.43.32:7766' MONGODB_DB = 'test' MONGODB_COL = 'info'
在本地开发的时候,把正式环境的地址注释掉,部署的时候,解除正式环境URI的注释,然后把测试地址注释掉。
这种方式虽然简单直接,但容易忘记。特别是一不小心在本地把测试数据写入了正式环境的数据库,那就麻烦了。
但实际上,Scrapy可以在 scrapy crawl xxx
的时候,传入配置信息。并且这个配置信息拥有最高优先级,即时settings.py中也有相同名字的配置,命令行传入的也会覆盖它。
在命令行传入配置信息的格式为:
scrapy crawl xxx -s MONGODB_URI='mongodb://user:password@123.15.43.32:7766'
当我们这样启动爬虫的时候,爬虫通过 self.settings['MONGODB_URI']
获取到的URI就是正式环境的URI了。