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)
danke für tipps