python-3.x - urllib.error.URLError : <urlopen error unknown url type: 'https>

标签 python-3.x urllib

(Python 3.4.2) 当我在脚本中运行“urllib.request.urlopen(url)”时,出现了一个奇怪的错误。如果我直接在 Python 解释器中运行它,它可以正常工作,但当我通过 bash shell (Linux) 在脚本内运行它时,它就不行了。

我猜它与“url”字符串有关,也许是因为我是通过“string.join”方法创建字符串的。

import urllib.request
url = "".join((baseurl, other_string, midurl, query))
response = urllib.request.urlopen(url)

“url”字符串打印完美,但是当我尝试创建“response”字符串时,我得到以下输出:

File "./script.py", line 124, in <module>
    response = urllib.request.urlopen(url)
  File "/usr/lib/python3.4/urllib/request.py", line 153, in urlopen
    return opener.open(url, data, timeout)
  File "/usr/lib/python3.4/urllib/request.py", line 455, in open
    response = self._open(req, data)
  File "/usr/lib/python3.4/urllib/request.py", line 478, in _open
    'unknown_open', req)
  File "/usr/lib/python3.4/urllib/request.py", line 433, in _call_chain
    result = func(*args)
  File "/usr/lib/python3.4/urllib/request.py", line 1244, in unknown_open
    raise URLError('unknown url type: %s' % type)
urllib.error.URLError: <urlopen error unknown url type: 'https>

Python 在我的计算机上编译为支持 SSL(这些命令在 Python 解释器中完美运行)。

我还尝试用“repr(url)”和“str(url)”包装“url”字符串。我也尝试过这个:

url = "".join(("'", baseurl, other_string, midurl, query, "'"))

有人知道这是怎么回事吗?

-----编辑-----
我想到了。我的 url 中有一个“:”,我猜 urllib 不喜欢这样。我将其替换为“%3A”,现在它可以工作了。

最佳答案

您应该使用urllib.parse.urlencode()urllib.parse.urljoin()等函数来构造url,而不是手动连接字符串。它将处理 : -> %3A 转换,例如:

>>> import urllib.parse
>>> urllib.parse.quote(':')
'%3A'

关于python-3.x - urllib.error.URLError : <urlopen error unknown url type: 'https>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55034279/

相关文章:

python - 根据另一个类的变量值设置 Qlabel 文本

python - 是否有计算不同类型概率密度函数积分的捷径?

python - Go 中的 urllib.quote() ?

python - 如何使用python在JSON中添加父对象

python-3.x - 从给定的 n 个元素数组中随机选择一个数字,概率与其大小成正比

Python 的 urllib2 在某些站点上不起作用

Python 2.7 无法从 urllib.request 中找到模块请求

python - 如何加速 Python 中的网络爬行?

python - tkinter:为什么图像无法正确显示

python - 为什么我不能使用 Python 加载此页面?