2013-05-03 3 views
0

Я извлекая HTML с некоторой веб-страницы с символами Unicode следующим образом:Unicode Исчезновение в html.parser

def extract(url): 
    """ Adapted from Python3_Google_Search.py """ 
    user_agent = ("Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) " 
        "AppleWebKit/525.13 (KHTML,  like Gecko)" 
        "Chrome/0.2.149.29 Safari/525.13") 
    request = urllib.request.Request(url) 
    request.add_header("User-Agent",user_agent) 
    response = urllib.request.urlopen(request) 
    html = response.read().decode("utf8") 
    return html 

Я декодирование должным образом, как вы можете видеть. Итак, html теперь является строкой unicode. При печати html я могу видеть символы Unicode.

Я использую html.parser для разбора HTML и подклассы его:

from html.parser import HTMLParser 
class Parser(HTMLParser): 
    def __init__(self): 
    ## some init stuff 
    #### rest of class 

При разборе вне HTML с использованием класса handle_data, кажется, что символы Unicode удаляются/внезапно исчезают. В документах ничего не говорится о кодировках. Почему HTML Parser удаляет символы, отличные от ascii, и как я могу исправить такую ​​проблему?

+0

какая программа/инструмент вы используете для просмотра вывода? – bernie

+0

1. Вы на 100% уверены, что данные, полученные вашим скриптом, имеют символы там, и 2. как вы проверяете, что символы не-ascii «исчезли»? –

+0

Я использовал Emacs в терминале (имеет кодировку Unicode), а затем снова Mac TextEdit. – darksky

ответ

0

По-видимому, html.parser будет называть handle_entityref всякий раз, когда сталкивается с символом не-ascii. Он проходит под названием характеристику, и преобразовать его в юникод характер, я использовал:

html.entities.html5[name] 

документация питона не упоминает, что. Я никогда не видел хуже документации, что Python.