使用Python读取网页源代码时出错

使用Python读取网页源代码时出错,python,https,Python,Https,我是Python新手,我一直在尝试获取一个页面的源代码,并在Python2和Python3上尝试了几种方法(这里是一种) 但我一直得到以下错误: Traceback (most recent call last): File "C:\Python34\openpage.py", line 4, in <module> f = urllib.urlopen(url) File "C:\Python27\lib\urllib.py", line 87, in urlope

我是Python新手,我一直在尝试获取一个页面的源代码,并在Python2和Python3上尝试了几种方法(这里是一种)

但我一直得到以下错误:

Traceback (most recent call last):
  File "C:\Python34\openpage.py", line 4, in <module>
    f = urllib.urlopen(url)
  File "C:\Python27\lib\urllib.py", line 87, in urlopen
    return opener.open(url)
  File "C:\Python27\lib\urllib.py", line 213, in open
    return getattr(self, name)(url)
  File "C:\Python27\lib\urllib.py", line 443, in open_https
    h.endheaders(data)
  File "C:\Python27\lib\httplib.py", line 1049, in endheaders
    self._send_output(message_body)
  File "C:\Python27\lib\httplib.py", line 893, in _send_output
    self.send(msg)
  File "C:\Python27\lib\httplib.py", line 855, in send
    self.connect()
  File "C:\Python27\lib\httplib.py", line 1274, in connect
    server_hostname=server_hostname)
  File "C:\Python27\lib\ssl.py", line 352, in wrap_socket
    _context=self)
  File "C:\Python27\lib\ssl.py", line 579, in __init__
    self.do_handshake()
  File "C:\Python27\lib\ssl.py", line 808, in do_handshake
    self._sslobj.do_handshake()
IOError: [Errno socket error] [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)
回溯(最近一次呼叫最后一次):
文件“C:\Python34\openpage.py”,第4行,在
f=urllib.urlopen(url)
urlopen中第87行的文件“C:\Python27\lib\urllib.py”
返回opener.open(url)
文件“C:\Python27\lib\urllib.py”,第213行,打开
返回getattr(self,name)(url)
文件“C:\Python27\lib\urllib.py”,第443行,在OpenHTTPS中
h、 端头(数据)
文件“C:\Python27\lib\httplib.py”,第1049行,在endheaders中
自发送输出(消息体)
文件“C:\Python27\lib\httplib.py”,第893行,在发送输出中
self.send(msg)
文件“C:\Python27\lib\httplib.py”,第855行,在send中
self.connect()
文件“C:\Python27\lib\httplib.py”,第1274行,在connect中
服务器\主机名=服务器\主机名)
文件“C:\Python27\lib\ssl.py”,第352行,在wrap\u套接字中
_上下文=自身)
文件“C:\Python27\lib\ssl.py”,第579行,在\uuu init中__
self.do_握手
文件“C:\Python27\lib\ssl.py”,第808行,在do_握手中
赛尔夫:握手
IOError:[Errno socket error][SSL:CERTIFICATE\u VERIFY\u FAILED]证书验证失败(\u SSL.c:590)
最后一行提示错误来自安全搜索,但我似乎找不到解决方法


我看过这篇文章,但仍然没有成功。

这里有一个示例代码,您可以使用
urlparse在Python3上试用

import http.client
from urllib.parse import urlparse
url = "https://www.google.ca/?gfe_rd=cr&ei=u6d_VbzoMaei8wfE1oHgBw&gws_rd=ssl#q=test"
p = urlparse(url)
conn = http.client.HTTPConnection(p.netloc)
conn.request('GET', p.path)
resp = conn.getresponse()
print('resp= {}'.format(resp.read()))
不过,它将根据您的参数运行到
conn.request()
函数。您可以尝试其他方法类型,例如
HEAD
,您的响应将相应地改变

如果您想测试您的请求是否有效,您始终可以尝试:

print(resp.status)
在本例中,它给出
200
。状态代码列表可用


还可以找到其他一些协议。

您正在使用https,这是一种安全协议。上面说

SSL:证书\u验证\u失败

尝试http或使用ssl


您的系统上有有效的证书吗?您的系统一般可以使用SSL吗?
curl
说了些什么呢?谢谢你,不过我似乎得到的打印信息要少得多,就像我把html文件保存为网页并在记事本中打开时那样。知道为什么不完整吗?我想我最后的评论可能是另一个问题,我想接受你的答案,所以我问了另外一个问题。
print(resp.status)
url = "http://www.google.ca