前提:我完全是个新手。所以任何温和的提示都会很感激 :)
因此,我启动了一个 EC2 实例并转储了我在 Python 中构建的抓取工具。我设置了 cronjobs 以按预定间隔运行抓取工具。每次运行时,我的抓取工具都会将一组结果保存到相对本地文件夹(例如db//db1.csv
、db//db2.csv
等)。这些 DB 文件的状态非常重要,因为它们随后被用作编译 API 调用和维护网站的源。
出于测试目的,我也想从本地机器运行我的抓取工具。因此,我试图弄清楚,每当我在本地运行我的抓取工具时,如何确保我拥有可以构建的最新状态的数据库文件——有效地编写一个函数来从我的 EC2 实例下载最新的数据库文件。
我一直scp -i
在cmd
控制台中试验参数,这很好用,因为我能够检索我的文件。但是,我在使用os
或将这些命令包装在 Python 中时遇到了麻烦subprocess
,无法直接运行命令或使用这些命令运行批处理文件。
似乎 Python 被锁定在我的虚拟环境中,无法ssh.exe
在我的 中找到C:/windows/system32/OpenSSH
。我无法解决这个问题,因此从 StackOverflow 线程中意识到,大多数用户使用该paramiko
库直接通过 SSH 进入他们的 EC2 实例。
现在,我觉得我的工作流程过于复杂,必须通过 SSH 下载文件才能使远程和本地主机之间的状态保持一致。我希望将所有数据库迁移到 AWS RDS 上的 PostgreSQL,并以这种方式管理一切。我很想听听大家的想法(基于任何假设),以及未来最好的架构是什么,以便:
- 我可以从远程主机运行我的爬虫程序,并使用 cronjob 安排其运行,自动将新数据广播到网站
- 而且,在本地处理新的代码版本,而不会破坏我的远程数据库状态
我遗漏了什么?我对解决这个问题的想法比实际代码更感兴趣。谢谢!
答案1
将其拆分为两个独立的任务:
- 保持文件同步
- 在本地运行你的爬虫,不用担心同步(假设 #1 能完成它的工作)
为了保持文件同步,我会使用同步- 我使用它来同步笔记本电脑之间的文件,并将其备份到 EC2。它始终运行,只要可以连接,它就会进行同步。适用于 Linux、Windows 和 Mac。
希望有帮助:)