作业
from xml.parsers.expat import ParserCreate from urllib import request class DefaultSaxHandler(dict): def start_element(self, name, attrs): #print('sax:start_element: %s, attrs: %s' % (name, str(attrs))) self.temp = name def end_element(self, name): pass #print('sax:end_element: %s' % name) def char_data(self, text): #print('sax:char_data: %s' % text) self.__setattr__(self.temp,text) def __getitem__(self,name): return self.__dict__[name] def __str__(self): L = 'DefaultSaxHandler内容如下:\n' for k,v in self.__dict__.items(): if k != 'temp': L += '%s = %s\n' % (k,v) return L def parseXml(xml_str): handler = DefaultSaxHandler() parser = ParserCreate() parser.StartElementHandler = handler.start_element parser.EndElementHandler = handler.end_element parser.CharacterDataHandler = handler.char_data parser.Parse(xml_str) #print(xml_str) print(handler) return handler # 测试: URL = 'https://restapi.amap.com/v3/weather/weatherInfo?key=自己申请的高德Key\ city=420100&extensions=all&output=XML'.replace(' ','') with request.urlopen(URL, timeout=4) as f: data = f.read() result = parseXml(data.decode('utf-8')) assert result['city'] == '武汉市' print('ok')
运行结果:
DefaultSaxHandler内容如下: status = 1 count = 1 info = OK infocode = 10000 city = 武汉市 adcode = 420100 province = 湖北 reporttime = 2023-12-29 18:31:59 date = 2024-01-01 week = 1 dayweather = 晴 nightweather = 晴 daytemp = 9 nighttemp = 0 daywind = 西南 nightwind = 西南 daypower = 1-3 nightpower = 1-3 daytemp_float = 9.0 nighttemp_float = 0.0 ok
Sign in to make a reply
偘
作业
运行结果: