使用urllib打开带有重音符号的url

时间:2020-06-12 00:55:47

标签: python python-3.x web-scraping urllib

我正在尝试使用urllib中的urlopen打开一个url,但是由于URL中带有重音符号而出现错误:

import urllib
import ssl
context = ssl._create_unverified_context()
url = 'https://en.wikipedia.org/wiki/Raúl_Grijalva'
page = urllib.request.urlopen(url, context=context)
UnicodeEncodeError: 'ascii' codec can't encode character '\xfa' in position 12: ordinal not in range(128)

我发现了this的答案,建议在字符串和编码中添加u,但这给了我一个不同的错误:

import urllib
import ssl
context = ssl._create_unverified_context()
url = u'https://en.wikipedia.org/wiki/Raúl_Grijalva'
page = urllib.request.urlopen(url.encode('UTF-8'), context=context)
AttributeError: 'bytes' object has no attribute 'timeout'

我确实在该答案中注意到他们使用urllib.urlopen而不是urllib.request.urlopen,但我不确定它们之间的区别是什么,但是前者会抛出一个错误,即urllib没有属性。

如何正确处理网址中的此字符?

1 个答案:

答案 0 :(得分:1)

使用parse.quote()转义带有重音符的文本似乎可行:

from urllib import request, parse
import ssl

context = ssl._create_unverified_context()
url = 'https://en.wikipedia.org/'
path = parse.quote('wiki/Raúl_Grijalva')

page = request.urlopen(url + path, context=context)