请教一下如何对多个服务器上的爬虫进行管理 - V2EX
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 4434 次点击
    这是一个创建于 2006 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我最近遇到一个问题。我用 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 /td>
        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
    metamask
        25
    metamask  
       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
    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     Solana     3629 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 05:08 PVG 13:08 LAX 21:08 JFK 00:08
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86