【问题标题】:Using urllib to open a url with an accent使用 urllib 打开带重音符号的 url
【发布时间】: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


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 2023-03-03
    • 2014-11-02
    相关资源
    最近更新 更多