Python newspaper3k脚本在虚拟机解析新闻时遇SSL证书验证失败
解决newspaper3k在公司虚拟机中SSL证书验证失败问题
错误原因
公司虚拟机的网络环境通常会通过带自签名证书的代理或防火墙拦截HTTPS请求,newspaper3k底层依赖的requests库默认会严格校验SSL证书链,因此出现SSL: CERTIFICATE_VERIFY_FAILED错误。而浏览器已经预装了公司的根证书,所以能正常访问目标URL,但Python脚本需要单独配置证书验证规则。
解决方案
方案1:临时跳过SSL验证(仅用于测试,不推荐生产环境)
修改Config对象,添加verify_ssl = False来关闭证书验证:
import nltk import newspaper from textblob import TextBlob from newspaper import Article from newspaper import Config url = "https://press.un.org/en/2023/sc15277.doc.htm" config = Config() config.request_timeout = 60 # 关闭SSL证书验证 config.verify_ssl = False output = Article(url, config=config) print(f'URL: {output.url}') output.download() output.parse() output.nlp() print(f'Summary: {output.summary}')
方案2:配置公司根证书(安全合规的生产方案)
- 导出公司根证书:在虚拟机的浏览器中打开目标URL,点击地址栏的锁形图标,导出根证书文件(格式为
.crt或.pem)。 - 在脚本中指定证书路径:修改
Config对象的ssl_verify参数为证书文件路径:
import nltk import newspaper from textblob import TextBlob from newspaper import Article from newspaper import Config url = "https://press.un.org/en/2023/sc15277.doc.htm" config = Config() config.request_timeout = 60 # 指定公司根证书路径 config.ssl_verify = "C:/path/to/company_root_cert.crt" output = Article(url, config=config) print(f'URL: {output.url}') output.download() output.parse() output.nlp() print(f'Summary: {output.summary}')
也可以将公司根证书添加到Python的默认CA证书库中(需管理员权限):找到Python安装目录下Lib\site-packages\certifi\cacert.pem文件,将证书内容追加到文件末尾,这样所有依赖requests的库都会自动使用该证书。
内容的提问来源于stack exchange,提问作者midhunsugathan
相关产品推荐
相关产品推荐

