返回

Python 读取 HTML 网站时 SSL 故障,该如何解决?

python

Python 从网站读取 HTML 遇到的 SSL 故障

问题

使用 Pandas 库从网站抓取 HTML 时,可能会遇到 urllib.error.URLError: CERTIFICATE_VERIFY_FAILED 错误。此错误表明网站的安全证书无法验证,可能是由于证书过期、系统时钟不准确或缺少根证书。

解决方法

解决此问题的步骤如下:

  • 检查网站证书: 使用 SSL Checker 等工具检查网站证书是否有效且未过期。
  • 检查系统时间: 确保系统时钟准确,不准确的时钟会导致证书验证失败。
  • 安装根证书: 安装最新的根证书包,这些证书用于验证网站证书。
  • 使用其他 SSL 库: 尝试使用其他 SSL 库,如 Requests 或 Selenium,它们可能使用不同的证书验证方法。
  • 禁用证书验证: 不建议这样做,但可以通过禁用证书验证来绕过此错误。在 Python 中,设置 verify 参数为 False 即可。

其他提示

  • 确保使用最新版本的 Python。
  • 尝试在不同的网络连接上运行代码。
  • 检查防火墙或代理设置是否阻止了对网站的访问。
  • 查看网站的日志文件以获取更多信息。

示例代码(禁用证书验证)

import pandas as pd
import ssl

ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

tables = pd.read_html('https://en.wikipedia.org/wiki/List_of_highest-grossing_films', context=ctx)

结论

通过遵循这些步骤,你可以解决 Python 中从网站读取 HTML 时遇到的 SSL 故障。记住检查网站证书、系统时钟和根证书,并在必要时使用其他 SSL 库或禁用证书验证。

常见问题解答

  1. 为什么网站的证书会过期? 证书通常会定期更新,以确保其安全性和有效性。如果网站所有者未及时更新证书,则它可能会过期。
  2. 如何检查系统时钟是否准确? 在 Windows 中,你可以使用 date 命令检查系统时钟。在 Linux 中,可以使用 timedatectl 命令。
  3. 哪里可以下载根证书? 你可以从 Mozilla 或 Certifi 等网站下载根证书包。
  4. 禁用证书验证安全吗? 不建议禁用证书验证,因为它会降低你的计算机安全性。仅在必要时才这样做。
  5. 有哪些其他方法可以解决此问题? 尝试使用不同版本的 Python 或在不同的操作系统上运行代码。还可以查看网站的帮助文档或联系网站所有者以获取更多信息。