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