Python 熊猫在对HTTPS资源使用方法read_html时引发ssl.CertificateError

Python 熊猫在对HTTPS资源使用方法read_html时引发ssl.CertificateError,python,pandas,ssl,python-requests,urllib,Python,Pandas,Ssl,Python Requests,Urllib,我有一个使用url地址读取网页内容的代码 之前我的代码运行良好,现在站点安全证书有问题。为了解决IE的问题,我完成了将证书导入可信站点的工作,问题就解决了 但当我运行此代码时: df = pd.read_html(i,header=0)[0] 我得到一个错误: Traceback (most recent call last): File "D:\Distrib\Load_Data_from_Flat_ver_1.py", line 95, in <module> df

我有一个使用url地址读取网页内容的代码

之前我的代码运行良好,现在站点安全证书有问题。为了解决IE的问题,我完成了将证书导入可信站点的工作,问题就解决了

但当我运行此代码时:

df = pd.read_html(i,header=0)[0]
我得到一个错误:

Traceback (most recent call last):
  File "D:\Distrib\Load_Data_from_Flat_ver_1.py", line 95, in <module>
    df = pd.read_html(i,header=0)[0]
  File "C:\Program Files\Python36\lib\site-packages\pandas\io\html.py", line 915, in read_html
    keep_default_na=keep_default_na)
  File "C:\Program Files\Python36\lib\site-packages\pandas\io\html.py", line 749, in _parse
    raise_with_traceback(retained)
  File "C:\Program Files\Python36\lib\site-packages\pandas\compat\__init__.py", line 385, in raise_with_traceback
    raise exc.with_traceback(traceback)
ssl.CertificateError: hostname '10.89.174.12' doesn't match 'localhost'
回溯(最近一次呼叫最后一次):
文件“D:\Distrib\Load\u Data\u from\u Flat\u ver\u 1.py”,第95行,in
df=pd.read_html(i,header=0)[0]
文件“C:\Program Files\Python36\lib\site packages\pandas\io\html.py”,第915行,以只读html格式
keep_default_na=keep_default_na)
文件“C:\Program Files\Python36\lib\site packages\pandas\io\html.py”,第749行,在
使用_回溯(保留)引发_
文件“C:\Program Files\Python36\lib\site packages\pandas\compat\\uuuuuu init\uuuuuuuuu.py”,第385行,带回溯的raise\u
使用回溯(回溯)提升exc
ssl.CertificateError:主机名“10.89.174.12”与“localhost”不匹配

有人能帮我解决这个问题吗?

错误是什么

阅读包的PSL文档,您将发现发生此特定错误的示例

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
然后用熊猫进行加工:

import pandas as pd
df = pd.read_html(html)
创建有效的上下文

正如@AlastairMcCormack所指出的:

context=ssl.\u create\u unverified\u context()
只应用于本地主机或测试

如果在不验证SSL上下文的情况下访问资源解决了问题,那么是时候创建一个有效的上下文了,以便安全地获取资源

服务器路径

您还可以在公用名称与服务器域(或其IP)不匹配的情况下创建新证书。这里的
localhost
似乎来自发送到生产服务器的开发证书,这无法正常工作


无论如何,这一点并不能解决一个事实,即
read\u html
不处理HTTPS连接。

错误是什么

阅读包的PSL文档,您将发现发生此特定错误的示例

>>> cert = {'subject': ((('commonName', 'example.com'),),)}
>>> ssl.match_hostname(cert, "example.com")
>>> ssl.match_hostname(cert, "example.org")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
然后用熊猫进行加工:

import pandas as pd
df = pd.read_html(html)
创建有效的上下文

正如@AlastairMcCormack所指出的:

context=ssl.\u create\u unverified\u context()
只应用于本地主机或测试

如果在不验证SSL上下文的情况下访问资源解决了问题,那么是时候创建一个有效的上下文了,以便安全地获取资源

服务器路径

您还可以在公用名称与服务器域(或其IP)不匹配的情况下创建新证书。这里的
localhost
似乎来自发送到生产服务器的开发证书,这无法正常工作


无论如何,这一点并不能解决
read\u html
无法处理HTTPS连接的问题。

欢迎继续,您能否提供一个帮助我们了解发生了什么情况的示例。乍一看,您的服务器公用名似乎不匹配。欢迎继续。因此,您可以提供一个帮助我们了解发生了什么情况的示例。乍一看,您的服务器公用名似乎不匹配。答案很好,但应该突出显示
context=ssl.\u create\u unverified\u context()
应仅用于本地主机或testing@AlastairMcCormack我将根据很棒的答案更新我的答案,但应该强调的是,
context=ssl.\u create\u unverified\u context()
应该只用于localhost或testing@AlastairMcCormack我会相应地更新我的答案