分享一個寫的node RSS爬蟲,以及主要實現流程

前言

爲了更好分享和發佈本身的內容,如今提供RSS服務的網站和社區很是之多,如今基於pythonjava等平臺的RSS爬蟲很是之多,因此結合node高併發特性,本身用node寫了一個RSS爬蟲——rss-workerjava

簡介

rss-worker是一個持久的可配的rss爬蟲。支持多URL的並行爬取,而且會將全部條目按時間順序進行保存,保存格式爲"時間\n標題\n內容\n\n"來供使用或分析,支持的保存方式有fsmongodbnode

結果演示

一個抓取https://github.com/alsotang.atomhttps://cnodejs.org/rsshttp://segmentfault.com/feeds/blogs內容24小時的輸出(2015/5/6 19:30至2015/5/7 19:30 ):python

點這裏git

源碼地址:這裏 , 歡迎來star,follow。github

主要流程

爬取:併發地對全部指定URL使用superagent發送請求,並在全部URL所有爬取完畢後根據指定間隔再次發出爬取請求mongodb

結果更新:在內存中緩存了一個lastUpdate字段,與每次的爬取結果做比對npm

支持fsmongo存儲:利用persistence層提供統一接口,對外隱藏不一樣實現segmentfault

安裝使用

直接經過npm:數組

SHELLnpm install rss-worker --save

示例

jsvar RssWorker = require('rss-worker');

var opt = {
  urls: ['https://cnodejs.org/rss', 'https://github.com/DavidCai1993.atom', 'http://segmentfault.com/feeds'],
  store: {
    type: 'fs',
    dist: './store/rss.txt'
  },
  timeout: 10
};

var rssWorker = new RssWorker(opt);
rssWorker.start();

API

new RssWorker(options)

生成一個RssWorker的實例緩存

options:

  • urls(Array) - 必選,須要抓取的rss地址的數組
  • store(Object) - 存儲方式,須要配置typedist兩屬性

    • type - 存儲方式,可選fs(默認)或mongodb
    • dist - 存儲結果的文件地址(將會自動建立),如:./store/rss.txt(fs),mongodb://localhost:27017/rss_worker(mongodb)
  • timeout(Number) - 每次抓取的間隔(秒),默認爲60秒

start()

開始抓取

forceToEnd()

發出中止抓取信號,將不會繼續抓取,但不會影響到正在進行的本次抓取。

相關文章
相關標籤/搜索