Python3 XML 获取雅虎天气的实现方法
参考廖雪峰的Python教程,实现LinuxPython3获取雅虎天气
#!/usr/bin/envpython3
#coding:utf-8
importos
fromdatetimeimportdatetime
fromurllibimportrequest
fromxml.parsers.expatimportParserCreate
file_name="weather.txt"
forroot,dirs,filesinos.walk("."):
iffile_nameinfiles:
os.remove(os.path.join(root,file_name))
defyahoo_weather(data):
flag=False
weather={"city":"","pubdate":"","forecast":[]}
defstart_element(name,attrs):
ifname=="yweather:location":
weather["city"]=weather["city"]+attrs["city"]
weather["city"]=weather["city"]+""+attrs["country"]
ifname=="yweather:forecast":
forecast={}
forecast["date"]=attrs["date"]
forecast["day"]=attrs["day"]
forecast["high"]=attrs["high"]
forecast["low"]=attrs["low"]
forecast["text"]=attrs["text"]
weather["forecast"].append(forecast)
ifname=="pubDate":
nonlocalflag
flag=True
defchar_data(text):
nonlocalflag
ifflag:
weather["pubdate"]=text
flag=False
parser=ParserCreate()
parser.StartElementHandler=start_element
parser.CharacterDataHandler=char_data
parser.Parse(data)
returnweather
defprint_weather(weather):
withopen(file_name,"a")asf:
s="City:%s\nPubdate:%s"%(weather["city"],weather["pubdate"])
print("%s"%(weather["city"]))
f.write(s+"\n")
forforecastinweather["forecast"]:
date=datetime.strptime(forecast["date"],"%d%b%Y").strftime("%Y-%m-%d")
s="Date:%sHigh:%sLow:%sWeather:%s"%(date,forecast["high"],forecast["low"],forecast["text"])
f.write(s+"\n")
f.write("\n")
citys=["2151330","2151849","44418","615702","2514815"]
forcityincitys:
url="https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20%3D%20"
url=url+city
url=url+"&format=xml"
withrequest.urlopen(url,timeout=4)asf:
weather=yahoo_weather(f.read())
print_weather(weather)
print("weatherconditionshaswrittento%s"%(file_name))
以上这篇Python3XML获取雅虎天气的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。