V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
zzxy001
V2EX  ›  Python

请教一下如何对多个服务器上的爬虫进行管理

  •  
  •   zzxy001 · 2020-07-01 16:25:30 +08:00 · 3843 次点击
    这是一个创建于 1606 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我最近遇到一个问题。我用 python 写了一个 selenium 爬虫,自动处理一些任务。现在放在 4 个 windows 服务器上,
    我更新爬虫文件都是用远程桌面连接,将新代码复制粘贴进去,然后关闭正在运行的爬虫程序,再打开新更换的。
    现在还好,以后服务器多了,这样手动维护总感觉不太对劲。
    请教一下有什么好的办法没有?如何能够自动更新代码并在更新后自动重启爬虫 python 程序?有什么工具可以使用吗?谢谢!
    30 条回复    2020-07-02 09:26:38 +08:00
    Latin
        1
    Latin  
       2020-07-01 16:27:32 +08:00   ❤️ 1
    稍等会,会有人过来推荐的
    zzxy001
        2
    zzxy001  
    OP
       2020-07-01 16:30:16 +08:00
    还请大佬们指点迷津,百度了半天也没找到好的解决办法
    scukmh
        3
    scukmh  
       2020-07-01 16:32:29 +08:00
    webhook 它不香嘛?
    Ultraman
        4
    Ultraman  
       2020-07-01 16:33:06 +08:00 via Android
    不负责任猜测哦,开个 git 仓库,本地改完推上去,服务端写个脚本定时往回拉然后关掉旧的开新的。虽然比较糙。
    wysnylc
        5
    wysnylc  
       2020-07-01 16:36:27 +08:00
    所有的项目最终都要考虑分布式
    lenqu
        6
    lenqu  
       2020-07-01 16:38:02 +08:00
    容器化解决的就是这个问题,常规 k8s,简单 shell 脚本就能实现
    zzxy001
        7
    zzxy001  
    OP
       2020-07-01 16:42:07 +08:00
    目前是这个问题,以后项目可能需要根据任务的不同动态启动不同的 selenium 爬虫程序,让每个服务器都不会空闲。
    我属于小白一个,感谢大家。大家提的建议我都会去百度学习,看看能不能实现我想要的功能
    zzxy001
        8
    zzxy001  
    OP
       2020-07-01 16:43:40 +08:00
    @lenqu 能不能稍微详细讲一下思路,我从哪里可以入手
    MrTreasure
        9
    MrTreasure  
       2020-07-01 16:44:44 +08:00
    找一个 ssh 的库,写脚本,把你这些手动操作的步骤都写成脚本
    zzxy001
        10
    zzxy001  
    OP
       2020-07-01 16:46:44 +08:00
    @MrTreasure 是 shell 脚本可以完成这些步骤吗?
    zzxy001
        11
    zzxy001  
    OP
       2020-07-01 16:51:42 +08:00
    @MrTreasure 刚刚初步搜了一下,shell 脚本是 Linux 系统,window 可以用吗
    la2la
        12
    la2la  
       2020-07-01 17:00:03 +08:00
    使用工具是有成本的,如果服务器或者爬虫的数量不是特别多的话,可以写个脚本,在开发环境测试后,运行脚本把文件分配到服务器上,顺便重启。
    raphael008
        13
    raphael008  
       2020-07-01 17:06:31 +08:00
    linux->ansible
    windows->powershell
    matepi
        14
    matepi  
       2020-07-01 17:12:23 +08:00
    搭 Git

    爬虫的任务进程以外,再开个守护性进程。守护进程负责从 Git 上拉;拉完杀了重启任务进程

    守护性进程还可以做些例行任务管控、查询任务进度之类的的动作,和爬虫执行任务进程解耦分离

    守护进程挂到 windows 服务自启。
    kalago
        15
    kalago  
       2020-07-01 17:13:15 +08:00
    scrapyd 不能满足你这个需求吗?
    Saurichthys
        16
    Saurichthys  
       2020-07-01 17:32:47 +08:00
    xx-job 维护就好了
    luocjv
        17
    luocjv  
       2020-07-01 17:33:09 +08:00   ❤️ 1
    代码加版本控制推荐 git, 可以自己搭建 gitlab 或者用 github 之类的,然后改完代码用 webhook 触发多个服务器上的更新代码脚本并重启服务
    wiken
        18
    wiken  
       2020-07-01 18:00:14 +08:00
    git + webhook
    tikazyq
        19
    tikazyq  
       2020-07-01 18:08:03 +08:00 via iPhone
    分布式爬虫管理平台 crawlab

    https://www.crawlab.cn
    lenqu
        20
    lenqu  
       2020-07-01 18:30:22 +08:00
    @zzxy001 给个现成的用用,portainer,你自己查查
    #### follow NDPS
    gabon
        21
    gabon  
       2020-07-01 21:36:38 +08:00 via Android
    任务调度平台
    qsbaq
        22
    qsbaq  
       2020-07-01 21:50:38 +08:00
    定时每分钟拉取 git 或者 svn 最新的代码
    然后定期用脚本重启爬虫
    ClericPy
        23
    ClericPy  
       2020-07-01 23:04:43 +08:00
    最近正好也在整集群折腾 chrome 爬虫, 不过肯定不会用 selenium 这种过时的东西...

    简单的说, linux 真的太香了, 一开始用的 VPS 是 windows Server 用的 rdp 一开始还觉得有界面挺好的, 安装软件也挺快的... 后来贴代码实在傻, 就又弄了几台 CentOS, 全程 fabric, 线上调试也是 tmux 太简单了, 关键内存利用率高多了

    跑题了, 目前楼上们说的用 git 自动拉代码已经是成本比较低的了, 如果代码不敏感, 自己写个 api 远程下代码对比字符串变化重启服务的小脚本也不是没写过...
    jiejiss
        24
    jiejiss  
       2020-07-01 23:16:33 +08:00
    写个新爬虫从你的服务器上爬取旧爬虫的源码,然后替换+重启 :D

    (建议你用土法子是考虑到你很可能弄不来 webhook 。否则还是建议 webhook
    freakxx
        25
    freakxx  
       2020-07-01 23:17:33 +08:00
    如果不考虑其他比较好的办法,快速解决

    > 将新代码复制粘贴进去,然后关闭正在运行的爬虫程序,再打开新更换的。

    2 种方法,被动和主动

    1.写个 script, 内容:git pull,restart ( kill pid,start );

    2.1 被动:楼上说的,webhook,或者直接用 pipeline ;
    2.2 主动:你直接写个脚本,每分钟自动 git pull 代码,pull 到代码就 restart
    locoz
        26
    locoz  
       2020-07-01 23:33:23 +08:00 via Android   ❤️ 1
    如果考虑到未来的扩展性和方便性,建议上容器化,但是系统最好是换成 Linux 。管理方面简单粗暴点就 docker 自带的那套集群方案,复杂点又想省资源就 k3s,可以结合脚本也可以直接对接 cicd 实现代码更新后自动更新所有服务器的程序。
    opengps
        27
    opengps  
       2020-07-01 23:51:07 +08:00
    搭建成内网共享同一个数据库。各自取数更新标识
    wst
        28
    wst  
       2020-07-02 00:34:07 +08:00 via Android
    简单的分布式爬虫框架 Aragog
    https://www.v2ex.com/t/683324
    phobal
        29
    phobal  
       2020-07-02 08:40:15 +08:00 via iPhone
    GitHub Action 、gitlab 自定义 webhook,或者写个 pipeline,方法不要太多
    zzxy001
        30
    zzxy001  
    OP
       2020-07-02 09:26:38 +08:00
    这个社区的大神就是多,谢谢各位。根据大家的建议我搜索了关键词,找到了一个解决办法附带了 shell 脚本代码的,目前准备先试一试。当然 git 和 webhook 我也会试一试,学习一下新技术
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2813 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 00:10 · PVG 08:10 · LAX 16:10 · JFK 19:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.