Author:qyan.li
Date:2022.5.29
Topic:python借助于网络爬虫实现天气查询系统
一、写在前面:
?
??????
~~~~~~
??????最近,课程这边需要实现一个简单的人机交互系统,考虑到自己之前实现过基于python的智能聊天机器人,参考链接:(13条消息) 基于“机器学习”的智能聊天机器人—python实现(1)_隔壁李学长的博客-CSDN博客_python训练聊天机器人。所以这次打算实现一个类似的智能交互系统,但是主体转向功能性 :基于python去实现一个功能性的机器人,即可以根据用户输入理解命令,执行对应的操作,而不只是仅仅进行聊天。
?
??????
~~~~~~
??????这个系统我会作为一个系列来进行更新,本篇博文更新天气查询 系统的实现,后续还会相继更新剩余部分,包括:
- 自动发送微信或者QQ消息
- 自动实现指定音乐播放,网页内容的自动检索
- 自动发送邮件
二、天气查询系统
?
??????
~~~~~~
??????天气查询系统的实现原理和思路比较简单,主要利用的是网络爬虫的技术。通过城市的名称构造网址,分析网页源码,获取目标城市的天气信息,返回即完成天气的智能查询系统。
?
??????
~~~~~~
??????天气查询代码的主体为网页内容的解析,针对于网络爬虫的代码,本文不会进行详细讲解,一方面自己最近复习考试,时间紧张;另外,针对于爬虫,个人了解也不是深刻,就不发出来误人子弟。后续相关知识完善后,可能会出几篇相关的博文介绍一下爬虫的相关技术。
?
??????
~~~~~~
??????老样子,还是先粘贴代码,方便大家参考和应用:
import urllib.request,urllib.error
from bs4 import BeautifulSoup
import re
class WeatherInfo():
def __init__(self,cityName):
self.city = cityName
self.url = r'https://www.tianqi.com/' + str(cityName) + r'/'
self.findTime = re.compile(r'<dd class="week">(.*?)</dd>')
self.html = None
self.WeatherInformation = ''
def askURL(self):
head = {'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0'
}
request = urllib.request.Request(self.url, headers=head)
html = ''
try:
responseInfo = urllib.request.urlopen(request)
html = responseInfo.read().decode('utf-8')
except urllib.error.URLError as e:
if hasattr(e, 'code'):
print(e.code)
if hasattr(e, 'reason'):
print(e.reason)
self.html = html
def getData(self):
soup = BeautifulSoup(self.html, 'lxml')
item = soup.find('div', class_="left")
ShiDuItem = item.find('dd', class_='shidu')
WeatherItem = item.find('dd', class_='weather')
AirItem = item.find('dd', class_='kongqi')
item = str(item)
Time = str(re.findall(self.findTime, item)[0]).split('\u3000')[0]
ShiduInfo = ''
for item in ShiDuItem.find_all('b'):
ShiduInfo = ShiduInfo + str(item.string)
ShiduInfo = ShiduInfo + ' '
temperature = WeatherItem.find('p', class_='now').find('b').string + '摄氏度'
condition = WeatherItem.find('span').find('b').string
TempCondition = temperature + condition
AirCondition = AirItem.find('h5').string
PM = AirItem.find('h6').string
AirPM = AirCondition + PM
self.WeatherInformation = Time + ' ' + ShiduInfo + '温度' +TempCondition + AirPM
def startWeather(self):
self.askURL()
self.getData()
if __name__ == '__main__':
WeatherItem = WeatherInfo('beijing')
WeatherItem.startWeather()
print(WeatherItem.WeatherInformation)
针对于代码中比较重要的几点进行说明:
-
getData() 函数中获取的内容可以进行修改,可以自行调整获取的内容 -
本代码仅能获取目标城市当天的天气信息,如果想动态调整时间,可自行修改代码 -
后期欲实现语音人机交互,需要将语音识别的城市名称转换为拼音进行网址的构建,此时需要python 的xpinyin 模块: from xpinyin import Pinyin
P = Pinyin()
cityName = '北京'
cityName_pinyin = P.get_pinyin(cityName,'')
print(cityName_pinyin)
-
代码调用方式,可以直接放置在目标文件夹下,在py 文件引入WeatherClass 类即可 from WeatherClass import WeatherInfo ,即可直接在新文件中调用该天气查询类
三、总结:
?
??????
~~~~~~
??????文章内容实现简单的天气查询,可以应用于后续的智能机器人系统中,作为一个小的功能模块,通过此,也可以锻炼一下python代码编写以及网络爬虫的相关操作。
|