nodejs实现新闻爬虫

作为费德勒的铁杆粉丝,每天早上都会在新浪体育里面的网球频道浏览费德勒新闻。由于只关注费德勒的新闻,所以每次都要在网页中大量的新闻中筛选相关信息,感觉效率好低,所以用node写了一个简单的爬虫程序通过每天定时发送邮件的方式来通知。

这个需求仔细看有3个功能点,信息爬虫,定时发送,邮件通知

信息爬虫

信息爬虫建立在对页面结构的分析,从页面内容中抽取符合我们需要的信息,所以我们在获得网页信息后,需要对dom结构进行分析,获得相关信息,组装成数据。

Axios(https://github.com/mzabriskie/axios) 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中发送请求,获取数据,所以我们通过可以axios来获取html页面内容

接下来,我们需要分析html内容中,cheerio(https://github.com/cheeriojs/cheerio)这个库可以帮我们像jquery的API一样分析获取dom结构,进行数据的筛选。

所以对于网页的爬虫,我们实现思路,axios获取数据,cheerio获取整个页面的A的标签,在对A标签的内容进行正则匹配筛选,存储到数组中,具体代码如下:

const KEYWORD = '费德勒';
const KEYWORD_REG = new RegExp(KEYWORD, 'i');let newsArry = [];
function spider() {return axios.get('http://sports.sina.com.cn/tennis/').then(response => {if (response.status === 200) {let $ = cheerio.load(response.data, {decodeEntities: false});let newsList = $('a[href]');newsArry = [];for (let i = 0; i < newsList.length; ++i) {let obj = $(newsList[i]);let text = $(newsList[i]).text();//收集数据if (KEYWORD_REG.test(text)) {newsArry.push({'title': text.trim(),'href': obj.attr('href')})}}}}).catch(e => {console.log('爬虫失败了');console.log(error);})

邮件通知

nodemailer(https://nodemailer.com/)是一个关于邮件发送的库,只要安装nodemailer模块,按照规则配置好发送信息即可,代码如下:

const configData = require('./config.json');
//生成发送字符串
function formStr(arr) {let html = '';for (let data of arr) {html += `<p><a target="_blank" href="${data.href}">${data.title}</a></p>` // red green blue}return html;
}//邮件发送函数
function sendEmail(opts) {let transporter = nodemailer.createTransport({service: 'QQ',auth: configData.auth}, {from: configData.auth.user})var message = {//收件人用逗号间隔to: opts.to,//信息主题subject: opts.subject,//内容html: opts.html};

auth 中的 pass,是指“邮箱第三方登录授权码”,如何获取授权码,以QQ邮箱为例,请点击:链接

定时发送

定时发送我们可以通过简单的setInterval来实现,但是这样写的扩展性不高。到node社区搜了一下,发现了一个定时脚本库:node-schedule(链接)

const schedule = require('node-schedule');
const SCHEDULE_RULE = '1 30 10 * * *'; //每天10点30分发送
schedule.scheduleJob(SCHEDULE_RULE, () => {spider().then(() => {sendEmail({to: configData.recipients.join(','),subject: `${KEYWORD}新闻`,html: formStr(newsArry)})});
});

这个库的使用和简单,指定匹配规则,然后添加定时执行函数就可以了。
我们这里指定规则每天10点半发送邮件,这样我们也完成了定时发送的任务。

参考原文链接

nodejs实现新闻爬虫相关推荐

  1. 新闻爬虫及爬取结果查询网站的搭建(一)

    新闻爬虫及爬取结果查询网站的搭建(一) 实验要求 核心需求 技术要求 爬虫准备工作 Node.js 安装配置 vscode Request Cheerio简介 数据库存储 实验要求 核心需求 1.选取 ...

  2. python 大量网络请求_大规模异步新闻爬虫之网络请求函数的优化

    前面我们实现了一个简单的再也不能简单的新闻爬虫,这个爬虫有很多槽点,估计大家也会鄙视这个爬虫.上一节最后我们讨论了这些槽点,现在我们就来去除这些槽点来完善我们的新闻爬虫. 问题我们前面已经描述清楚,解 ...

  3. python实现新闻网站_如何用 100 行 Python 代码实现新闻爬虫?这样可算成功?

    每天我都要坐地铁上班,而地铁里信号差.但我希望在坐地铁的时候读些新闻,于是就写了下面这个新闻爬虫.我并没有打算做很漂亮的应用,所以只完成了原型,它可以满足我最基本的需求.其思路很简单: 找到新闻源;用 ...

  4. Python 大规模异步新闻爬虫、google翻译、百度翻译、有道翻译、百度指数

    参考:https://www.yuanrenxue.com/crawler/news-crawler-urlpool.html url_pool.py # -*- coding: utf-8 -*- ...

  5. 计算器百分号如何用代码实现_如何用 100 行 Python 代码实现新闻爬虫?这样可算成功?...

    每天我都要坐地铁上班,而地铁里信号差.但我希望在坐地铁的时候读些新闻,于是就写了下面这个新闻爬虫.我并没有打算做很漂亮的应用,所以只完成了原型,它可以满足我最基本的需求.其思路很简单: 找到新闻源:用 ...

  6. 基于Scrapy框架的Python新闻爬虫

    概述 该项目是基于Scrapy框架的Python新闻爬虫,能够爬取网易,搜狐,凤凰和澎湃网站上的新闻,将标题,内容,评论,时间等内容整理并保存到本地 详细 代码下载:http://www.demoda ...

  7. python 爬取财经新闻_如何用 100 行 Python 代码实现新闻爬虫?

    CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 每天我都要坐地铁上班,而地铁里完全没有手机信号.但我希望在坐地铁的时候读些新闻,于是就写了下面这个新闻爬虫. 我 ...

  8. nodeJS实现简易爬虫

    nodeJS实现简易爬虫 需求:使用nodeJS爬取昵图网某个分类下的图片并存入本地 运用nodeJS自带系统模块http.fs 示例代码: var http =require('http'); va ...

  9. 新闻平台聚合之腾讯新闻爬虫发布

    idea of startproject 对于 web 开发者而言,目前各大新闻门户网站,新浪新闻,百度新闻,腾讯新闻,澎湃新闻,头条新闻并没有提供稳定可用的 feed api. 对于 nlper,缺 ...

最新文章

  1. 目前研制量子计算机,18个量子比特纠缠究竟是什么水平? 量子计算机离我们还有多远?...
  2. 【嵌入式开发】时钟初始化 ( 时钟相关概念 | 嵌入式时钟体系 | Lock Time | 分频参数设置 | CPU 异步模式设置 | APLL MPLL 时钟频率设置 )
  3. [网络安全自学篇] 十一.虚拟机VMware+Kali安装入门及Sqlmap普及
  4. BZOJ2240 : ural1676 Mortal Combat
  5. 邮件服务器“单点登录”功能
  6. python取数字第一位数_python基础:8.切片和缩进
  7. java alt是什么意思_java中这都是什么意思? - 执着的笨蛋 - BlogJava
  8. 苹果手机扩容对手机好不好?
  9. hadoop yarn 获取日志_「大数据」「Hadoop」-安装及数据目录
  10. 几种常用的差异分析方法简介
  11. 如何成为一名企业满意的UI设计师
  12. TiDB 6.1 单机环境 On openEular 2003 SP3
  13. 阿里云是一个什么样的企业,为什么能成为行业第一
  14. 搜狗收录批量查询,今天你查到了吗?
  15. 三菱FX5U传送指令
  16. XiaoMi-Ruby-15.6-UMA-only黑苹果efi引导文件
  17. java树莓派温度传感器_怎样使用树莓派读取传感器上的温度和湿度
  18. 宽依赖和窄依赖_Spark --【宽依赖和窄依赖】
  19. win快捷键_Windows 被冷落的 WIN 键,其实比你想的更好用
  20. PRD:云迹扶教APP(项目经历)

热门文章

  1. DS村村通工程(Prim算法)
  2. Chinese Valentine‘s Day
  3. 数据结构实践——猴子选大王
  4. 计算机学院军训特色标语,各具学院特色的军训口号
  5. 不懂用户,怎么做新媒体运营
  6. UCML Ajax++框架介绍
  7. ch340c(cH340C与8266)
  8. 参数估计(Parameter Estimation)
  9. 服务器监控 微信发送,python3.8 微信发送服务器监控报警消息代码实现
  10. 【一、建站综述及步骤简介】2021最详细wordpress博客建站教程(2021.03.01更新)