diff options
author | Filippo Valsorda <filippo.valsorda@gmail.com> | 2012-04-13 22:09:24 +0200 |
---|---|---|
committer | Filippo Valsorda <filippo.valsorda@gmail.com> | 2012-04-13 22:09:24 +0200 |
commit | 9beb5af82ecfbb35ee534692e73fb38f4399698a (patch) | |
tree | aa7a92788b8a00d748d3de00752047c674cbea74 /youtube_dl/utils.py | |
parent | 9e6dd238761e6628d7bd0b6bdb7a997604de3757 (diff) |
some HTMLParser bugfixes
Diffstat (limited to 'youtube_dl/utils.py')
-rw-r--r-- | youtube_dl/utils.py | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index a19656000..0f903c64a 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -73,7 +73,7 @@ def htmlentity_transform(matchobj): # Unknown entity in name, return its literal representation return (u'&%s;' % entity) - +HTMLParser.locatestarttagend = re.compile(r"""<[a-zA-Z][-.a-zA-Z0-9:_]*(?:\s+(?:(?<=['"\s])[^\s/>][^\s/=>]*(?:\s*=+\s*(?:'[^']*'|"[^"]*"|(?!['"])[^>\s]*))?\s*)*)?\s*""", re.VERBOSE) # backport bugfix class IDParser(HTMLParser.HTMLParser): """Modified HTMLParser that isolates a tag with the specified id""" def __init__(self, id): @@ -83,8 +83,17 @@ class IDParser(HTMLParser.HTMLParser): self.depth = {} self.html = None self.watch_startpos = False + self.error_count = 0 HTMLParser.HTMLParser.__init__(self) + def error(self, message): + print self.getpos() + if self.error_count > 10 or self.started: + raise HTMLParser.HTMLParseError(message, self.getpos()) + self.rawdata = '\n'.join(self.html.split('\n')[self.getpos()[0]:]) # skip one line + self.error_count += 1 + self.goahead(1) + def loads(self, html): self.html = html self.feed(html) |