강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của yisu1864
yisu1864

câu hỏi đã được viết

Thu thập dữ liệu bằng Python hoàn thành sau 12 giờ

req.get("http://www.naver.com) 입력후 "Response[200]" 이라고 나오지 않네요 ㅠㅠ

Viết

·

171

0

수업을 따라하던중 아래와 같이 발생됩니다. 원인을 알수가 없어서 후속 수업관련 따라하기가 곤란하테요ㅠㅠ

 

import requests as req

req.get("https://www.naver.com")

상기와 같이 입력후

"Response [200]" 이라고 나타나지 않고 아래와 같이 나타납니다.

뭐가 잘못된건지 알수가 없어서 질의합니다.

---------------------------------------------------------------------------
SSLCertVerificationError                  Traceback (most recent call last)
File C:\ProgramData\anaconda3\Lib\site-packages\urllib3\connectionpool.py:468, in HTTPConnectionPool._make_request(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)
    467 try:
--> 468     self._validate_conn(conn)
    469 except (SocketTimeout, BaseSSLError) as e:

File C:\ProgramData\anaconda3\Lib\site-packages\urllib3\connectionpool.py:1097, in HTTPSConnectionPool._validate_conn(self, conn)
   1096 if conn.is_closed:
-> 1097     conn.connect()
   1099 if not conn.is_verified:

File C:\ProgramData\anaconda3\Lib\site-packages\urllib3\connection.py:642, in HTTPSConnection.connect(self)
    634     warnings.warn(
    635         (
    636             f"System time is way off (before {RECENT_DATE}). This will probably "




~ 중간 생략 ~

File C:\ProgramData\anaconda3\Lib\site-packages\urllib3\util\retry.py:515, in Retry.increment(self, method, url, response, error, _pool, _stacktrace)
    514     reason = error or ResponseError(cause)
--> 515     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
    517 log.debug("Incremented Retry for (url='%s'): %r", url, new_retry)

MaxRetryError: HTTPSConnectionPool(host='www.naver.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate in certificate chain (_ssl.c:1006)')))

During handling of the above exception, another exception occurred:

SSLError                                  Traceback (most recent call last)
Cell In[2], line 1
----> 1 req.get("http://www.naver.com")

File C:\ProgramData\anaconda3\Lib\site-packages\requests\api.py:73, in get(url, params, **kwargs)
     62 def get(url, params=None, **kwargs):
     63     r"""Sends a GET request.
     64 
     65     :param url: URL for the new :class:`Request` object.
   (...)
     70     :rtype: requests.Response
     71     """
---> 73     return request("get", url, params=params, **kwargs)

File C:\ProgramData\anaconda3\Lib\site-packages\requests\api.py:59, in request(method, url, **kwargs)
     55 # By using the 'with' statement we are sure the session is closed, thus we
     56 # avoid leaving sockets open which can trigger a ResourceWarning in some
     57 # cases, and look like a memory leak in others.
     58 with sessions.Session() as session:
---> 59     return session.request(method=method, url=url, **kwargs)


~ 중간 생략 ~

File C:\ProgramData\anaconda3\Lib\site-packages\requests\adapters.py:517, in HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies)
    513         raise ProxyError(e, request=request)
    515     if isinstance(e.reason, _SSLError):
    516         # This branch is for urllib3 v1.22 and later.
--> 517         raise SSLError(e, request=request)
    519     raise ConnectionError(e, request=request)
    521 except ClosedPoolError as e:

SSLError: HTTPSConnectionPool(host='www.naver.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate in certificate chain (_ssl.c:1006)')))

 

python웹-크롤링

Câu trả lời 1

0

안녕하세요, 인프런 AI 인턴입니다.

님께서 겪고 계신 오류는 SSL 인증서 검증 실패로 인한 것입니다. 이는 Python에서 https 요청을 보낼 때 SSL 인증서를 제대로 검증하지 못해서 발생하는 문제입니다. 일반적으로 macOS에서 Python을 설치한 경우에 처음에 SSL 인증서 경로를 제대로 찾지 못하는 경우가 많습니다. Windows에서도 유사한 문제가 발생할 수 있습니다.

해결 방법 중 하나로 requests 모듈을 사용할 때 SSL 인증서 검증을 하지 않도록 설정할 수 있습니다. 하지만 보안 상 좋지 않은 방법이기 때문에, 개발 환경에서만 임시로 사용해야 합니다. 아래는 SSL 인증서 검증을 하지 않는 방법입니다:

import requests

response = requests.get('https://www.naver.com', verify=False)
print(response.status_code)

verify=False 옵션을 추가하여 SSL 인증서 검증 과정을 생략할 수 있습니다. 다시 말씀드리지만, 이 방법은 보안에 취약하므로 실제 production 환경에서는 사용하지 않는 것이 좋습니다.

SSL 인증서 문제를 안전하게 해결하려면 해당 OS의 인증서 저장소에 올바른 인증서를 설치하거나 Python이 인증서를 확인할 수 있도록 설정하는 방법을 찾아보는 것이 좋습니다.

원하는 답변을 찾지 못하셨나요? 그럼 우측 하단의 ‘문의하기’에서 직접 문의해주세요. 최대한 빠르게 답변드리도록 하겠습니다!

Hình ảnh hồ sơ của yisu1864
yisu1864

câu hỏi đã được viết

Đặt câu hỏi