urllib.error.URLError: <urlopen 错误未知 url 类型:https>

Posted

技术标签:

【中文标题】urllib.error.URLError: <urlopen 错误未知 url 类型:https>【英文标题】:urllib.error.URLError: <urlopen error unknown url type: https> 【发布时间】:2019-07-22 09:50:27 【问题描述】:

您好,我正在尝试学习网络抓取。我在 Windows 10 中安装了 Anaconda3。Conda 版本 4.5.12。 Python 版本 3.7.1。

我编写了以下脚本,产生了上述错误。

import bs4
from bs4 import BeautifulSoup as soup
from urllib.request import urlopen as request
with request('https://google.com') as response:
    page_html = response.read()
page_soup = soup(page_html, "html.parser")
print(page_soup)

错误来自这一行:

with request('https://google.com') as response:
...
...
raise URLError('unknown url type: %s' % type)
urllib.error.URLError: <urlopen error unknown url type: https>

但是,当我打开我的 Anaconda 提示符并从上面的脚本逐行执行时,它可以完美运行。 谁能帮我理解出了什么问题?如何使脚本从控制台运行而不会出现此错误?

【问题讨论】:

【参考方案1】:

我通过重新安装 anaconda 库解决了这个问题。在安装过程中,我选择设置 PATH 变量,尽管不推荐。 (所以我第一次没有设置 PATH )所以,基本上我忽略了这个建议。之后它起作用了。我不知道第一次出现问题的确切原因。但现在它正在工作。

【讨论】:

【参考方案2】:

我在安装带有推荐设置的 Anaconda 的 emsdk 时遇到了类似的问题。

我是这样解决的:

打开 Anaconda Navigator > 单击 Environments > 选择 base(root) > 单击播放图标 > 选择打开终端 > 导航到脚本文件夹 > 运行脚本

【讨论】:

【参考方案3】:

也许这行得通,

response= request('https://google.com')
page_html = response.read() if response else ""
page_soup = soup(page_html, "html.parser")
print(page_soup)

【讨论】:

感谢您的回复,但问题没有解决。【参考方案4】:
import ssl
ssl._create_default_https_context = ssl._create_unverified_context

这是允许未经验证的 SSL 的方式

【讨论】:

感谢您的回复,但这会引发另一个错误“import _ssl # 如果我们无法导入它,让错误传播 ImportError: DLL load failed: The specified module could not be found.”是错误信息【参考方案5】:

试试下面的代码:

import bs4
from bs4 import BeautifulSoup as soup
from urllib.request import urlopen, Request
response = urlopen('https://www.google.com')
page_html = response.read()
page_soup = soup(page_html, "html.parser")
print(page_soup)

【讨论】:

感谢您的回复。我通过重新安装并选择了 set Path 使其工作,尽管在 anaconda 安装过程中不建议这样做。然后相同的代码就可以正常工作了。

以上是关于urllib.error.URLError: <urlopen 错误未知 url 类型:https>的主要内容,如果未能解决你的问题,请参考以下文章

urllib.error.URLError: <urlopen 错误 [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取本地颁发者证书 (_ssl.c:11

python爬虫之趟雷

python3中https urlopen()报错的解决方法

python3 报错

MNIST手写数据集在运行中出现问题解决方案

SSL: CERTIFICATE_VERIFY_FAILED - mac python3.6