]> git.phdru.name Git - bookmarks_db.git/blobdiff - parse_html/bkmk_ph_lxml.py
Renamed parse_html modules to bkmk_ph_* to avoid name clashes.
[bookmarks_db.git] / parse_html / bkmk_ph_lxml.py
diff --git a/parse_html/bkmk_ph_lxml.py b/parse_html/bkmk_ph_lxml.py
new file mode 100644 (file)
index 0000000..79cbb01
--- /dev/null
@@ -0,0 +1,63 @@
+"""HTML Parser using lxml.html
+
+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 <phd@phdru.name>"
+__copyright__ = "Copyright (C) 2010, 2011 PhiloSoft Design"
+__license__ = "GNU GPL"
+
+__all__ = ['parse_html']
+
+
+from lxml.html import parse
+from .bkmk_ph_util import HTMLParser
+
+
+def parse_html(filename, charset=None, log=None):
+    html_tree = parse(filename)
+
+    if html_tree.getroot() is None:
+        return None
+
+    title = html_tree.findtext('head/title')
+    if title is None:
+        title = html_tree.findtext('title')
+        if title is None:
+            return None
+
+    meta = html_tree.findall('head/meta')
+    for m in meta:
+        if m.get('http-equiv', '').lower() == 'content-type':
+            meta_content = m.get("content")
+            if meta_content:
+                try:
+                    meta_charset = \
+                        meta_content.lower().split('charset=')[1].split(';')[0]
+                    break
+                except IndexError:
+                    meta_charset = False
+    else:
+        meta_charset = False
+
+    if charset or meta_charset:
+        title = title.encode(charset or meta_charset)
+
+    for m in meta:
+        if m.get('http-equiv', '').lower() == 'refresh':
+            refresh = m.get("content")
+            break
+    else:
+        refresh = None
+
+    for link in html_tree.findall('head/link'):
+        if link.get('rel', '').lower() in ('icon', 'shortcut icon'):
+            icon = link.get("href")
+            break
+    else:
+        icon = None
+
+    return HTMLParser(charset, meta_charset, title, refresh, icon)