Node.js爬虫如何获取天气和每日问候详解


Posted in Javascript onAugust 26, 2019

安装依赖

安装node.js,同时安装好依赖:

npm install request --save // http请求库
npm install cheerio --save // 分析html工具
npm install express --save // nodejs web框架

获取墨迹天气

地址示例:

东莞 tianqi.moji.com/weather/chi…

广州 tianqi.moji.com/weather/chi…

深圳 tianqi.moji.com/weather/chi…

可打开墨迹天气网站找到女朋友对应城市修改url地址拼音即可。

Node.js爬虫如何获取天气和每日问候详解

查看网页结构:

Node.js爬虫如何获取天气和每日问候详解

下面开始提取网页天气信息:

const request = require("request")
const cheerio = require("cheerio")
const weatherURL = 'https://tianqi.moji.com/weather/china/Guangdong/dongguan'

// 获取墨迹天气提示信息
function getWeatherTips(url) {
 return new Promise((resolve,reject)=>{
 	request(weatherURL,(error,res,body)=>{
 	 if (!error) {
 	 let html = res.body || "";
 		let $ =cheerio.load(html)
 		let temp = $('.wea_weather em').text().trim()+'℃'
 		let desc = $('.wea_weather b').text().trim()
 		let water = $('.wea_about span').text().trim()
 		let win = $('.wea_about em').text().trim()
 		let tips = $('.wea_tips em').text().trim()
 		let words=`今日${city}天气\n${desc}\n温度:${temp}\n湿度:${water}\n风力:${win}\n${tips}`
 		resolve(words)
 	} else {
 		reject(error)
 	} 
 })
 }) 
}

获取每日一句

地址:wufazhuce.com/

Node.js爬虫如何获取天气和每日问候详解

const greetingURL = 'http://wufazhuce.com/'
// 获取wufazhuce.com每日一句
function getDailyGreeting() {
 return new Promise((resolve,reject)=>{
 	request(greetingURL,(error,res,body)=>{
 		let everyDayWordsList = [];
 		if(!error && res.statusCode==200) {
 			let $ = cheerio.load(res.body.toString())
 				$('div .fp-one-cita a').each(function(item){
 					if($(this).text()){
 						everyDayWordsList.push($(this).text().trim())
 					}  
 				})
 			let result = everyDayWordsList[0] || '网络错误,获取每日问候失败!'
 			resolve(result) 
 		} else {
 			reject(error)				
 		}
 	})
 })
}

计算在一起天数

// 计算在一起的日子
function getDiffDate(targetDate) {
 let date1 = new Date(targetDate);
 let date2 = new Date();
 date1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());
 date2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());
 const diff = date2.getTime() - date1.getTime();
 const diffDate = diff / (24 * 60 * 60 * 1000);
 return `宝贝,这是我们在一起的${diffDate}天`
}

接口调用

var express=require('express');
var app=express();
const api = require('./crawer.js')
app.get('/words',async function(req,res){
 let dateTips = api.getDiffDate()
 let weather = await api.getWeatherTips()
 let words = await api.getDailyGreeting()
 let str =`${dateTips}\n${weather}\n${words}`
 res.writeHead(200, {'Content-Type': 'application/json; charset=utf-8'})
 res.end(str)
})
var server = app.listen(8083, function () { // 启动ip和端口
 var port = server.address().port
 console.log("应用实例,访问地址为 http://%s:%s", port)
})

Node.js爬虫如何获取天气和每日问候详解

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
JavaScript版代码高亮
Jun 26 Javascript
HTML页面滚动时获取离页面顶部的距离2种实现方法
Sep 05 Javascript
javascript 自定义回调函数示例代码
Sep 26 Javascript
JS递归遍历对象获得Value值方法技巧
Jun 14 Javascript
JS实现列表页面隔行变色效果
Mar 25 Javascript
JS实现多级菜单中当前菜单不随页面跳转样式而发生变化
May 30 Javascript
使用ionic(选项卡栏tab) icon(图标) ionic上拉菜单(ActionSheet) 实现通讯录界面切换实例代码
Oct 20 Javascript
浅析node.js的模块加载机制
May 25 Javascript
js删除对象/数组中null、undefined、空对象及空数组方法示例
Nov 14 Javascript
layui动态渲染生成左侧3级菜单的方法(根据后台返回数据)
Sep 23 Javascript
解决Mint-ui 框架Popup和Datetime Picker组件滚动穿透的问题
Nov 04 Javascript
js实现上传图片到服务器
Apr 11 Javascript
vue移动端实现手机左右滑动入场动画
Jun 17 #Javascript
详解vuex数据传输的两种方式及this.$store undefined的解决办法
Aug 26 #Javascript
JS阻止事件冒泡的方法详解
Aug 26 #Javascript
express框架中使用jwt实现验证的方法
Aug 25 #Javascript
JS异步处理的进化史深入讲解
Aug 25 #Javascript
Vue源码分析之Vue实例初始化详解
Aug 25 #Javascript
javascript导出csv文件(excel)的方法示例
Aug 25 #Javascript
You might like
一个SQL管理员的web接口
2006/10/09 PHP
php与paypal整合方法
2010/11/28 PHP
php 中文字符串首字母的获取函数分享
2013/11/04 PHP
PHP容器类的两种实现方式示例
2019/07/24 PHP
扩展String功能方法
2006/09/22 Javascript
Javascript打印网页部分内容的脚本
2008/11/17 Javascript
JS在IE和FireFox之间常用函数的区别小结
2010/03/12 Javascript
javascript中的void运算符语法及使用介绍
2013/03/10 Javascript
js 时间格式与时间戳的相互转换示例代码
2013/12/25 Javascript
用js正确判断用户名cookie是否存在的方法
2014/01/28 Javascript
jQuery.deferred对象使用详解
2016/03/18 Javascript
JavaScript Promise 用法
2016/06/14 Javascript
jQuery查找节点并获取节点属性的方法
2016/09/09 Javascript
纯javaScript、jQuery实现个性化图片轮播【推荐】
2017/01/08 Javascript
vue组件生命周期详解
2017/11/07 Javascript
vue2 全局变量的设置方法
2018/03/09 Javascript
Vue加载组件、动态加载组件的几种方式
2018/08/31 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
2018/09/21 Javascript
vue动态删除从数据库倒入列表的某一条方法
2018/09/29 Javascript
Node.js使用supervisor进行开发中调试的方法
2019/03/26 Javascript
JS数组中对象去重操作示例
2019/06/04 Javascript
vue动态绘制四分之三圆环图效果
2019/09/03 Javascript
webpack 如何同时输出压缩和未压缩的文件的实现步骤
2020/06/05 Javascript
[02:41]辉夜杯现场一家三口 “我爸玩风行 我玩血魔”
2015/12/27 DOTA
跟老齐学Python之print详解
2014/09/28 Python
python实现zabbix发送短信脚本
2018/09/17 Python
详解Python读取yaml文件多层菜单
2019/03/23 Python
python文件写入write()的操作
2019/05/14 Python
python实现函数极小值
2019/07/10 Python
Django REST framework内置路由用法
2019/07/26 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
2020/04/29 Python
浅谈Python中的字符串
2020/06/10 Python
毕业生就业推荐信范文
2013/12/01 职场文书
保护母亲河倡议书
2014/04/14 职场文书
写给消防战士们的一封慰问信
2019/10/07 职场文书
解决MySQL Varchar 类型尾部空格的问题
2022/04/06 MySQL