来自:

#!/usr/bin/python3.5#from xml.parsers.expat import ParserCreateclass defaultsax(object):    def __init__(self):        self.db = {}    def start_element(self, name, attrs):        print('sax:start_elementname:%s,attrs:%s' % (name,str(attrs)))    def end_element(self, name):        print('sax:end_element:%s' % name)        pass    def char_data(self, text):        print('sax:char_data: %s' % text)        #passxml = r'''
    
        
Yahoo! Weather - Beijing, CN        
Wed, 27 May 2015 11:00 am CST
        
        
        
        
        
        
            
39.91
            
116.39
            
Wed, 27 May 2015 11:00 am CST
            
            
            
            
            
            
        
    
'''handler = defaultsax()parser = ParserCreate()parser.StartElementHandler = handler.start_elementparser.EndElementHandler = handler.end_elementparser.CharacterDataHandler = handler.char_dataparser.Parse(xml)

执行之后发现end_element字段没有什么有用的信息,所有将其删除之:

def end_element(self, name):    #print('sax:end_element:%s' % name)    pass

为了方便分析,char_data字段也先不显示:

def char_data(self, text):    print('sax:char_data: %s' % text)    #pass

改好后,执行脚本,获得以下内容(只截取一部分):

很明显,name的内容也没有我们需要的内容,不过要根据name对不同行内容做处理,attrs是我们需要的真正内容,attrs显示的格式明显是字典,这时就可以利用字典的key得到我们想要的,更改start_element段代码并增加__init__段:

def __init__(self):    self.weater = {}              #定义一个空字典def start_element(self, name, attrs):    self.weater['na'] = name    if self.weater['na'] == 'yweather:location':        #对name=yweather:location行的attrs做处理        print('国家:%s,城市:%s' % (attrs['country'],attrs['city']))

保存并执行脚本:

然后根据需要,对每个行做相应的截取,最后得到自己想要的。