Strip Tags

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
rabby
User
Beiträge: 7
Registriert: Dienstag 13. Dezember 2005, 21:27
Kontaktdaten:

Sonntag 18. Dezember 2005, 22:29

hallo welt!
hab auf das python cookbook zurückgegriffen und die klasse und funktion zum entfernen von htmltags aus einem html dokument verwendet, sodass ich den plaintext einer site erhalte. doch leider werden sämtliche dinge nicht berücksichtigt. hier einfach mal die klasse:

Code: Alles auswählen

class StrippingParser(sgmllib.SGMLParser):
    # These are the HTML tags that we will leave intact
    valid_tags = ()
    tolerate_missing_closing_tags = ()
    from htmlentitydefs import entitydefs # replace entitydefs from sgmllib

    def __init__(self):
        sgmllib.SGMLParser.__init__(self)
        self.result = []
        self.endTagList = []

    def handle_data(self, data):
        self.result.append(data)

    def handle_charref(self, name):
        self.result.append("&#%s;" % name)

    #def handle_entityref(self, name):
    #    x = ';' * self.entitydefs.has_key(name)
    #    self.result.append("&%s%s" % (name, x))

    def unknown_starttag(self, tag, attrs):
        """ Delete all tags except for legal ones. """
        # print "%s, %s, %s" % (self, tag, attrs)
        if tag in self.valid_tags:
            self.result.append('<' + tag)
            for k, v in attrs:
                if string.lower(k[0:2]) != 'on' and string.lower(
                    v[0:10]) != 'javascript':
                    self.result.append(' %s="%s"' % (k, v))
            self.result.append('>')
            #print "DEBUG: unknown_starttag: %s" % (tag)
            if tag not in self.tolerate_missing_closing_tags:
                endTag = '</%s>' % tag
                self.endTagList.insert(0,endTag)

    def unknown_endtag(self, tag):
        if tag in self.valid_tags:
            # We don't ensure proper nesting of opening/closing tags
            #print "DEBUG: unknown_endtag: %s" % (tag)
            endTag = '</%s>' % tag
            self.result.append(endTag)
            if tag not in self.tolerate_missing_closing_tags:
                self.endTagList.remove(endTag)

    def cleanup(self):
        """ Append missing closing tags. """
        self.result.extend(self.endTagList)
nun gibt es doch bestimmt auch alternativefunktionen in paketen wie beautiful soup, oder? am besten eine funktion, die auch css einträge und javascripts ordentlich entfernen kann. oder muss ich einfach vor dem durchlaufen des strippingparsers die css infos z.b. via regexp entfernen?
danke für tipps
[url=http://www.aktuell-online.info/]Aktuell-Online[/url][url=http://www.rsssuche.de/]by rabby[/url]
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Montag 19. Dezember 2005, 01:48

quick and dirty:

Code: Alles auswählen

def makeplain(html):
    from re import sub
    return re.sub(r'<(.*?)>(?uism)', '', html)
TUFKAB – the user formerly known as blackbird
Antworten