使用 scrapy 对多个站点爬虫采集,每个站点都创建一个 scrapy 的项目,如果有部分代码或函数多个项目都是通用的时候。应该如何处理呢?

59 天前
 xoxo419

使用 scrapy 对多个站点,每个站点都创建一个 scrapy 的项目,如果有部分代码或函数多个项目都是通用的时候。应该如何处理呢?

场景:每个 scrapy 对应着一个站点,站点是相同类型的。采集的是汽车类型的站点。那每个项目保存数据库的语句都是查不多的。那这些处理的数据和入库的代码基本是相同的。 目前是在采集入库会先对数据做一些处理后入库。

方案 A: 做成第三方库。然后分别在每个项目中去引用。

方案 B:在某一个项目做写一次后,通过脚本把代码复制到其他的项目中。

还有什么更方便的处理方案吗

1418 次点击
所在节点    问与答
9 条回复
EndlessMemory
59 天前
封装出来后调用啊
xoxo419
59 天前
@EndlessMemory #1

封装的代码是写到哪个位置呢

project_scrapy_A 这是 scrapy 项目的根目录

project_scrapy_B

project_common 这个是封装出来的代码 然后 A 和 B 来引用 这样吗
xoxo419
59 天前
clysto
59 天前
@xoxo419 修改 PYTHONPATH 变量就可以访问到 common
xoxo419
59 天前
@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 的路径 。这个步骤用命令去完成。 目前大致感觉就先只能这样处理了
xyfan
59 天前
两种方案差不多吧,做成第三方库你也不会上传到 pip 等地方,还是要复制到新项目中使用
walkeronway
59 天前
单独拉个仓库放公共代码,推到 gitlab ,然后作为模块单独安装导入(pip install git+xxxx.git ,放到 requirements.txt 里面)?或者作为 git submodule 用?
walkeronway
59 天前
哦就是你的方案 A (没看全 orz )
方案 B 不用考虑吧,更新一次公共代码不得所有站点的代码仓库都要改一轮....
clysto
58 天前
@xoxo419 PYTHONPATH="/path/to/common" python project_a_main.py 就可以,不需要写死在 setting.py 里,用环境变量好一点

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1084008

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX