X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=parse_html%2Fbkmk_ph_html5.py;h=68c1ababbb106f33a14d08e3c51d9e8d19e17573;hb=0b78160bb3a7a59d6c91ee41ff273321a4b3d556;hp=d883bd7e5f4b98dd4307fc8c56390411ac347d3c;hpb=338c964afba3651bd8fe6318644c0fcabb66cc3b;p=bookmarks_db.git diff --git a/parse_html/bkmk_ph_html5.py b/parse_html/bkmk_ph_html5.py index d883bd7..68c1aba 100644 --- a/parse_html/bkmk_ph_html5.py +++ b/parse_html/bkmk_ph_html5.py @@ -1,13 +1,11 @@ """HTML Parser using html5 This file is a part of Bookmarks database and Internet robot. + """ -__version__ = "$Revision$"[11:-2] -__revision__ = "$Id$"[5:-2] -__date__ = "$Date$"[7:-2] __author__ = "Oleg Broytman " -__copyright__ = "Copyright (C) 2010, 2011 PhiloSoft Design" +__copyright__ = "Copyright (C) 2010-2023 PhiloSoft Design" __license__ = "GNU GPL" __all__ = ['parse_html'] @@ -17,19 +15,18 @@ from html5lib import HTMLParser as HTML5Parser from .bkmk_ph_util import HTMLParser -def parse_html(filename, charset=None, log=None): +def parse_html(html_text, charset=None, log=None): parser = HTML5Parser() - fp = open(filename) - parser._parse(fp, encoding=charset, parseMeta=bool(charset)) - fp.close() - html_tree = parser.tree.getDocument() - - for node in html_tree.childNodes: - if (node.name == 'html') and (node.type != 3): # Skip DocType element - html = node - break - else: - html = None + html_tree = parser.parse( + html_text, encoding=charset, parseMeta=bool(charset)) + + html = None + if hasattr(html_tree, 'childNodes'): + for node in html_tree.childNodes: + # Skip DocType element + if (node.name == 'html') and (node.type != 3): + html = node + break if not html: return None @@ -55,28 +52,29 @@ def parse_html(filename, charset=None, log=None): else: title = '' - if title is None: - return None - for node in head.childNodes: - if node.name == 'meta' and \ + if (node.name == 'meta') and \ ('http-equiv' in node.attributes) and \ (node.attributes['http-equiv'] == 'content-type'): meta_content = node.attributes['content'] if meta_content: try: meta_charset = \ - meta_content.lower().split('charset=')[1].split(';')[0] + meta_content.lower().split('charset=')[1].\ + split(';')[0] except IndexError: meta_charset = False else: break + elif (node.name == 'meta') and ('charset' in node.attributes): + meta_charset = node.attributes['charset'].lower() + break if not charset: charset = parser.tokenizer.stream.charEncoding[0] - if charset or meta_charset: - title = title.encode(charset or meta_charset) + #if title and (charset or meta_charset): + # title = title.encode(charset or meta_charset) for node in head.childNodes: if node.name == 'meta' and \ @@ -101,7 +99,6 @@ def parse_html(filename, charset=None, log=None): else: title = '' - if title is None: - return None - + if (title is None) and (refresh is None) and (icon is None): + return None return HTMLParser(charset, meta_charset, title, refresh, icon)