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

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

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

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

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

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

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

    (建议你用土法子是考虑到你很可能弄不来 webhook 。否则还是建议 webhook
    metamask
        25
    metamask  
       Jul 1, 2020
    如果不考虑其他比较好的办法,快速解决

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

    2 种方法,被动和主动

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

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