作者:蓝色水气球_453 | 来源:互联网 | 2023-10-11 16:30
importurllib.requestimportrefromurllib.requestimportquoteimportastdefurlopen(url):requrlli
import urllib.request
import re
from urllib.request import quote
import ast
def urlopen(url): req = urllib.request.Request(url)
req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36")
html = urllib.request.urlopen(req)
html = html.read()
return html
#urlopen 打开链接 并加了heaaders
def nam():
print('请输入城市名字, 比如是深圳市,就只需要输入‘深圳’')
name = input('请输入城市名:')
name = quote(name)
#这里是中文要转成链接代码用 from urllib.request import quote 用这个函数name = quote(name) 就可以了才不会报错
url = 'http://toy1.weather.com.cn/search?cityname={}'.format(name)
#这个是查询接口加上城市名
htm = urlopen(url)
#返回的数据里面会有城市的代码
htm = htm.decode('utf-8')
return htm
#这里返回的是一个字符串 里面有很多
def dia(): daima = nam()
while daima == '([])':
#这个循环是为了判断输入的城市是否正确,比如输入‘城市’ 中国没这个名字的城市就会让你重新输入并且无限循环 直到正确
daima = nam()
#这就是如果输错了就会运行这一行代码并且重新把数据传回daima这个变量,再一次循环对比 如果==([])就说明写错了 需要再输入,如果对了就会进入下一个步骤
daima = re.search(r'("ref":")(\d*?)(~)',daima)
#数据正确就用正则表达式提取需要的城市代码
daima = daima.group(2)
#group(2)这个就是我们需要的 取出来是str类型的 可以直接用
return daima
#然后返回这个城市代码
def cha(dianma):
#现在我们得到代码加入到链接里面就可以访问了
url1 = 'http://www.weather.com.cn/data/sk/{}.html'.format(daima)
data = urlopen(url1)
data = data.decode('utf-8')
datadic = ast.literal_eval(data)
#返回的数据是一个字符串 要转成字典方便取数据
chen = datadic['weatherinfo']['city']
wendu = datadic['weatherinfo']['temp']
feng = datadic['weatherinfo']['WD']
shidu = datadic['weatherinfo']['SD']
time = datadic['weatherinfo']['time']
#这里面就是数据了 可以直接取出来 然后输入
print('城市:'+chen+'\n')
print('温度'+wendu+'\n')
print('风向'+feng+'\n')
print('湿度'+shidu+'\n')
print('时间'+time+'\n')
#输入的数据
daima = dia()
cha(daima)