Python vs Node.js 哪个更适合用于爬虫? - 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
zungmou
V2EX    Python

Python vs Node.js 哪个更适合用于爬虫?

  •  
  •   zungmou 2017-02-27 10:05:38 +08:00 12366 次点击
    这是一个创建于 3198 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Python 的优点是高效,从零到爬半个小时估计就能动起来。

    Node.js 更侧重于 io 处理,但其 Javascript 语言特性也能带来高效的开发体验。

    两者都有不错的异步性能, Python 3 之后已经原生支持协程, Node.js 更不用说了。

    所以这两个用于爬虫,如果都熟练掌握,你会更倾向于哪一个?

    39 条回复    2017-03-04 15:37:24 +08:00
    mooncakejs
        1
    mooncakejs  
       2017-02-27 10:06:57 +08:00
    选 js
    wellsc
        2
    wellsc  
       2017-02-27 10:08:14 +08:00
    c++
    kidlj
        3
    kidlj  
       2017-02-27 10:08:30 +08:00 via iPhone
    node
    zjsxwc
        4
    zjsxwc  
       2017-02-27 10:13:58 +08:00
    额,看你熟练哪种语言呗,我用 php ,毕竟 phpquery 可以像 jquery 一样操作获取到的 html 文本,通过 curl 函数就可以异步或同步的模拟浏览器操作。
    sudoz
        5
    sudoz  
       2017-02-27 10:23:10 +08:00
    js 的好处是可以直接在浏览器里跑,想想就带劲
    zungmou
        6
    zungmou  
    OP
       2017-02-27 10:23:22 +08:00
    @mooncakejs Node.js +1
    @wellsc 不嫌麻烦?
    @kidlj Node.js +1
    @zjsxwc PHP +1
    smallpath
        7
    smallpath  
       2017-02-27 10:24:37 +08:00
    node 请使用 v7.6.0 ,直接用 async/await 无痛开写,开了跨域代理还可以直接在 chrome 里跑
    TangMonk
        8
    TangMonk  
       2017-02-27 10:29:24 +08:00
    node +1, 性能好, 还有 PhantomJS 模拟浏览器
    jiangzhuo
        9
    jiangzhuo  
       2017-02-27 10:30:27 +08:00
    要不要试试 neocrawler
    v2dead
        10
    v2dead  
       2017-02-27 10:41:40 +08:00
    曾经是 phantomJS 做代理抓取渲染页面, python 在另一端处理任务,对抓到数据进行规整。这算是两个都用么?
    simapple
        11
    simapple  
       2017-02-27 10:44:37 +08:00
    scrapy +1
    zungmou
        12
    zungmou  
    OP
       2017-02-27 10:53:48 +08:00
    @v2dead PhantomJS 对于大规模爬虫应用的话,性能如何?
    viko16
        13
    viko16  
       2017-02-27 10:57:56 +08:00
    @smallpath #7 求详细,是说 node-inspector 吗?
    murmur
        14
    murmur  
       2017-02-27 11:00:20 +08:00
    现在爬虫的性能早就不是问题 难点在动态数据和反爬虫上

    你不是会挂代理么 吼哇 那我们就玩注册吧
    DarsyCheuk
        15
    DarsyCheuk  
       2017-02-27 11:00:28 +08:00
    哪个熟悉点就用哪个呗
    个人偏向 node 毕竟 js 语言摆在那
    murmur
        16
    murmur  
       2017-02-27 11:00:59 +08:00
    @zungmou 有人自称组件了 1000+实例的集群 除了每隔一段时间要强制重启释放资源外 没啥
    neoblackcap
        17
    neoblackcap  
       2017-02-27 11:01:13 +08:00
    @zungmou 内存泄漏
    neoblackcap
        18
    neoblackcap  
       2017-02-27 11:05:38 +08:00   1
    个人感觉大规模的爬虫都不应该使用基于 Chrome 的技术,基于 mozilla 的 spidermonkey 来做的爬虫可能性能会更好,关键是 V8 的引擎并非线程安全,你用到 V8 的时候就需要加锁,要提高并行就是加进程。一台服务器能上多少个进程?
    zungmou
        19
    zungmou  
    OP
       2017-02-27 11:07:54 +08:00
    @murmur
    @neoblackcap

    感谢!
    fy
        20
    fy  
       2017-02-27 11:12:29 +08:00
    都适合。 nodejs 有个额外好处是能直接解释执行页面上部分 js 代码(虽然要考虑安全性)。
    maxmilia
        21
    maxmilia  
       2017-02-27 11:14:36 +08:00
    PHP
    v2dead
        22
    v2dead  
       2017-02-27 11:14:38 +08:00
    @zungmou 你可以一直加服务嘛,性能不够机器来凑。不过确实是要隔一段时间重启 phantomJS ,不知道是不是内存泄露,隔一段时间内存跑的高的不行。我当时是做进程池,每个 phantomJS 能跑十几次任务就直接让它重启了。
    murmur
        23
    murmur  
       2017-02-27 11:29:16 +08:00
    @neoblackcap 线程和进程有区别么,难道用线程渲染页面的 cpu 负载就能下来?
    XIVN1987
        24
    XIVN1987  
       2017-02-27 11:33:17 +08:00 via Android
    如果只是爬虫的话,用自己最熟悉的最好
    如果还想对爬来的数据进行分析的话,那 Python 更好,有 pandas 这样的神器,还有很多统计、机器学习方面的库
    mazyi
        25
    mazyi  
    PRO
       2017-02-27 12:01:45 +08:00 via iPhone
    node 一个巨大的优势在于如果你要爬的页面用 js 搞了个前端加密,虽然没有什么用但是 python 就很难处理
    jy01264313
        26
    jy01264313  
       2017-02-27 12:01:58 +08:00
    Python
    neoblackcap
        27
    neoblackcap  
       2017-02-27 12:06:47 +08:00
    @murmur 你开进程需要内存的啊,线程可是共享内存啊。
    jarlyyn
        28
    jarlyyn  
       2017-02-27 12:15:40 +08:00
    @fy

    node 不是有 vm 么
    fy
        29
    fy  
       2017-02-27 12:20:21 +08:00
    @jarlyyn 作为平台无关的动态语言,大家都有 vm 吧……
    xieranmaya
        30
    xieranmaya  
       2017-02-27 12:22:53 +08:00
    我都是直接在浏览器里爬的
    freestyle
        31
    freestyle  
       2017-02-27 12:27:59 +08:00
    scrapy +
    jarlyyn
        32
    jarlyyn  
       2017-02-27 12:28:54 +08:00
    only0jac
        33
    only0jac  
       2017-02-27 12:30:48 +08:00 via Android
    怎么没人说 pyspider
    akring
        34
    akring  
       2017-02-27 12:37:41 +08:00
    @xieranmaya 老铁 666
    fy
        35
    fy  
       2017-02-27 14:16:51 +08:00
    @xieranmaya 生物脑智能技术肉眼爬虫表示压力不大
    songjiaxin2008
        36
    songjiaxin2008  
       2017-02-27 14:22:36 +08:00
    我觉得都可以啊...Python 也有执行 JS 的包 之前用的是这个 https://github.com/doloopwhile/PyExecJS 但是国内更多的云平台都可以免费运行 Node 再加上[Cheerio]( https://github.com/cheeriojs/cheerio)这种包 也是很爽的
    insomniowl
        37
    insomniowl  
       2017-02-27 20:01:17 +08:00
    进来学习
    mingyun
        38
    mingyun  
       2017-02-27 22:54:13 +08:00
    python requests 不解释
    log4geek
        39
    log4geek  
       2017-03-04 15:37:24 +08:00
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2574 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 14:56 PVG 22:56 LAX 06:56 JFK 09:56
    Do have faith in what you're oing.
    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