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.hqwc.cn/news/291707.html

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

相关文章

SpringIOC之MethodBasedEvaluationContext

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

飞天使-k8s知识点7-kubernetes升级

文章目录 验证新版本有没有问题需要安装的版本微微 1.20.6.0kubeadm upgrade plan 验证新版本有没有问题 查看可用版本的包 现有的状态 查看版本 yum list kubeadm --showduplicates |grep 1.20 yum list kubelet --showduplicates |grep 1.20 yum list kubectl --showduplic…

随机森林 2(决策树)

通过 随机森林 1 的介绍,相信大家对随机森林都有了一个初步的认知,知道了随机和森林分别指的是什么,以及决策树根据什么选择内部节点。本文将会从森林深入到树,去看一下决策树是如何构建的。网上很多文章都讲了决策树如何构建&…

Linux笔记---文件和目录操作

🍎个人博客:个人主页 🏆个人专栏:Linux学习 ⛳️ 功不唐捐,玉汝于成 目录 前言 命令 ls (List): pwd (Print Working Directory): cp (Copy): mv (Move): rm (Remove): 结语 我的其他博客 前言 学习Linux命令…

tcp 的限制 (TCP_WRAPPERS)

#江南的江 #每日鸡汤:青春是打开了就合不上的书,人生是踏上了就回不了头的路,爱情是扔出了就收不回的赌注。 #初心和目标:拿到高级网络工程师 TCP_WRAPPERs Tcp_wrappers 对于七层模型中是位于第四层的安全工具,他…

版本化数据库管理工具Flyway介绍和Spring Boot集成使用

文章目录 核心功能如何使用 Flyway最佳实践Spring Boot使用 Flyway 是一个版本化数据库管理工具,用于跟踪、管理和应用数据库的变化。它非常适合在团队开发环境中使用,其中多个人员可能会在数据库结构进行更改。Flyway 通过版本控制可以帮助你确保所有人…

微服务之服务注册与发现

服务注册发现 服务注册就是维护一个登记簿,它管理系统内所有的服务地址。当新的服务启动后,它会向登记簿交待自己的地址信息。服务的依赖方直接向登记簿要 Service Provider 地址就行了。当下用于服务注册的工具非常多 ZooKeeper,Consul&…

​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化

2022年亚马逊云科技re:Invent盛会于近日在拉斯维加斯成功召开,吸引了众多业界精英和创新者。亚马逊云科技边缘服务副总裁Jan Hofmeyr在演讲中分享了关于亚马逊云科技海外服务器边缘计算的最新发展和创新成果,引发与会者热烈关注。 re:Invent的核心主题是…

vue项目npm run build报错npm ERR! missing script: build(已解决)

vue项目npm run build报错npm ERR! missing script: build(已解决) 错误描述: 今天准备打包vue项目上线是出现下列错误: 找了很多解决方法都不行,最后打开自己的package.json文件发现:build后面多了个&a…

ES排错命令

GET _cat/indices?v&healthred GET _cat/indices?v&healthyellow GET _cat/indices?v&healthgreen确定哪些索引有问题,多少索引有问题。_cat API 可以通过返回结果告诉我们这一点 查看有问题的分片以及原因。 这与索引列表有关,但是索引…

Python 爬虫之下载视频(二)

爬取某Y的视频链接和标题 文章目录 爬取某Y的视频链接和标题前言一、基本思路二、程序解析阶段三、程序处理阶段总结 前言 这篇内容就简单给大家写个如何从网页上爬取某B主 主页 页面上所有的视频链接和视频标题。 这篇是基础好好看,下篇会根据这篇的结果做一个批…

mysql SQL执行超时问题

show variables like max_execution_time 使用这个命令查看了,没有设置sql执行超时时间,那么大概率问题就出在阿里的Druid数据库连接池出了问题 尝试着socketTimeout由60000毫秒改成10000毫秒,果然执行了十几秒就超时报错了 socketTime…