NodeJS 也可以开发爬虫服务,使用 cheerio ,可以像使用 Jquery 一样方便的把网页内容提取分析出来。
第三方库
- express
- superagent http库,可以发起 get 或 post 请求。
- cheerio https://github.com/cheeriojs/cheerio 可以理解成一个
Node.js
版的jquery
,用来从网页中以css selector
取数据,使用方式跟jquery
一样。
下面的例子将扒取 https://cnodejs.org/
网站
|
|
eventProxy 控制并发
Node.js
的并发模型跟多线程不同,如果你要并发异步获取两三个地址的数据,并且要在获取到数据之后,对这些数据一起进行利用的话,常规的写法是自己维护一个计数器。
而 eventproxy
就起到了这个计数器的作用,它来帮你管理到底这些异步操作是否完成,完成之后,它会自动调用你提供的处理函数,并将抓取到的数据当参数传过来。
如果利用 eventproxy
,则是这样的
|
|
其实就是相当于一个高等计数器
|
|
上面的代码监听了三个事件,分别是data1_event
, data2_event
, data3_event
,每次当一个源的数据抓取完成时,就通过ep.emit()
来告诉ep
,某某事件已经完成了。
当三个事件未同时完成时,ep.emit()
调用之后不会做任何事;当三个事件都完成的时候,就会调用末尾的回调函数,来对它们进行统一处理。
eventproxy
提供了不少其他场景所需的 API
,但最最常用的用法就是以上的这种,即:
- 先
var ep = new eventproxy();
得到一个eventproxy
实例。 - 告诉它你要监听哪些事件,并给它一个回调函数。
ep.all('event1', 'event2', function (result1, result2) {})
。 - 在适当的时候
ep.emit('event_name', eventData)
。
使用 eventproxy 并发扒取
|
|
要点:
|
|
添加 header
|
|
demo2
articlelist.js
|
|
main.js
|
|