当前位置: 首页 > 科技观察

用Python爬取天气并用语言播报

时间:2023-03-18 22:14:39 科技观察

一、预备知识本案例实现功能:使用网络爬虫爬取某地的天气,并进行打印和语音播报。要使用requests库,lxml库,pyttsx3库,如果没有,可以先安装,通过pip安装即可:网站数据。Lxml库是用于处理XML和HTML的功能最丰富且易于使用的库。通常,lxml库中的etree用于将HTML转换为文档。Pyttsx3库是一个非常简单的语音播放库。你给它什么它就读什么,当然不在乎生硬的语气。基本用法如下:importpyttsx3word=pyttsx3.init()word.say('Hello')#关键句,没有这行代码,语音将无法播放如果您遇到技术问题或有技术问题,可以私信“01”给小编。爬虫就是爬取网页的相关内容。了解HTML可以帮助您更好地理解网页的结构和内容。了解TCP/IP协议和HTTP协议的知识就够了,可以让你了解网络请求和网络传输的基本原理,这个小案例用不到。2.我再详细说一下2.1。获取请求目标URL我们首先导入requests库,然后使用它来获取目标网页。我们请求的是天气网站上的北京天气。importrequests#向目标url地址发送请求并返回响应对象req=requests.get('https://www.tianqi.com/beijing/')#.text为响应对象的网页htmlprint(req.text)打印出来的结果就是网站显示的内容。浏览器通过内容“解析”内容。我们看到的结构如下:我们请求后得到的数据。朋友们注意,运行后可能获取不到网页代码,而是显示403。这是什么意思?403错误是访问网站时常见的错误提示,表示资源不可用。服务器理解客户端的请求,但拒绝处理它。我们写的爬虫一般会默认告诉服务器自己发送Python爬取请求,很多网站都会设置反爬虫机制来防止爬虫访问。所以,我们希望目标服务器响应,所以我们伪装我们的爬虫。这个小案例是通过改变常用的User-Agent字段来伪装的。修改之前的代码,将爬虫伪装成浏览器请求,这样就可以正常访问了。importrequestsheaders={'content-type':'application/json','User-Agent':'Mozilla/5.0(Xll;Ubuntu;Linuxx86_64;rv:22.0)Gecko/20100101Firefox/22.0'}#到目标url发送请求返回响应对象的地址req=requests.get('https://www.tianqi.com/beijing/',headers=headers)#.text为响应对象的网页htmlprint(req.text)User-Agent字段是怎么来的呢?我们以Chrome浏览器为例,首先随机打开一个网页,在键盘上按F12或者在空白处点击鼠标右键,选择“检查”;然后刷新网页,点击“Network”再点击“Doc”,点击Headers,在信息栏中勾选RequestHeaders的User-Agent字段,直接复制,我们就可以使用了。2.2.lxml.etree的登场我们从网页请求的数据是复杂的,只有一部分是我们真正想要获取的数据。例如,我们从天气网站查看北京的天气。只有下面的图片让我们想要得到它。我们如下如何提取呢?这将使用lxml.etree。整个代码中只有一小部分我们想要的信息。发现我们要的天气和温度都在“class='weather_info'”这个级别下,好办。我们在请求的代码后添加:html_obj=etree.HTML(html)html_data=html_obj.xpath("//d1[@class='weather_info']//text()")让我们打印(html_data)看看是否提取的就是我们要的数据。我发现连网页中的换行符都被提取出来了,而且,别忘了,提取出来的列表是。我们还要做一点处理。word="欢迎使用天气播报小助手"fordatainhtml_data:word+=data处理完我们打印出来看看,嗯,想要的都有了。不过多了一个【SwitchCity】,我们精益求精,最后把这个去掉。2.3.说结果。我们要的数据在word变量中。现在让他读出来。使用pyttsx3库,ptt=pyttsx3.init()ptt.say(word)ptt.runAndWait()OK,现已完成。我们一步步摸索,现在整合在一起,最终的播放效果还是不错的。这是一次非常美好的爬行之旅,期待下一次的爬行!