Ćwiczę kod z „Web Scraping with Python” i ciągle mam ten problem z certyfikatem:
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("")
Błąd:
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)>
Przy okazji, ćwiczyłem również scrapy, ale wciąż pojawiał się problem: polecenie nie zostało znalezione: scrapy (próbowałem różnych rozwiązań online, ale żadne nie działa ... naprawdę frustrujące)
python
web-scraping
beautifulsoup
scrapy
ssl-certificate
Catherine4j
źródło
źródło
Odpowiedzi:
Kiedyś natknąłem się na ten problem. Jeśli używasz macOS, przejdź do folderu Macintosh HD> Aplikacje> Python3.6 (lub dowolnej wersji Pythona, której używasz)> kliknij dwukrotnie plik „Install Certificates.command”. :RE
źródło
aby użyć niezweryfikowanego ssl, możesz dodać to do swojego kodu:
import ssl ssl._create_default_https_context = ssl._create_unverified_context
źródło
Aby rozwiązać ten problem:
Wszystko, co musisz zrobić, to zainstalować certyfikaty Pythona! Częsty problem w systemie macOS.
Otwórz te pliki:
Po prostu uruchom te dwa skrypty i nie będziesz już mieć tego problemu.
Mam nadzieję że to pomoże!
źródło
To polecenie terminala:
open /Applications/Python\ 3.7/Install\ Certificates.command
Znaleziono tutaj: https://stackoverflow.com/a/57614113/6207266
Rozwiązałem to za mnie. Z moim config
pip install --upgrade certifi
nie miał żadnego wpływu.
źródło
Dla początkujących użytkowników możesz przejść do folderu Aplikacje i rozwinąć folder Python 3.7. Teraz najpierw uruchom (lub kliknij dwukrotnie) Install Certificates.command, a następnie Update Shell Profile.command
źródło
Pomogły mi dwa kroki: - przechodzę na Macintosh HD> Aplikacje> folder Python3.7 - kliknij „Install Certificates.command”
źródło
Dla każdego, kto używa anacondy, zainstalowałbyś
certifi
pakiet, zobacz więcej na:https://anaconda.org/anaconda/certifi
Aby zainstalować, wpisz ten wiersz w swoim terminalu:
źródło
Spójrz na ten post, wygląda na to, że w późniejszych wersjach Pythona certyfikaty nie są wstępnie zainstalowane, co wydaje się powodować ten błąd. Powinieneś móc uruchomić następujące polecenie, aby zainstalować pakiet certifi:
/Applications/Python\ 3.6/Install\ Certificates.command
Post 1: urllib i błąd „SSL: CERTIFICATE_VERIFY_FAILED”
Post 2: błąd hamulca pneumatycznego: błąd urlopen [SSL: CERTIFICATE_VERIFY_FAILED] weryfikacja certyfikatu nie powiodła się: nie można uzyskać certyfikatu lokalnego wydawcy
źródło
Mogłem znaleźć to rozwiązanie i działa dobrze:
cd /Applications/Python\ 3.7/ ./Install\ Certificates.command
źródło
Niestety nie rozwiązałem problemu. ale udało mi się sprawić, że kody działają (prawie wszystkie moje kody mają ten problem btw) problem z certyfikatem lokalnego wydawcy występuje w python3.7, więc zmieniłem z powrotem na python2.7 QAQ i wszystko, co musiałem zmienić, w tym "from urllib2 import urlopen" zamiast "from urllib.request import urlopen" tak smutno ...
źródło
Jeśli korzystasz z komputera Mac, możesz po prostu wyszukać
Install Certificates.command
w centrum uwagi i nacisnąć Enter.źródło
Użyj biblioteki żądań. Wypróbuj to rozwiązanie lub po prostu dodaj
https://
przed adresem 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("")
Sprawdź, czy to działa dla Ciebie
źródło
Jestem względnie nowicjuszem w porównaniu ze wszystkimi ekspertami od Stack Overflow.
Mam uruchomione 2 wersje notebooka jupyter (jedną przez świeżą instalację Anaconda Navigatora i jedną przez ????). Myślę, że dzieje się tak, ponieważ Anaconda została zainstalowana jako instalacja lokalna na moim Macu (zgodnie z instrukcjami Anacondy).
Miałem już zainstalowany Python 3.7. Potem użyłem terminala do otwarcia notatnika jupyter i myślę, że umieściłem inną wersję na całym świecie na moim Macu.
Jednak nie jestem pewien, ponieważ uczę się tylko metodą prób i błędów!
Wykonałem polecenie terminala:
(jak wskazano powyżej, ale to nie zadziałało).
Mój Python 3.7 jest zainstalowany na systemie operacyjnym Catalina 10.15.3 w:
Certyfikat znajduje się pod adresem:
Próbowałem znaleźć Install Certificate.command ... ale nie mogłem go znaleźć, przeglądając struktury plików ... nie w Aplikacjach ... nie w linkach powyżej.
W końcu zainstalowałem go, znajdując go przez Spotlight (jak ktoś zasugerował powyżej). Dwukrotnie kliknął automatycznie i zainstalował INNY certyfikat w tym samym folderze co:
ŻADNE z powyższych nie rozwiązało niczego dla mnie ... nadal mam ten sam błąd.
Więc rozwiązałem problem poprzez:
Nie mogę ci powiedzieć, dlaczego to zadziałało. Ale to rozwiązało problem za mnie.
Chcę tylko zaoszczędzić komuś kłopotów następnym razem. Gdyby ktoś mógł mi powiedzieć, dlaczego to zadziałało, byłoby wspaniale.
Nie próbowałem innych poleceń terminala z powodu dwóch wersji notebooka jupyter, o których wiedziałem, że są problemem. Po prostu nie wiem, jak to naprawić.
źródło
Dla mnie problem polegał na tym, że ustawiałem
REQUESTS_CA_BUNDLE
w moim.bash_profile
Po ustawieniu
REQUESTS_CA_BUNDLE
na puste (tj. Usunięciu z.bash_profile
),requests
działało ponownie.export REQUESTS_CA_BUNDLE=""
Problem występował tylko podczas wykonywania języka Python
requests
za pośrednictwem interfejsu wiersza poleceń (CLI). Jeśli uruchomiłemrequests.get(URL, CERT)
, rozwiązało się dobrze.Mac OS Catalina (10.15.6). Pyenv z 3.6.11. Komunikat o błędzie, który otrzymałem:
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)
Moja odpowiedź gdzie indziej: https://stackoverflow.com/a/64151964/4420657
źródło
Używam buster Debiana 10 i próbuję pobrać plik za pomocą youtube-dl i otrzymuję ten błąd:
sudo youtube-dl -k https://youtu.be/uscis0CnDjk
Certyfikaty z python2 i python3.8 są poprawnie zainstalowane, ale trwały otrzymuję ten sam błąd. na koniec (co nie jest najlepszym rozwiązaniem, ale działa jak dla mnie, było wyeliminowanie sprawdzania certyfikatu jak to jest podane jako opcja w youtube-dl) tym poleceniem
sudo youtube-dl -k --no-check-certificate https://youtu.be/uscis0CnDjk
źródło
Zainstaluj Certificates.command na swoim komputerze Mac.
źródło
To zadziała. Ustaw zmienną środowiskową PYTHONHTTPSVERIFY na 0.
export PYTHONHTTPSVERIFY = 0
LUB
import os os.environ["PYTHONHTTPSVERIFY"] = "0"
źródło