Schneller MiniRDFparser

Code-Stücke können hier veröffentlicht werden.
Antworten
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi, ich bin gerade dabei meinen alten Quellcode für ein Nachrichtentelegramm zu überholen und portabel für andere RDF-Dienste zu machen, deswegen hab ich mal einen kleinen Miniparser geschrieben. Argumente sind eine RDF oder RSS Datei mit den Nachrichten und ein Dictionary mit den zu parsenden Tagnamen und ihren Standartwerten bei nichtvorkommen. Das ganze sieht dann so aus (mit Beispiel):

Code: Alles auswählen

from xml.dom.minidom import parse as makeDomObjFromFile, parseString as makeDomObjFromString

def parseRDFobj(dom_obj,extracttags={"title":"no title","link":None,"description":"no description"},encoding=None):
    for item in dom_obj.getElementsByTagName("item"):
        extracted_item={}
        for tag in extracttags:
            try:
                text=""
                for node in item.getElementsByTagName(tag)[0].childNodes:
                    if node.nodeType == node.TEXT_NODE:
                        text += node.data
                assert text != ""
            except (IndexError,AssertionError):
                extracted_item[tag]=extracttags[tag]
            else:
                if encoding:
                    text=text.encode(encoding)
                extracted_item[tag]=text
        yield extracted_item

if __name__ == "__main__":
    import urllib
    dom_obj=makeDomObjFromFile( urllib.urlopen("http://www.tagesschau.de/newsticker.rdf") )
    for item in parseRDFobj(dom_obj,encoding="latin-1"):
        print item
Vorher hat das ganze mit RE gearbeitet, aber so ist es flexibler :D .
Zuletzt geändert von Milan am Freitag 21. Januar 2005, 16:42, insgesamt 3-mal geändert.
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

hab noch einen weiteren Parameter encoding hinzugefügt, somit wird der Inhalt von Unicode gleich mit umgewandelt, falls erwünscht (standartmäßig abgeschaltet). Eine Anwendung des ganzen ist zum Beispiel dieses CGI-Script.
Antworten