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)站找到女朋友對應城市修改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)絡錯誤,獲取每日問候失??!' 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("應用實例,訪問地址為 http://%s:%s", port) })
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。
相關(guān)文章
node異步使用await和不用await的區(qū)別實例分析
這篇文章主要介紹了node異步使用await和不用await的區(qū)別,結(jié)合實例形式分析了node.js異步使用await和不用await的實例中,同步與異步執(zhí)行的區(qū)別,需要的朋友可以參考下2023-06-06零基礎搭建Node.js、Express、Ejs、Mongodb服務器及應用開發(fā)入門
這篇文章主要介紹了零基礎搭建Node.js、Express、Ejs、Mongodb服務器及應用開發(fā)入門,本文在windows8系統(tǒng)下完成本教程,其它系統(tǒng)也可參考,需要的朋友可以參考下2014-12-12使用upstart把nodejs應用封裝為系統(tǒng)服務實例
這篇文章主要介紹了使用upstart把nodejs應用封裝為系統(tǒng)服務實例,需要的朋友可以參考下2014-06-06一次NodeJS內(nèi)存泄漏排查的實戰(zhàn)記錄
這篇文章主要給大家介紹了一次NodeJS內(nèi)存泄漏排查的實戰(zhàn)記錄,文中給出了詳細的排查過程以及內(nèi)存泄漏的解決方法,大家可以學習一下以備不時之需,需要的朋友可以參考下2022-03-03基于NodeJS的前后端分離的思考與實踐(六)Nginx + Node.js + Java 的軟件棧部署實踐
關(guān)于前后端分享的思考,我們已經(jīng)有五篇文章闡述思路與設計。本文介紹淘寶網(wǎng)收藏夾將 Node.js 引入傳統(tǒng)技術(shù)棧的具體實踐。2014-09-09