UnicodeEncodeError:" ascii"不能编码字符' \ xe0'在解析HTML(Python)时

时间:2014-06-21 15:54:14

标签: python-3.4

我正在通过继承HTMLParser来解析HTML,这是一个来自库html.parser的类。我正在制作网络刮刀。我已将“convert_charrefs”设置为true。该程序通过“downloadPage(url)”下载页面并将其传递给myParser(我认为如果我不粘贴所有代码,那对你来说会更好)。当解析器从网站找到我感兴趣的链接(例如Attivitàeprocedimenti)时,程序获取属性“href”的值并尝试通过执行“downloadPage(href)下载由href链接的页面” “,将它传递给myParser等等...... downloadPage(href)的代码如下:

def getCharset(response):
    str = response.info()["Content-type"]
    if str:
        end = re.search("charset=", str).span()[1]
        if end:
            return str[end:]
        else:
            return "ascii"
    else:
        return "ascii"

def downloadPage(url):
    response = urllib.request.urlopen(url)
    charset = getCharset(response)
    return response.read().decode(charset)

现在,问题是某些链接有一些元音强调,例如“http://città.it/”(最后的网址是假的)。并非网页中找到的所有链接都是由Unicode字符组成的。因此,以下代码有时会引发UnicodeEncodeError:

urllib.request.urlopen(url)

我指定乍一看我不知道每个链接是如何组成的

1 个答案:

答案 0 :(得分:1)

我用这种方式解决了这个问题:

def fromIriToUri(iri):
myUri = []
iri = urlsplit(iri)
iri = list(iri)
for i in iri:
    try:
        i.encode("ascii")
        myUri.append(i)
    except UnicodeEncodeError:
        myUri.append(urllib.parse.quote(i))
uri = urllib.parse.urlunsplit(myUri)
return uri