资讯专栏INFORMATION COLUMN

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

hiYoHoo / 3220人阅读

摘要:前言为了更好分享和发布自己的内容,现在提供服务的网站和社区非常之多,现在基于,等平台的爬虫非常之多,所以结合高并发特性,自己用写了一个爬虫。简介是一个持久的可配的爬虫。结果演示一个抓取,,内容小时的输出至点这里源码地址这里,欢迎来,。

前言

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

简介

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

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/85690.html

相关文章

  • NodeJs爬虫抓取古代典籍,共计16000个页面心得体会总结及项目分享

    摘要:目前这个爬虫还是比较简单的类型的,直接抓取页面,然后在页面中提取数据,保存数据到数据库。总结写这个项目其实主要的难点在于程序稳定性的控制,容错机制的设置,以及错误的记录,目前这个项目基本能够实现直接运行一次性跑通整个流程。 前言 之前研究数据,零零散散的写过一些数据抓取的爬虫,不过写的比较随意。有很多地方现在看起来并不是很合理 这段时间比较闲,本来是想给之前的项目做重构的。后来 利用这...

    legendmohe 评论0 收藏0
  • 一只node爬虫的升级打怪之路

    摘要:我是一个知乎轻微重度用户,之前写了一只爬虫帮我爬取并分析它的数据,我感觉这个过程还是挺有意思,因为这是一个不断给自己创造问题又去解决问题的过程。所以这只爬虫还有登陆知乎搜索题目的功能。 我一直觉得,爬虫是许多web开发人员难以回避的点。我们也应该或多或少的去接触这方面,因为可以从爬虫中学习到web开发中应当掌握的一些基本知识。而且,它还很有趣。 我是一个知乎轻微重度用户,之前写了一只爬...

    shiweifu 评论0 收藏0
  • Docker 入门与实践

    摘要:使用推出的语言开发实现,基于内核的,,以及等技术。初步了解容器与虚拟机的区别原理不同上图是关于和传统虚拟机区别的截图。从而实现模拟更改镜像的作用。下面的实践以为例,。指令让外界能通过容器的端口进行网络通信。使用可以启动关闭容器。 Docker 是一个能让程序跑在一个它无法感知的、用于隔绝外界环境里的容器的工具。 Docker 简介 最初是 dotCloud 公司创始人 Solomon ...

    Keagan 评论0 收藏0
  • Docker 入门与实践

    摘要:使用推出的语言开发实现,基于内核的,,以及等技术。初步了解容器与虚拟机的区别原理不同上图是关于和传统虚拟机区别的截图。从而实现模拟更改镜像的作用。下面的实践以为例,。指令让外界能通过容器的端口进行网络通信。使用可以启动关闭容器。 Docker 是一个能让程序跑在一个它无法感知的、用于隔绝外界环境里的容器的工具。 Docker 简介 最初是 dotCloud 公司创始人 Solomon ...

    Render 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<