Python BeautifulSoup XML Parsing Python BeautifulSoup XML Parsing xml xml

Python BeautifulSoup XML Parsing


BeautifulSoup makes getting at attributes and values in xml really simple. I tweaked your example function to use these features.

import sysfrom BeautifulSoup import BeautifulSoup as Soupdef parseLog(file):    file = sys.argv[1]    handler = open(file).read()    soup = Soup(handler)    for message in soup.findAll('message'):        msg_attrs = dict(message.attrs)        f_user = message.find('from').user        f_user_dict = dict(f_user.attrs)        print "%s: %s [%s @ %s]" % (f_user_dict[u'friendlyname'],                                    message.find('text').decodeContents(),                                    msg_attrs[u'date'],                                    msg_attrs[u'time'])if __name__ == "__main__":    parseLog(sys.argv[1])


I'd recommend using the builtin ElementTree module. BeautifulSoup is meant to handle unwell-formed code like hacked up HTML, whereas XML is well-formed and meant to be read by an XML library.

Update: some of my recent reading here suggests lxml as a library built on and enhancing the standard ElementTree.