X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=parse_html%2Fbkmk_ph_beautifulsoup.py;h=e29b4997932d764d29ebc290b9f407ec796a8063;hb=708b258fa37272ece656f6825e80dc6bcbae849e;hp=1479f034255c4c5b4e53b872ea5b0c157b4a74c6;hpb=c2ea4e82718b903aa123dd77490f36657383b0ca;p=bookmarks_db.git diff --git a/parse_html/bkmk_ph_beautifulsoup.py b/parse_html/bkmk_ph_beautifulsoup.py index 1479f03..e29b499 100644 --- a/parse_html/bkmk_ph_beautifulsoup.py +++ b/parse_html/bkmk_ph_beautifulsoup.py @@ -19,6 +19,8 @@ from .bkmk_ph_util import HTMLParser DEFAULT_CHARSET = "cp1251" # Stupid default for Russian Cyrillic # http://groups.google.com/group/beautifulsoup/browse_thread/thread/69093cb0d3a3cf63 + + class BadDeclParser(BeautifulSoup): def parse_declaration(self, i): """Treat a bogus SGML declaration as raw data. Treat a CDATA @@ -56,13 +58,15 @@ def _parse_html(html_text, charset): except TypeError: return None + def parse_html(html_text, charset=None, log=None): root = _parse_html(html_text, charset) if root is None: return None _charset = root.originalEncoding - if _charset in ("ISO-8859-2", "windows-1252", "MacCyrillic"): # Replace default + if _charset in ("ISO-8859-2", "windows-1252", "MacCyrillic"): + # Replace with default and re-parse _charset = DEFAULT_CHARSET root = _parse_html(html_text, _charset) if root is None: @@ -92,7 +96,7 @@ def parse_html(html_text, charset=None, log=None): parts = [] for part in title: if not isinstance(part, basestring): - part = unicode(part) + part = part.decode() parts.append(part.strip()) title = ''.join(parts) @@ -101,7 +105,8 @@ def parse_html(html_text, charset=None, log=None): try: meta_content = meta.get("content") if meta_content: - __charset = meta_content.lower().split('charset=')[1].split(';')[0] + __charset = meta_content.lower().split('charset=')[1].\ + split(';')[0] else: __charset = False except IndexError: # No charset in the META Content-Type @@ -137,17 +142,21 @@ def parse_html(html_text, charset=None, log=None): return None return HTMLParser(_charset, meta_charset, title, refresh, icon) + def _find_contenttype(Tag): return (Tag.name == "meta") and \ (Tag.get("http-equiv", '').lower() == "content-type") + def _find_charset(Tag): return (Tag.name == "meta") and Tag.get("charset", '') + def _find_refresh(Tag): return (Tag.name == "meta") and \ (Tag.get("http-equiv", '').lower() == "refresh") + def _find_icon(Tag): return (Tag.name == "link") and \ (Tag.get("rel", '').lower() in ('icon', 'shortcut icon'))