node实现简单的数据爬虫

前言

我使用的是墨迹天气的页面,因为这个使用的链接简单 页面结构简单并且大都是文字形式

第一步

打开墨迹天气网址 随便点开一个页面
在这里插入图片描述
点击F12或者鼠标右键点击检查 查看页面的信息

分析页面内容

在这里插入图片描述

使用文字所在的class和标签来定位

在这里插入图片描述

编写代码

配置express环境

引入包

const axios = require(‘axios’);
const cheerio = require(‘cheerio’);

获取html信息

定义url

const weatherURL = https://tianqi.moji.com/weather/china/shanghai/shanghai;

访问相应的网页

try {
let weather = await getWeatherTips(weatherURL);
// let str = $${weather};
// console.log(weather)
res.json(weather);
} catch (error) {
res.status(500).json({ error: ‘Internal Server Error’ });
}
});

将url传入相应的方法中 方法进行处理

function getWeatherTips(url) {return new Promise(async (resolve, reject) => {//使用异步请求try {const response = await axios.get(url);//获取url并访问 得到页面const html = response.data || "";//获取页面内容const $ = cheerio.load(html);//解析成htmlconst temp2 = $('.wea_alert  em').text().trim();/const temp = $('.wea_weather em').text().trim() + '℃'; //这就是刚刚看到的class和标签名 获取里面的textconst desc = $('.wea_weather b').text().trim();const water = $('.wea_about span').text().trim();const win = $('.wea_about em').text().trim();const tips = $('.wea_tips em').text().trim();const words = `今日天气\n${desc}\n温度:${temp}\n湿度:${water}\n风力:${win}\n${tips}\n空气质量${temp2}`;// resolve.json({//   success: true// });const word = {temp: temp,desc: desc,water: water,win: win,tips: tips,area: temp2}// resolve.json({//   words: words// });resolve(word);//输出返回的内容// res.json({ success: true, data: 123 });// resolve.json({ success: true, data: `${words}` });// res.json({//   success: true, data: {//     words:words// temp: temp,// desc: desc,// water: water,// win: win,// tips: tips,// }// });} catch (error) {reject(error);}});
}

全部代码

这个是我加了传入参数的版本 你可以自己把你定义的天气相应的url设置好

const axios = require('axios');
const cheerio = require('cheerio');app.post('/words', async function (req, res) {const arr = req.body.address;console.log(arr)const weatherURL = `https://tianqi.moji.com/weather/china` + `${arr}`;console.log(weatherURL)try {let weather = await getWeatherTips(weatherURL);// let str = `$${weather}`;// console.log(weather)res.json(weather);} catch (error) {res.status(500).json({ error: 'Internal Server Error' });}
});// 获取墨迹天气提示信息
function getWeatherTips(url) {return new Promise(async (resolve, reject) => {try {const response = await axios.get(url);const html = response.data || "";const $ = cheerio.load(html);const temp2 = $('.wea_alert  em').text().trim();const temp = $('.wea_weather em').text().trim() + '℃';const desc = $('.wea_weather b').text().trim();const water = $('.wea_about span').text().trim();const win = $('.wea_about em').text().trim();const tips = $('.wea_tips em').text().trim();const words = `今日天气\n${desc}\n温度:${temp}\n湿度:${water}\n风力:${win}\n${tips}\n空气质量${temp2}`;// resolve.json({//   success: true// });const word = {temp: temp,desc: desc,water: water,win: win,tips: tips,area: temp2}// resolve.json({//   words: words// });resolve(word);// res.json({ success: true, data: 123 });// resolve.json({ success: true, data: `${words}` });// res.json({//   success: true, data: {//     words:words// temp: temp,// desc: desc,// water: water,// win: win,// tips: tips,// }// });} catch (error) {reject(error);}});
}

接口测试

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/238125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

景区气象站:旅游体验的新升级

随着科技的发展和人们生活水平的提高,越来越多的人选择在节假日或周末外出旅游,感受大自然的美好。然而,在享受大自然的同时,天气因素成为了影响旅游体验的关键因素之一。为了更好地服务游客,许多景区开始引入气象站&a…

多层负载均衡实现

1、单节点负载均衡 1)站点层与浏览器层之间加入了一个反向代理层,利用高性能的nginx来做反向代理 2)nginx将http请求分发给后端多个web-server 优点: 1)DNS-server不需要动 2)负载均衡:通过ngi…

【每日一题】得到山形数组的最少删除次数

文章目录 Tag题目来源解题思路方法一:最长递增子序列 写在最后 Tag 【最长递增子序列】【数组】【2023-12-22】 题目来源 1671. 得到山形数组的最少删除次数 解题思路 方法一:最长递增子序列 前后缀分解 根据前后缀思想,以 nums[i] 为山…

用C#也能做机器学习?

前言✨ 说到机器学习,大家可能都不陌生,但是用C#来做机器学习,可能很多人还第一次听说。其实在C#中基于ML.NET也是可以做机器学习的,这种方式比较适合.NET程序员在项目中集成机器学习模型,不太适合专门学习机器学习&a…

大规模采用奇点临近?Web3应用爆发离不开这个“支撑”赛道

作者|Jason Jiang 数据是当今世界最具价值的资源,也是数字掘金的必争之地。尽管Web3迄今仍有诸多争议,但随着铭文、Gamefi、DeFi等链上生态的多样化发展,我们正身处Web3应用爆发的洪流之中,区块链数据赛道也因此备受关…

vue关闭当前路由页面并跳转到其父页面

1.dom中添加关闭或取消按钮 <el-button type"primary" class"blueLinearbg cancelBtn" click"cancel" >取 消</el-button>2.cancel方法中 /*取消或关闭*/cancel(){this.$store.dispatch("tagsView/delView", this.$route)…

电梯机房【摊鸡蛋】

小伍&#xff1a;大家好&#xff0c;今天小伍给大家表演个机房【摊鸡蛋】&#xff1b; &#xff08; 哈哈哈 &#x1f602;&#x1f602;&#x1f602; &#xff09; 523能源&#xff1a;别闹了&#xff0c;机房里连个锅都没有&#xff0c;怎么摊鸡蛋啊&#xff1f; 小伍&am…

基于javaWeb的長安智慧医疗管理系统设计与实现论文

長安智慧医疗管理系统 摘 要&#xff1a;如今社会上各行各业&#xff0c;都在用属于自己专用的软件来进行工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。互联网的发展&#xff0c;离不开一些新的技术&#xff0c;而新技术的产生往往是为了解决…

Centos7在安装Graylog时新安装MongoDB报错端口不监听服务不启动无法运行启动失败

由于虚拟机服务器上需要安装Graylog需要安装MongoDB&#xff0c;尝试官网下载安装包&#xff0c;和yum安装均无法正常启动&#xff0c;折腾了好几天&#xff0c;重装了十几次&#xff0c;网上搜索了很多很多资料&#xff0c;均无法正常运行&#xff0c;百度上搜索各种文档&…

Java代码审计Mybatis注入文件上传下载读取(非常详细!!)

目录 0x00 前言 0x01 Mybatis注入审计 - 若依&#xff08;Ruoyi&#xff09;后台管理系统 4.6.0 1、项目介绍与部署 - Ruoyi 2、若依 Ruoyi - Mybatis注入 - 代码审计 3、代审常搜词 - Java SQL 注入 0x02 文件上传漏洞审计 - Inxedu && Tmall 1、项目介绍与部署…

Java智慧工地源码 SAAS智慧工地源码 智慧工地管理可视化平台源码 带移动APP

一、系统主要功能介绍 系统功能介绍&#xff1a; 【项目人员管理】 1. 项目管理&#xff1a;项目名称、施工单位名称、项目地址、项目地址、总造价、总面积、施工准可证、开工日期、计划竣工日期、项目状态等。 2. 人员信息管理&#xff1a;支持身份证及人脸信息采集&#…

MyBatis:动态 SQL 标签

MyBatis 动态 SQL 标签if 标签where 标签trim 标签choose 、when 、otherwise 标签foreach 标签附 动态 SQL 标签 MyBatis 动态 SQL 标签&#xff0c;是一组预定义的标签&#xff0c;用于构建动态的 SQL 语句&#xff0c;允许在 SQL 语句中使用条件、循环和迭代等逻辑。通过使…

利用Matplotlib画简单的线形图

实验题目&#xff1a;简单的线形图 实验目的&#xff1a;利用Matplotlib画简单的线形图 实验环境&#xff1a;海豚大数据和人工智能实验室&#xff0c;使用的Python库 名称 版本 简介 numpy 1.16.0 线性代数 Pandas 0.25.0 数据分析 Matplotlib 3.1.0 数据可视化 …

备份至关重要!如何解决iCloud的上次备份无法完成的问题

将iPhone和iPad备份到iCloud对于在设备发生故障或丢失时确保数据安全至关重要。但iOS用户有时会收到一条令人不安的消息&#xff0c;“上次备份无法完成。”下面我们来看看可能导致此问题的原因&#xff0c;如何解决此问题&#xff0c;并使你的iCloud备份再次顺利运行。 这些故…

技术分享-Jenkins

持续集成及Jenkins介绍 软件开发生命周期叫SDLC&#xff08;Software Development Life Cycle&#xff09;&#xff0c;集合了计划、开发、测试、部署过程。 在平常的开发过程中&#xff0c; 需要频繁地&#xff08;一天多次&#xff09;将代码集成到主干&#xff0c;这个叫持…

闭包 闭包理解 闭包的应用实例

闭包 形成闭包的条件&#xff1a;一个函数访问外部的变量就形成了闭包 用闭包的好处&#xff1a; (1)可以通过闭包函数形成独立实例的变量 (2)不会造成全局污染 代码调试&#xff0c;演示闭包形成过程 <script> //函数内部访问外部的变量&#xff0c;就形成了闭包functi…

Leetcode 406 根据身高重建队列

题意理解&#xff1a; people [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]] 给定一个二维数组&#xff0c;&#xff08;h,k&#xff09;h表示此人身高&#xff0c;k表示前面有几个人比他高。 我们按照每个人的h,k两个维度的需求给每个人排在合适的位置。 如&#xff1a; [5,0][7,0]…

深入浅出堆排序: 高效算法背后的原理与性能

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《linux深造日志》 《高效算法》 ⛺️生活的理想&#xff0c;就是为了理想的生活! &#x1f4cb; 前言 &#x1f308;堆排序一个基于二叉堆数据结构的排序算法&#xff0c;其稳定性和排序效率在八大排序中也…

ctfshow sql 195-200

195 堆叠注入 十六进制 if(preg_match(/ |\*|\x09|\x0a|\x0b|\x0c|\x0d|\xa0|\x00|\#|\x23|\|\"|select|union|or|and|\x26|\x7c|file|into/i, $username)){$ret[msg]用户名非法;die(json_encode($ret));}可以看到没被过滤&#xff0c;select 空格 被过滤了&#xff0c;可…

制造行业定制软件解决方案——工业信息采集平台

摘要&#xff1a;针对目前企业在线检测数据信号种类繁多&#xff0c;缺乏统一监控人员和及时处置措施等问题。蓝鹏测控开发针对企业工业生产的在线数据的集中采集分析平台&#xff0c;通过该工业信息采集平台可将企业日常各种仪表设备能够得到数据进行集中分析处理存储&#xf…