download:构建千万级高可用企业级Node.js利用

node.js爬虫

前端同学可能向来对爬虫不是很感冒,感觉爬虫须要用偏后端的语言,诸如 php , python 等。当然这是在 nodejs 前了,nodejs 的呈现,使得 Javascript 也能够用来写爬虫了。因为 nodejs 弱小的异步个性,让咱们能够轻松以异步高并发去爬取网站,当然这里的轻松指的是 cpu 的开销。

要读懂本文,其实只须要有
能看懂 Javascript 及 JQuery
简略的nodejs根底
http 网络抓包 和 URL 根底
Nodejs做爬虫的优劣
首先说一下node做爬虫的劣势
第一个就是他的驱动语言是JavaScript。JavaScript在nodejs诞生之前是运行在浏览器上的脚本语言,其劣势就是对网页上的dom元素进行操作,在网页操作上这是别的语言无法比拟的。

第二就是nodejs是单线程异步的。听起来很奇怪,单线程怎么可能异步呢?想一下学操作系统的时候,单核cpu为什么可能进行多任务处理?情理也是相似,在操作系统中过程对CPU的占有进行工夫切片,每一个过程占有的工夫很短,然而所有过程循环很屡次,因而看起就像是多个工作在同时解决。js也是一样,js里有事件池,CPU会在事件池循环解决曾经响应的事件,未解决完的事件不会放到事件池里,因而不会阻塞后续的操作。在爬虫上这样的劣势就是在并发爬取页面上,一个页面未返回不会阻塞前面的页面持续加载,要做到这个不必像python那样须要多线程。

其次是node的劣势

首先是异步并发上。解决的好很不便,解决的不好就会很麻烦。例如要爬取10个页面,用node不做异步解决话,那返回的后果可不肯定是按1、2、3、4……这个程序,很可能是随机。解决的方法就是减少一个页面的序列戳,让爬取的数据生成csv文件,而后从新排序。

第二个是数据处理上的劣势,这点是不如python的,如果只是单纯的爬数据,用node当然很好,然而如果用爬来的数据持续做统计分析,做个回归剖析聚类啥的话,那就不能用node一步到底了。

如何用nodejs做爬虫

上面就要说一下如何用nodejs做爬虫了
1、初始化我的项目文件
在对应的我的项目文件夹下执行npm init来初始化一个package.json文件

2、装置request和cheerio依赖包
request听起来很相熟吧,跟python里request性能一样。它的性能就是建设起对指标网页的链接,并返回相应的数据,这个不难理解。

cheerio的性能是用来操作dom元素的,他能够把request返回来的数据转换成可供dom操作的数据,更重要的cheerio的api跟jquery一样,用$来选取对应的dom结点,是不很不便?对一个前端程序员来说,这比python的什么xpath和beautisoup不便了不晓得多少啊哈哈

装置命令也很简略:

别离是npm install request --save 和 npm install cheerio

3、引入依赖包并应用
接下来就用request , fs和cherrio写一个爬虫吧!

首先引入依赖模块

var http=require("http");        //网络申请var fs=require("fs");            //操作文件,读写文件var cheerio=require("cheerio");  //扩大模块注:cheerio 模块是第三方模块,须要进行装置:npm install cheerio --save