]> git.phdru.name Git - bookmarks_db.git/blobdiff - Robots/parse_html_html5.py
Parser could be None.
[bookmarks_db.git] / Robots / parse_html_html5.py
index 511e64022936acb6d0eb64a636e6600536e0f514..6255825a3b491d06fb0df847937ed5e638587f36 100644 (file)
@@ -9,11 +9,22 @@ from parse_html_util import HTMLParser
 
 
 def parse_html(filename, charset=None, log=None):
+    parser = HTML5Parser()
     fp = open(filename)
-    html_tree = HTML5Parser().parse(fp, charset)
+    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
+
+    if not html:
+        return None
 
-    html = html_tree.childNodes[-1]
     for node in html.childNodes:
         if node.name == 'head':
             head = node
@@ -43,8 +54,14 @@ def parse_html(filename, charset=None, log=None):
 
         for node in head.childNodes:
             if node.name == 'title':
-                title = node.childNodes[0].value
-                break
+                if node.childNodes:
+                    title = node.childNodes[0].value
+                    break
+                else:
+                    title = ''
+
+        if not charset:
+            charset = parser.tokenizer.stream.charEncoding[0]
 
         if title and (charset or meta_charset):
             title = title.encode(charset or meta_charset)