스크래핑 : SSL : http://en.wikipedia.org에 대한 CERTIFICATE_VERIFY_FAILED 오류


123

나는 '파이썬으로 웹 스크래핑'의 코드를 연습하고 있으며이 인증서 문제가 계속 발생합니다.

from urllib.request import urlopen 
from bs4 import BeautifulSoup 
import re

pages = set()
def getLinks(pageUrl):
    global pages
    html = urlopen("http://en.wikipedia.org"+pageUrl)
    bsObj = BeautifulSoup(html)
    for link in bsObj.findAll("a", href=re.compile("^(/wiki/)")):
        if 'href' in link.attrs:
            if link.attrs['href'] not in pages:
                #We have encountered a new page
                newPage = link.attrs['href'] 
                print(newPage) 
                pages.add(newPage) 
                getLinks(newPage)
getLinks("")

오류는 다음과 같습니다.

  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 1319, in do_open
    raise URLError(err)
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1049)>

Btw, 나는 또한 스크래피를 연습했지만 문제가 계속 발생했습니다. 명령을 찾을 수 없음 : 스크래피 (온라인에서 모든 종류의 솔루션을 시도했지만 아무것도 작동하지 않습니다 ... 정말 실망)


1
urllib.error.URLError : <urlopen error [SSL : CERTIFICATE_VERIFY_FAILED] certificate verify failed : cannot get local issuer certificate (_ssl.c : 1049)>
Catherine4j

1
그리고 ...이 오류의 원인을 알려주세요. 정말 알고 싶어요 ~~ 감사합니다 !!
Catherine4j

1
SSL에 대한 529 개의 기존 질문 이 있습니다 . CERTIFICATE_VERIFY_FAILED , 어떤 솔루션이 있는지 확인한 다음 중복으로 닫으십시오.
smci


그리고 나는 명백한 것에 대해 언급하려고했습니다. http 대신 https로 액세스 했습니까?
smci

답변:


440

옛날에 나는이 문제를 우연히 발견했습니다. macOS를 사용하는 경우 Macintosh HD> Applications> Python3.6 폴더 (또는 사용중인 Python 버전)로 이동하여 "Install Certificates.command"파일을 두 번 클릭합니다. :디


5
오 나도 몰라 ...이 내 Mac에서 Certificates.command 파일을 설치하지 않는 이유 TAT
Catherine4j

24
Homebrew를 사용하여 Python을 설치하면 해당 파일이 존재하지 않습니다. 솔루션은 다음과 같습니다. stackoverflow.com/a/44649450/412896
Sampo

4
누군가 이것을 해결 한 답으로 표시해주세요. 내가 갇혀있을 때 많은 시간과 노력을 절약했습니다!
Mark Puchala II

6
Windows 10에서 어떻게 할 수 있습니까? 그러한 파일이 없습니다.
Aakash Basu

6
전설적인 답변
Nico

43

확인되지 않은 SSL을 사용하려면 다음을 코드에 추가 할 수 있습니다.

import ssl
ssl._create_default_https_context = ssl._create_unverified_context

2
두 줄의 코드 만 추가하면되는데 왜 시스템을 변경해야하나요?
Nagri

1
이 대답은 아마도이 긁어내어 후이 코드는 사용자가 데이터로 무엇을하는지에 따라 큰 보안 문제를 소개 할 수 있음을 언급해야한다 ..
마이클 Altfield

확인되지 않은 인증서를 사용하면 위험에 노출됩니다. 이 코드 줄은 데이터 소스가 무엇인지 알고 프로덕션 모드에서 기본값으로 설정하는 것이 좋지 않은 경우에만 유용합니다. 문제는 확인되지 않은 일부 페이지를 스 캐핑하는 방법에 대한 것입니다.이 코드는 적어도이 상황에 대해 큰 보안 문제를 일으키지 않습니다.
Rambod

1
이것은 쉬운 수정입니다. 감사.
Roy

30

이를 해결하려면 :

Python 인증서를 설치하기 만하면됩니다! macOS의 일반적인 문제입니다.

다음 파일을 엽니 다.

Install Certificates.command
Update Shell Profile.command

이 두 스크립트를 실행하기 만하면 더 이상이 문제가 발생하지 않습니다.

도움이 되었기를 바랍니다!


8
내 애플리케이션 디렉토리에 Python 디렉토리가 표시되지 않습니다. Anaconda를 사용하고 있으며 이전에 Python 2.7을 설치했기 때문에 Python 3.6 용 새 환경을 만들었습니다 (내 애플리케이션 디렉토리에도 폴더를 만들지 않은 것 같습니다!). .. 내 맥에 Certificates.command 찾을 수 없습니다
카이

3
이것들은 어디에서 실행되어야합니까?
baxx

1
@Azim : 우분투에서는 어떻습니까?
Betty

21

이 터미널 명령 :

open /Applications/Python\ 3.7/Install\ Certificates.command

여기에서 찾을 수 있습니다 : https://stackoverflow.com/a/57614113/6207266

나를 위해 해결했습니다. 내 구성으로

pip install --upgrade certifi

영향이 없었습니다.


17

초보 사용자의 경우 Applications 폴더로 이동하여 Python 3.7 폴더를 확장 할 수 있습니다. 이제 먼저 Install Certificates. 명령을 실행 (또는 두 번 클릭) 한 다음 Update Shell Profile. 명령을 실행합니다.

여기에 이미지 설명 입력


5

두 단계가 저에게 효과적이었습니다.-Macintosh HD> Applications> Python3.7 폴더로 이동- "Install Certificates.command"를 클릭합니다.


5

아나콘다를 사용하는 사람이라면 certifi패키지를 설치하면 됩니다. 자세한 내용은 다음을 참조하십시오.

https://anaconda.org/anaconda/certifi

설치하려면 터미널에 다음 줄을 입력하십시오.

conda install -c anaconda certifi

나도이 문제가있다. 환경을 만들 수 없습니다. 방금 miniconda3 (macOS)를 설치했는데 인증서가 설치되어 있습니다 ( 'conda list') ..
Kai

4

이 게시물을 살펴보십시오. 이후 버전의 Python에서는 인증서가 미리 설치되어 있지 않아이 오류가 발생하는 것 같습니다. 다음 명령을 실행하여 certifi 패키지를 설치할 수 있어야합니다./Applications/Python\ 3.6/Install\ Certificates.command

게시물 1 : urllib 및 "SSL : CERTIFICATE_VERIFY_FAILED"오류

게시 2 : Airbrake 오류 : urlopen 오류 [SSL : CERTIFICATE_VERIFY_FAILED] 인증서 확인 실패 : 로컬 발급자 인증서를 가져올 수 없음


3

이 솔루션을 찾을 수 있으며 잘 작동합니다.

cd /Applications/Python\ 3.7/
./Install\ Certificates.command

2

슬프게도 문제를 해결하지 못했습니다. 하지만 코드가 작동하도록 관리했습니다 (거의 모든 코드에는이 probelm btw가 있습니다) 로컬 발급자 인증서 문제는 python3.7에서 발생하므로 python2.7 QAQ로 다시 변경하고 "from urllib2 import urlopen"을 포함하여 변경해야하는 모든 사항을 변경했습니다. "from urllib.request import urlopen"대신 너무 슬프다 ...


2

Mac에서 실행중인 경우 Install Certificates.command스포트라이트에서 검색 하고 Enter 키를 누르면됩니다.


0

요청 라이브러리를 사용하십시오. 이 솔루션을 시도하거나 https://URL 앞에 추가 하십시오.

import requests
from bs4 import BeautifulSoup
import re

pages = set()
def getLinks(pageUrl):
    global pages
    html = requests.get("http://en.wikipedia.org"+pageUrl, verify=False).text
    bsObj = BeautifulSoup(html)
    for link in bsObj.findAll("a", href=re.compile("^(/wiki/)")):
        if 'href' in link.attrs:
            if link.attrs['href'] not in pages:
                #We have encountered a new page
                newPage = link.attrs['href']
                print(newPage)
                pages.add(newPage)
                getLinks(newPage)
getLinks("")

이것이 당신을 위해 작동하는지 확인하십시오


0

저는 Stack Overflow의 모든 전문가에 비해 상대적으로 초보자입니다.

2 가지 버전의 jupyter 노트북이 실행 중입니다 (하나는 새로운 Anaconda Navigator 설치를 통해 하나는 ????를 통해 하나). Anaconda가 내 Mac에 로컬 설치로 설치 되었기 때문이라고 생각합니다 (Anaconda 지침에 따라).

이미 파이썬 3.7이 설치되어 있습니다. 그 후 터미널을 사용하여 jupyter 노트북을 열었고 다른 버전을 내 Mac에 전 세계적으로 배치했다고 생각합니다.

그러나 나는 시행 착오를 통해 배우기 때문에 확실하지 않습니다!

터미널 명령을 수행했습니다.

conda install -c anaconda certifi 

(위의 지시에 따르지만 작동하지 않았습니다.)

내 Python 3.7은 OS Catalina10.15.3에 다음 위치에 설치됩니다.

  • /Library/Python/3.7/site-packages 및
  • ~ / Library / Python / 3.7 / lib / python / site-packages

인증서는 다음 위치에 있습니다.

  • ~ / Library / Python / 3.7 / lib / python / site-packages / certifi-2019.11.28.dist-info

나는 Install Certificate.command를 찾으려고했지만 ... 위의 링크가 아닌 응용 프로그램이 아닌 파일 구조를 통해 찾을 수 없었습니다.

나는 Spotlight를 통해 그것을 찾아서 마침내 설치했습니다. 그리고 자동으로 두 번 클릭하고 다음과 같은 폴더에 다른 인증서를 설치했습니다.

  • ~ / 라이브러리 /Python/3.7/lib/python/site-packages/

위의 어느 것도 나를 위해 아무것도 해결하지 못했습니다 ... 나는 여전히 같은 오류가 있습니다.

그래서 다음과 같이 문제를 해결했습니다.

  1. 내 jupyter 노트북을 닫습니다.
  2. Anaconda Navigator를 엽니 다.
  3. Navigator GUI (터미널 대신)를 통해 jupyter 노트북을 엽니 다.
  4. 내 노트북을 열고 코드를 실행합니다.

이것이 왜 효과가 있었는지 말할 수 없습니다. 그러나 그것은 나를 위해 문제를 해결했습니다.

다음에 번거 로움을 덜어주고 싶을뿐입니다. 누군가 제게 왜 효과가 있었는지 말해 줄 수 있다면 그것은 대단 할 것입니다.

나는 내가 문제라는 것을 알고있는 2 가지 버전의 jupyter 노트북 때문에 다른 터미널 명령을 시도하지 않았다. 나는 그것을 고치는 방법을 모른다.


0

나에게 문제는 내가 REQUESTS_CA_BUNDLE.bash_profile

/Users/westonagreene/.bash_profile:
...
export REQUESTS_CA_BUNDLE=/usr/local/etc/openssl/cert.pem
...

REQUESTS_CA_BUNDLE공백으로 설정 하면 (예 :에서 제거됨 .bash_profile) requests다시 작업했습니다.

export REQUESTS_CA_BUNDLE=""

이 문제 requests는 CLI (Command Line Interface)를 통해 Python 을 실행할 때만 나타납니다 . 내가 달리면requests.get(URL, CERT) 하면 잘 해결되었습니다.

Mac OS Catalina (10.15.6). 3.6.11의 Pyenv. 내가받은 오류 메시지 :[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)

다른 곳에서의 내 대답 : https://stackoverflow.com/a/64151964/4420657


0

Debian 10 buster를 사용하고 있으며 youtube-dl로 파일을 다운로드하면 다음 오류가 발생합니다. sudo youtube-dl -k https://youtu.be/uscis0CnDjk

[youtube] uscis0CnDjk : 웹 페이지 다운로드 오류 : 웹 페이지를 다운로드 할 수 없음 : <urlopen 오류 [SSL : CERTIFICATE_VERIFY_FAILED] 인증서 확인 실패 : 로컬 발급자 인증서 (_ssl.c : 1056)를 가져올 수 없음> (URLError (SSLCertVerificationError (1, ' [SSL : CERTIFICATE_VERIFY_FAILED] 인증서 확인 실패 : 로컬 발급자 인증서를 가져올 수 없습니다 (_ssl.c : 1056) ')))

python2 및 python3.8이 포함 된 인증서가 올바르게 설치되었지만 동일한 오류가 계속 발생합니다. 마지막으로 (최고의 솔루션은 아니지만 youtube-dl의 옵션으로 제공되는 인증서 확인을 제거하는 것이 저에게 효과적이었습니다) whith이 명령 sudo youtube-dl -k --no-check-certificate https://youtu.be/uscis0CnDjk



-1

작동합니다. 환경 변수 PYTHONHTTPSVERIFY를 0으로 설정합니다.

  • linux 명령을 입력하여 :
export PYTHONHTTPSVERIFY = 0

또는

  • 파이썬 코드에서 사용 :
import os
os.environ["PYTHONHTTPSVERIFY"] = "0"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.