分享一个写的node RSS爬虫,以及主要实现流程

前言

为了更好分享和发布自己的内容,现在提供RSS服务的网站和社区非常之多,现在基于pythonjava等平台的RSS爬虫非常之多,所以结合node高并发特性,自己用node写了一个RSS爬虫——rss-worker

简介

rss-worker是一个持久的可配的rss爬虫。支持多URL的并行爬取,并且会将所有条目按时间顺序进行保存,保存格式为"时间\n标题\n内容\n\n"来供使用或分析,支持的保存方式有fsmongodb

结果演示

一个抓取https://github.com/alsotang.atomhttps://cnodejs.org/rsshttp://segmentfault.com/feeds/blogs内容24小时的输出(2015/5/6 19:30至2015/5/7 19:30 ):

点这里

源码地址:这里 , 欢迎来star,follow。

主要流程

爬取:并发地对所有指定URL使用superagent发送请求,并在所有URL全部爬取完毕后根据指定间隔再次发出爬取请求

结果更新:在内存中缓存了一个lastUpdate字段,与每次的爬取结果作比对

支持fsmongo存储:利用persistence层提供统一接口,对外隐藏不同实现

安装使用

直接通过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()

发出停止抓取信号,将不会继续抓取,但不会影响到正在进行的本次抓取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值