Discuss / Python / 作业

作业

Topic source

#1 Created at ... [Delete] [Delete and Lock User]

作业

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

  • 1

Reply