爬取最近七天的天气情况并实现语言播报 您所在的位置:网站首页 播报一下今天的天气情况如何 爬取最近七天的天气情况并实现语言播报

爬取最近七天的天气情况并实现语言播报

2024-06-16 08:17| 来源: 网络整理| 查看: 265

文章目录 前言实现思路实现过程寻找目标网站爬取目标网页解析网页整理数据创建语音接口将数据与接口对接实现效果实例全代码脚本打包 总结

前言

Python是一门很强大的语言,用它可以做到很多事情,我自己也学Python一些天了,也了解了一些知识,最近忙于整理比较重要的知识写成博客记录下来,可是心里突然总想着要用Python做点什么有意思的事情,就想到了这里,用它写个简单的脚本能够爬取最近的天气情况并且实现语言播报,最后给打包成exe程序后放在电脑桌面,再也不用打开手机或者打开网站查看天气了哈哈。

实现思路 首先,爬取天气情况首先要找个天气网站,然后用爬虫爬取网页,再解析网页获得我们需要的天气信息,然后把数据整理一下变成便于我们操作的形式。然后实现语言播报有几种方法,比较方便的是使用pyttsx3这个库,它可以很方便的将字符串转化为语言播放,但我在这里使用的是百度的API接口(可能因为声音好听吧哈哈哈),在百度AI开放平台上它们提供了很多接口供我们使用,包括语音合成、图片识别等等一些高端接口,我们只需要在上面创建接口供我们调用就行(注意百度接口的使用需要联网),在这里我利用百度提供的接口将目标字符串合成为.mp3格式文件,然后使用playsound库将其播放,最终达到我们想要的效果,下面是思路实现流程图: Created with Raphaël 2.2.0 开始 寻找目标网站 爬取网页数据 好搞吗 解析网页整理数据 使用百度接口及playsound库创建一个语音实现的接口 将数据与接口对接实现效果 脚本打包 结束 yes no 实现过程 寻找目标网站

天气网站有很多哈,然后我就随便找了一个,到底多随便呢,我只是打开我电脑上的QQ浏览器,如图: 在这里插入图片描述 看网页上边不是有天气情况吗,点击打开就好,如下: 在这里插入图片描述 好了,等我打开这个网页,哇塞,数据也挺详细的了,行吧,这就是我要爬取的网页了,到这里目标网站已经找好,是不是既方便又随意,接下来就是希望我能成功获得我想要的数据了,首先想一下,我想要的数据也就是最近几天的天气状况比如阴天晴天之类的以及最高温度最低温度罢了,要的数据并不多,这些在网页上都有,于是开始下一步。

爬取目标网页

首先鼠标右键点击查看网页源代码,如下: 在这里插入图片描述 因为本来这个网页里边杂七杂八的东西都比较少,所有打开源代码看一下,结构是非常清晰的,接下来就是需要找到我们想要的数据了,可以通过快捷键ctrl+f的形式对我们要的数据进行查找,不过因为网页内容比较少,我随意往下滑了两下就看到了我想要的数据: 在这里插入图片描述 简单分析一下,我们要的数据(日期、天气情况)都被封装在一个li的大标签之中,而它们自身也被封装在相应的name(名字)为p,attrs(属性)分别为date和des的子标签中,不过,等等,我好像没看到温度的数据啊,别急再往下滑一下: 在这里插入图片描述 看到了吗,它们是被单独封装在了属性为r-temp的div标签中了,那么到现在为止我们想要的数据都已经找到,并且它们都被特定的标签封装,因此我们使用BeautifulSoup库可以非常非常方便的得到我们想要的数据。所以你觉得好搞吗?好搞!那就开搞! 首先,定义一个函数,用来得到网页信息,废话不多说,直接上代码:

def gethtmltext(url): try: r = requests.get(url) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return print('爬取有误')

OK,仅仅需要这几行代码,我们已经爬取了这个网页。

解析网页整理数据

网页内容都给爬取了下来,接下来就需要对数据进行整理了,整理的这个过程是最头疼的,因为我水平有限很多东西不了解,我使用的方法可能非常繁琐,不过好在还是整理成功了,这时候我的目标是定义一个函数,通过输入我们刚才爬取的网页的信息,来对我们需要的那几样数据进行提取整理并最终放进一个列表中供我们使用,话不多说,还是上代码:

def putweather(html): soup = BeautifulSoup(html,'html.parser') #将获得的响应文本树形解析 date = soup.find_all('p','date') #找到所有标签名称为P,属性为date的标签 date_str_list = [] for i in range(7): date_str_list.append(str(date[i])) date_list = [] for i in range(7): date_list.append(date_str_list[i][16:21]) #解析出日期并放进一个列表 #日期列表即为date_list des = soup.find_all('p','des') #同上 des_str_list = [] for i in range(7): des_str_list.append(str(des[i])) des_list = [] for i in range(7): des_list.append(des_str_list[i][15:23]) new_des_list = [] des___list = [] for i in range(7): new_des_list.append(des_list[i].split('


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有