做个 RSS 小爬虫
说在前面
我首先已经是弄好数据库、控制器等等的大致框架了,接下来只是要新增一个feature而已。那么如何实现一个RSS爬虫呢?
首先我希望这个功能可以做到以下的事情
- [X] 可以成功爬取到 RSS 内容
- [X] 可以成功解析 RSS 内容
- [X] 可以自动启动爬取任务
在这里要说明一下要解析的是 Atom Feeds,介绍在 IBM。我们这次要获取的内容是:title, link, pubDate(文章里面的)
解析内容
请求方面的就不说明了,Axios一把梭
对于内容可以将其看为是一个XML,可以使用 xml2js
进行解析,new 一个 xml2js.Parser 出来,之后使用 Parser 的parseString()
方法进行解析
这个方法首先需要传入一个 data,之后新建一个箭头函数用来处理传出的数据(err, res),最基本的就是对其进行判断是否出现错误。如果需要获取到真实有用的解析到的内容,需要获取 res.feed
,以下是在控制台输出的结果:
其中的title就是我们要的了,使用 res.feed.title
直接取得
但是不知为什么有的时候在这个title里面(好多都是)还会有一个
_
,内容存在着里面的,所以后面还得使用三元判断一下。
里面的 entry 也是我们所需要的东西,在控制台输出一下 res.feed.entry
,可以看到以下内容:
其中的 title, link, published 我们全部取出来,和前面的title合并即可完成啦!
其实你可以看到 link 里面是一个 Object, 里面还有一个
$
包裹着内容,因此在获取的时候需要注意一下
for (let index = 0; index < res.feed.entry.length; index++) {
const entry = res.feed.entry[index];
result.title = res.feed.title[0]._ ? res.feed.title[0]._ : res.feed.title[0];
result.link = res.feed.link[0].$.href;
result.items.push({
title: entry.title[0]._ ? entry.title[0]._ : entry.title[0],
link: entry.link[0].$.href,
pubDate: entry.published[0],
});
}