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 · 11857 次点击
    这是一个创建于 2824 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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  
       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   ·   实用小工具   ·   3395 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 00:17 · PVG 08:17 · LAX 16:17 · JFK 19:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.