使用 scrapy 对多个站点,每个站点都创建一个 scrapy 的项目,如果有部分代码或函数多个项目都是通用的时候。应该如何处理呢?
场景:每个 scrapy 对应着一个站点,站点是相同类型的。采集的是汽车类型的站点。那每个项目保存数据库的语句都是查不多的。那这些处理的数据和入库的代码基本是相同的。 目前是在采集入库会先对数据做一些处理后入库。
方案 A: 做成第三方库。然后分别在每个项目中去引用。
方案 B:在某一个项目做写一次后,通过脚本把代码复制到其他的项目中。
还有什么更方便的处理方案吗
1
EndlessMemory 30 天前 1
封装出来后调用啊
|
2
xoxo419 OP @EndlessMemory #1
封装的代码是写到哪个位置呢 project_scrapy_A 这是 scrapy 项目的根目录 project_scrapy_B project_common 这个是封装出来的代码 然后 A 和 B 来引用 这样吗 |
5
xoxo419 OP @clysto #4 但这样每部署一台服务器是不是就都需要修改下 PYTHONPATH 变量呢。
现在用的一种方式基本可以实现但还是有一点不太好,就是每次要修改 setting.py 的路径 本地开发的项目结构 scrapy 项目 A |--project_scrapy_A |--|--project_scrapy_A |--|--|--setting.py scrapy 项目 B |--project_scrapy_B .... scrapy 项目中用到的公共代码函数和类等等 |--Project_common |--init.py |--helper.py 项目 A 使用公共项目的方式。 project_scrapy_A/project_scrapy_A/setting.py import sys import os sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../..'))) project_scrapy_A/project_scrapy_A/spider/demo.py from common.helpers import storage_response 部署用的是 gerapy 直接压缩 project_scrapy_a 上传是不行的。 需要把 Project_common 复制到 project_scrapy_a/目录下然后修改 setting.py 的路径 。这个步骤用命令去完成。 目前大致感觉就先只能这样处理了 |
6
xyfan 29 天前
两种方案差不多吧,做成第三方库你也不会上传到 pip 等地方,还是要复制到新项目中使用
|
7
walkeronway 29 天前
单独拉个仓库放公共代码,推到 gitlab ,然后作为模块单独安装导入(pip install git+xxxx.git ,放到 requirements.txt 里面)?或者作为 git submodule 用?
|
8
walkeronway 29 天前
哦就是你的方案 A (没看全 orz )
方案 B 不用考虑吧,更新一次公共代码不得所有站点的代码仓库都要改一轮.... |
9
clysto 29 天前
|