如何使用nodejs做爬虫程序

JavaScript018

如何使用nodejs做爬虫程序,第1张

作者:Mike Chen

链接:https://www.zhihu.com/question/31679802/answer/128390326

来源:知乎

著作权归作者所有,转载请联系作者获得授权。

首先楼主要使用nodejs作为语言或者平台来开发爬虫是没有任何问题的,反而nodejs的event io能够让你感觉到网络编程可以如此酣畅淋漓,一如http://nodejs.org 官网给出的http server 的例子,几行代码就能实现web服务,没有apache 没有tomcat也没有iis,只要设置一个回调,监听一个端口,你就可以使用浏览器访问了。

其次,爬虫是最明显的IO密集型应用场景,显然和擅长处理IO的nodejs是绝配,但是把它用好是需要一些功底的。如果你想要从头开发,不借助第三方框架,那么你需要对nodejs中的event emitter 及 http 模块有深入的了解,加上你的HTTP协议的知识,再到node平台中找到相应的实现方案,从而实现你要的功能。举个例子,使用http模块发送一个GET请求到百度,你需要弄清楚对req,也就是http.get的返回值,监听什么样的事件,http的头部信息和正文信息分别应该在什么阶段获取。在python中方法很直白,简简单单的用urllib来open一个链接,接着read就算完事儿,写到这里突然感觉可以理解之前那位仁兄认为的"不适合",也许是觉得node 不如python的直白,又或许只是对node的理解不够到位,不好拿捏?

最后,如果楼主想要把node作为平台来开发爬虫,我建议直接从开源框架入手,立刻做出一些可用的程序来给自己一些正反馈,然后再慢慢学习体会。

       NodeJS做爬虫也是很方便的。因为nodejs有HTTP模块直接可以使用,而且还有很多简单粗暴的库可以即拿即用。       首先,需要的库文件,       1、superagent 是个轻量的的 http 方面的库,就像jquery的post,和get一样,很简单。       2、cheerio 是一个服务端操作DOM的库,简直就是服务端的jquery。     好的,我们需要抓取某个网站的题目。如下图。这个系统下,及时是游客状态也是可以查看题目的,只是答案我们看不到。会显示我没有登录。现在我们有个需求,先抓取15页,根据URL的参数可以页数就是地址中 的P。并且要有本地cookie,获取cookie的方法,最简单的是,利用浏览器登录网站之后,在控制台直接打印document.cookie,得到之后,复制进txt文本。用fs模块读取并转换成字符串。在superagent请求时,把cookie传进去。好了,控制台已经不输出“未登录”,说明已经登录成功了。