【发布时间】:2020-10-01 18:33:48
【问题描述】:
我正在尝试使用 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 没有该属性。
如何正确处理 url 中的这个字符?
【问题讨论】:
-
我在带有 Python 3 内核的 Jupyter Notebook 中运行它,否则代码可以正常工作吗?
标签: python python-3.x web-scraping urllib