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获取雅虎天气的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。