共计 1418 个字符,预计需要花费 4 分钟才能阅读完成。
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