|
发表于 2023-5-8 18:09:06
|
显示全部楼层
这是由于SSL证书验证失败导致的问题。在Python中,当使用requests或urllib等库从HTTPS站点获取内容时,会默认验证SSL证书。如果证书无效或不受信任,则会引发此错误。
对于第一个代码示例,您可以通过禁用SSL证书验证来解决此问题。可以将verify参数设置为False,如下所示:
- import requests
- import re
- r = requests.get('https://ssr1.scrape.center/', verify=False)
- pattern = re.compile(r'<h2.*?>(.*?)</h2>', re.S)
- titles = re.findall(pattern, r.text)
- print(titles)
复制代码
对于第二个代码示例,您可以使用ssl模块中的create_default_context()方法来创建SSL上下文,并将其传递给urlopen()方法。您可以使用以下代码解决此问题:
- from urllib.request import HTTPPasswordMgrWithDefaultRealm, HTTPBasicAuthHandler, build_opener, urlopen
- from urllib.error import URLError
- import ssl
- username = "admin"
- password = 'admin'
- url = 'https://ssr3.scrape.center/'
- p = HTTPPasswordMgrWithDefaultRealm()
- p.add_password(None, url, username, password)
- auth_handler = HTTPBasicAuthHandler(p)
- opener = build_opener(auth_handler)
- context = ssl.create_default_context()
- context.check_hostname = False
- context.verify_mode = ssl.CERT_NONE
- try:
- result = urlopen(url, context=context)
- html = result.read().decode('utf-8')
- print(html)
- except URLError as e:
- print(e.reason)
复制代码
这将创建一个不验证SSL证书的SSL上下文,并将其传递给urlopen()方法。 |
|