Unicode在html.parser中消失

时间:2013-05-03 16:53:54

标签: python unicode utf-8 python-3.x python-unicode

我从一些带有Unicode字符的网页中提取HTML,如下所示:

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

使用类handle_data解析HTML时,似乎Unicode字符被删除/突然消失。文档没有提到编码的任何内容。为什么HTML Parser会删除非ascii字符,我该如何解决这个问题呢?

1 个答案:

答案 0 :(得分:0)

显然,html.parser会在遇到非ascii字符时调用handle_entityref。它传递了命名的字符引用,并将其转换为unicode字符,我使用了:

html.entities.html5[name]

Python的文档没有提到这一点。我从未见过更糟糕的Python文档。