爬虫是不是用 Node.js 更好?
Node.js当然适合做爬虫,当然Python同样也适合。你所遭遇的问题充其量只是个程序逻辑问题,而不是语言问题。Nodejs做爬虫最大的优势大概在于更容易接入诸如下类的phantomjs/casperjs来搞一些更自动化的针对动态加载内容的爬取(当然Python也行,只不过没那么原生)。单纯只是爬个数据,解析一下DOM,无论Php还是Java还是C++还是C#甚至是VBS都一样能玩得顺溜,代码量也不见得就会特别大。目前,Python做爬虫更多一些,一方面可能是因为诸如Scrapy这样的总体分布框架更加完善而久经考验,而另一方面,爬下来的数据若不是自己做玩具,更多的情况下还需要做清洗、分析等相关工作,而不是闭眼存文件/数据库。这些数据处理相关环节中,Python的生态要比Node好太多。从头写一个原始的爬虫,Node.js 确实很方便,不过其它语言驱动浏览器也没复杂到哪里。写一个能工程实用的,比的其实是现有工具的成熟度,目前 Crawler 虽然已经很像 Scrapy 了,上手很快,但还是需要自己找个 cheerio 之类的来分析 dom,Scrapy 则是全集成的,当然 Crawler 也可随便换熟悉的 dom 处理框架也算一个好处啦。而搞一个24x7运行的分布式爬虫系统,Scrapy 成熟度强的就不是一星半点儿logging/stats/telnet/email什么的都标配了,节点任务分配、调度都现成的,相信假以时日,总会有人拿 Node.js 搞出一套同样强大的。简单的爬虫用啥都能写,python和js区别很小,选个自己喜欢的足够熟练的即可。复杂的爬虫语言不是关键问题,架构做大了之后也不是一种语言能很好解决的。
我就是拿 Node.js 写爬虫的,python 确实爬虫库比较多,但是 Node.js 也不差呀,而且 js 作为浏览器上运行的首选语言,怎么看都比 python 更适合做爬虫。另外爬虫爬漏数据是很正常的事,你需要自己写代码来避免这种情况(自动重试之类的),跟 Node.js 并没有什么关系。简单的爬虫用啥都能写,python和js区别很小,复杂的爬虫语言不是关键问题,架构做大了之后也不是一种语言能很好解决的。需要解决很多耦合比较强的需求,比如ajax爬取,js页面动态渲染,验证码识别,动态代理,流量控制,连接数控制和动态分配。如果有搜索和存储的要求,需求就更复杂了。所以专注需求可能比选择语言更有意义。