Node.js爬蟲如何獲取天氣和每日問候詳解
安裝依賴
安裝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…
可打開墨跡天氣網(wǎng)站找到女朋友對應(yīng)城市修改url地址拼音即可。

查看網(wǎng)頁結(jié)構(gòu):

下面開始提取網(wǎng)頁天氣信息:
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)
}
})
})
}
獲取每日一句

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] || '網(wǎng)絡(luò)錯誤,獲取每日問候失敗!'
resolve(result)
} else {
reject(error)
}
})
})
}
計算在一起天數(shù)
// 計算在一起的日子
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}天`
}
接口調(diào)用
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("應(yīng)用實例,訪問地址為 http://%s:%s", port)
})

總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。
相關(guān)文章
Node.JS用純JavaScript生成圖片或滑塊式驗證碼功能
有一些Node.JS圖片生成類庫,比如node-captcha等的類庫,需要c/c++程序生成圖片。跨平臺部署不是很方便。這里介紹幾個用純JS實現(xiàn)的圖片驗證碼生成模塊,需要的朋友可以參考下2019-09-09
node+express框架中連接使用mysql(經(jīng)驗總結(jié))
這篇文章主要介紹了node+express框架中連接使用mysql(經(jīng)驗總結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-11-11
Node.js多文件Stream合并,串行和并發(fā)兩種模式的實現(xiàn)方式
這篇文章主要介紹了Node.js多文件Stream合并,串行和并發(fā)兩種模式的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10
解決Node.js使用MySQL出現(xiàn)connect ECONNREFUSED 127.0.0.1:3306的問題
這篇文章主要介紹了解決Node.js使用MySQL出現(xiàn)connect ECONNREFUSED 127.0.0.1:3306報錯的相關(guān)資料,文中將問題描述的很清楚,解決的方法也介紹的很完整,需要的朋友可以參考借鑒,下面來一起看看吧。2017-03-03
基于NodeJS開發(fā)釘釘回調(diào)接口實現(xiàn)AES-CBC加解密
這篇文章主要介紹了基于NodeJS開發(fā)釘釘回調(diào)接口 實現(xiàn)AES-CBC加解密,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08

