用nodejs写爬虫同步百度FEX Weekly中的文章
2015-01-03 16:50
381 查看
一、 背景
最近团队leader有给小伙伴以邮件的形式推荐百度FEX团队站点中Weekly中的文章,文章内容确实很赞!主要推荐了一些业内的活动和一些很赞的文章。非常值得一读。但是想想每周都人为的去copy一份文章然后以邮件的形式发送给小伙伴这种形式有点原始。所以产生了此写一个爬虫直接抓取weekly中的更新自动同步过来,目前是同步到我blog中。之后考虑添加一个发送邮件的功能把内容以邮件的形式发送给大家。这样就实现了自动化了。ok,背景交代完了。二、思考
先整个程序的目录结构图:因为后续可能会考虑把360奇舞团的周报内容也同步过来,而且抓取不同站点的文章的逻辑也不同,为了把这个程序写的更具有扩展性一点, 所以必须把抓取的逻辑独立出来,这个就是pages目录的由来。里面分别写各个站点的抓取逻辑,如: 现在已经实现的
fex-weekly.js用于抓取FEX团队的文章(
75team-weekly.js后续会补上)。
涉及到抓取逻辑,那么考虑到每个站点更新的频率不同,如FEX-weekly中的文章一般是周五,周六更新。所以我们就得有个定时的任务表,里面设定了所有的抓取任务执行的时间,比如目前我设定的是每周六启动
fex-weekly.js发送一次请求抓取一次。因为这个任务表的存在,所以有了conf文件夹。
在考虑到抓取过的文章我们不应该再去抓取,所以创建了一个db文件用于存储已经抓取过的文章(当然不是直接存储文章内容,目前只存了url),用来识别是否已经抓取过了,如果在old文件夹中就说明已经抓取过了,那么这次就跳过这个文章,抓取最新的文章。
到这里抓取页面逻辑部分就搞定了,那么这个抓取任务必须要有人来启动它并且把抓取后来的文章保存下来,所以必要还要一个main程序,那就是
pageSpider.js的由来了。pageSpider主要是常驻内存按我们设定的时间,启动抓取任务,获取抓取内容并保存。 其他的utils和nodes_modules就不多介绍了,主要是一些工具。
三、实现
实现部分主要讲讲pageSpider.js和
fex-weekly.js。
pageSpider获取conf中的任务列表,并且遍历pages文件夹下的所有任务,根据其中设定的时间利用
node-schedule这个库注册定时任务,任务的具体就是启动一个子进程执行pages文件夹中的js文件。并且监听子进程返回的消息,也就是数据。其中利用了
async来处理各个任务的并发执行。
fex-weekly中逻辑并不能通用,所以假如你要抓取别的站点的文章,那么你得创建一个新的文件,并且写相应的逻辑。按着一定的数据格式(目前的格式还没有统一)给pageSpider。目前抓取FEX团队的文章逻辑是先利用
request包发送请求获取文章列表,利用
cheerio(可以理解为$)解析dom节点获取文章url,并且发送请求获取每篇文章的内容,并发送给pageSpider。其中也利用了
async处理并发获取文章的任务。
四、之后
整个pageSpider就说清楚了,之后会把75team部分补上,添加邮件功能,之后还可能会添加把抓取的文章转换成为kindle可以识别的格式。这样就可以在kindle上接收到想看的内容了。想想都觉得挺方便的呢。如果你对这个代码感兴趣,可以移步github进行fork改造或者关注新功能。相关文章推荐
- 百度文章爬虫(完整版)
- nodejs爬虫-妹子图,微信公众号文章,小说
- nodejs爬虫抓取搜狗微信文章详解
- 百度文章爬虫(完整版)
- NodeJS写个爬虫,把文章放到kindle中阅读
- nodejs爬虫热点新闻,明星人物(百度,微博,新浪,网易,贴吧,微博明星,百度明星)
- nodejs爬虫-通过抓取搜狗微信网站获取微信文章信息
- 服务器同步文章规范
- 怎么删除百度网页负面帖子文章
- 爬虫技术相关技术文章及问题解决方法
- Nodejs同步与备份服务器仓库
- 手把手教你做爬虫---基于NodeJs
- wordpress文章同步发布其它空间
- nodejs 几篇有用的文章
- Nodejs简单爬虫
- 从零开始nodejs系列文章
- nodejs爬虫抓取数据之编码问题
- 《Windows via C/C++》学习笔记 —— 设备I/O之“同步的设备I/O”(系列文章)
- 零基础写Java知乎爬虫之先拿百度首页练练手
- 决定把BLOG的文章从CU上同步过来