我正在通过继承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)
我指定乍一看我不知道每个链接是如何组成的
答案 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