Seite 1 von 1

Strip Tags

Verfasst: Sonntag 18. Dezember 2005, 22:29
von rabby
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

Verfasst: Montag 19. Dezember 2005, 01:48
von mitsuhiko
quick and dirty:

Code: Alles auswählen

def makeplain(html):
    from re import sub
    return re.sub(r'<(.*?)>(?uism)', '', html)