X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=parse_html%2Fbkmk_ph_lxml.py;h=a02de919fb3cfef336b287ceb753e2d3d0cd980f;hb=03d2e88efc7b2046a404679a36a8a65d6faae98c;hp=03dd6f4c0d90bb60627a442d1dfb743eb7a07961;hpb=9e2bf3eaee5a8ee84c61ee5eac9c55090d45f63f;p=bookmarks_db.git diff --git a/parse_html/bkmk_ph_lxml.py b/parse_html/bkmk_ph_lxml.py index 03dd6f4..a02de91 100644 --- a/parse_html/bkmk_ph_lxml.py +++ b/parse_html/bkmk_ph_lxml.py @@ -11,15 +11,32 @@ __license__ = "GNU GPL" __all__ = ['parse_html'] -from lxml.html import fromtring +import re +from lxml.html import fromstring from .bkmk_ph_util import HTMLParser def parse_html(html_text, charset=None, log=None): - html_tree = fromtring(html_text) - - if html_tree.getroot() is None: - return None + try: + html_tree = fromstring(html_text) + except ValueError as e: + if e.args[0].startswith( + 'Unicode strings with encoding declaration are not supported.' + ' Please use bytes input' + ): + if not charset: + match = re.search( + '<\\?xml version="(\\d|.)+" encoding="([^"]+)"\\?>', + html_text, re.U) + if match: + charset = match.group(2) + if charset: + html_text = html_text.encode(charset) + html_tree = fromstring(html_text) + else: + return None + else: + raise title = html_tree.findtext('head/title') if title is None: