爬虫是不是用 Node.js 更好?

JavaScript020

爬虫是不是用 Node.js 更好?,第1张

‍‍

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区别很小,选个自己喜欢的足够熟练的即可。复杂的爬虫语言不是关键问题,架构做大了之后也不是一种语言能很好解决的。

‍‍

不是爬不到

是因为用js生成的网页,是通过浏览器加载js代码之后,由js动态生成的。

用爬虫直接去抓网页的话,抓下来的是原始代码,浏览器还未解析过的内容。

纯 html 的话,抓下来可以直接拿来用,但是如果是由 js 动态生成的网页的话,就没办法直接用了。

像通过js动态加载的网页,理论上如果能用开源的浏览器内核将网页解析出来的话,通过浏览器内核提供的接口,完全可以把网页最终的 html 拿出来