Я практикуюсь в коде из «Web Scraping with Python», и у меня все еще возникает проблема с сертификатом:

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: 

Кстати, я тоже практиковал scrapy, но продолжал сталкиваться с проблемой: command not found: scrapy (Я пробовал всевозможные решения в сети, но ни одно не работает ... очень расстраивает)

Ответы (19)

Однажды я наткнулся на этот вопрос. Если вы используете macOS, перейдите в Macintosh HD> Приложения> Папка Python3.6 (или любая другая версия Python, которую вы используете)> дважды щелкните файл «Install Certificates.command». : D

Если вы работаете на Mac, вы можете просто найти Install Certificates.command в центре внимания и нажать Enter.

Для начинающих пользователей вы можете зайти в папку Applications и развернуть папку Python 3.7. Теперь сначала запустите (или дважды щелкните) команду Install Certificates.com, а затем команду Update Shell Profile.com

enter image description here

Для тех, кто использует anaconda, вы должны установить пакет certifi, подробнее см .:

https://anaconda.org/anaconda/certifi

Для установки введите в терминале такую ​​строку:

conda install -c anaconda certifi

Чтобы решить эту проблему:

Все, что вам нужно сделать, это установить сертификаты Python! Распространенная проблема в macOS.

Откройте эти файлы:

Install Certificates.command
Update Shell Profile.command

Просто запустите эти два сценария, и у вас больше не будет этой проблемы.

Надеюсь, это поможет!

Я использую 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) с помощью этой команды sudo youtube-dl -k --no-check-certificate https://youtu.be/uscis0CnDjk

Это сработает. Установите для переменной среды PYTHONHTTPSVERIFY значение 0.

  • Набрав команду linux:
export PYTHONHTTPSVERIFY = 0

ИЛИ

  • Использование в коде Python:
import os
os.environ["PYTHONHTTPSVERIFY"] = "0"

Я относительно новичок по сравнению со всеми экспертами по Stack Overflow.

У меня работают 2 версии записной книжки jupyter (одна через новую установку Anaconda Navigator, а другая через ????). Я думаю, это потому, что Anaconda была установлена ​​как локальная установка на моем Mac (согласно инструкциям Anaconda).

У меня уже был установлен python 3.7. После этого я использовал свой терминал, чтобы открыть блокнот jupyter, и я думаю, что он поместил другую версию глобально на мой Mac.

Однако я не уверен, потому что я просто учусь методом проб и ошибок!

Я выполнил команду терминала:

conda install -c anaconda certifi 

(как указано выше, но это не сработало.)

Мой python 3.7 установлен на ОС Catalina10.15.3 в:

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

Сертификат находится по адресу:

  • ~ / Библиотека / Python / 3.7 / lib / python / site-packages / certifi-2019.11.28.dist-info

Я попытался найти команду Install Certificate.com ... но не смог найти ее, просматривая файловые структуры ... не в приложениях ... не в ссылках выше.

I finally installed it by finding it through Spotlight (as someone suggested above). And it double clicked automatically and installed ANOTHER certificate in the same folder as:

  • ~ / Библиотека / Python / 3.7 / lib / python / site-packages /

Ничего из вышеперечисленного для меня ничего не решило ... У меня все еще та же ошибка.

Итак, я решил проблему:

  1. закрываю блокнот jupyter.
  2. открытие Anaconda Navigator.
  3. открытие записной книжки jupyter через графический интерфейс навигатора (вместо через Терминал).
  4. открываю блокнот и запускаю код.

Я не могу сказать, почему это сработало. Но это решило проблему для меня.

Я просто хочу избавить кого-нибудь от хлопот в следующий раз. Если бы кто-нибудь мог сказать мне, почему это сработало, это было бы потрясающе.

Я не пробовал другие команды терминала из-за двух версий jupyter notebook, которые, как я знал, были проблемой. Я просто не знаю, как это исправить.

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

Попробуйте эту команду в терминале

Я наблюдаю эту проблему в системе Ubuntu 20.04, и ни одно из «настоящих исправлений» (например, этот) не помогло.

Хотя Firefox был готов открыть сайт нормально, ни GNOME Web (т.е. Epiphany), ни Python3, ни wget не принимали сертификат. После некоторого поиска я наткнулся на этот ответ на ServerFault, в котором перечислены две распространенные причины:

  • Сертификат действительно подписан неизвестным ЦС (например, внутренним ЦС).
  • Сертификат подписан промежуточным сертификатом ЦС от одного из хорошо известных ЦС, а удаленный сервер неправильно настроен в связи с тем, что он не включает этот промежуточный сертификат ЦС в качестве ответной цепочки ЦС.

Вы можете использовать веб-сайт Qualys SSL Labs, чтобы проверить сертификаты сайта, и если есть проблемы, обратитесь к администратору сайта, чтобы исправить их.

Если вам действительно нужно обойти проблему прямо сейчас, я бы порекомендовал временное решение, например Rambod's, привязанное к сайтам, к которым вы пытаетесь получить доступ.

К сожалению, я не решил проблему. но удалось заставить коды работать (почти все мои коды имеют эту проблему, кстати) проблема с сертификатом местного эмитента происходит под python3.7 поэтому я вернулся к python2.7 QAQ и все, что нужно было изменить, включая "from urllib2 import urlopen" вместо "from urllib.request import urlopen" так грустно ...

Взгляните на этот пост, похоже, что для более поздних версий Python сертификаты не установлены предварительно, что, по-видимому, вызывает эту ошибку. Вы должны иметь возможность выполнить следующую команду для установки пакета certifi: / Applications / Python \ 3.6 / Install \ Certificates.command

Сообщение 1: urllib и ошибка «SSL: CERTIFICATE_VERIFY_FAILED»

Сообщение 2: Ошибка Airbrake: ошибка urlopen [SSL: CERTIFICATE_VERIFY_FAILED] ошибка проверки сертификата: невозможно получить сертификат местного эмитента

У меня была такая же ошибка, и я решил проблему, выполнив приведенный ниже программный код:

# install_certifi.py
#
# образец сценария для установки или обновления набора корневых сертификатов по умолчанию
# для модуля ssl. Использует сертификаты, предоставленные пакетом certifi:
# https://pypi.python.org/pypi/certifi

импорт ОС
импорт os.path
импортировать ssl
статистика импорта
подпроцесс импорта
import sys

STAT_0o775 = (stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR
             | stat.S_IRGRP | stat.S_IWGRP | stat.S_IXGRP
             | stat.S_IROTH | stat.S_IXOTH)


def main ():
    openssl_dir, openssl_cafile = os.path.split (
        ssl.get_default_verify_paths (). openssl_cafile)

    print ("- pip install --upgrade certifi")
    subprocess.check_call ([sys.executable,
        "-E", "-s", "-m", "pip", "install", "--upgrade", "certifi"])

    импортные сертификаты

    # изменить рабочий каталог на каталог SSL по умолчанию
    os.chdir (openssl_dir)
    relpath_to_certifi_cafile = os.path.relpath (certifi.where ())
    print ("- удаление любого существующего файла или ссылки")
    пытаться:
        os.remove (openssl_cafile)
    кроме FileNotFoundError:
        проходят
    print ("- создание символической ссылки на комплект сертификата certifi")
    os.symlink (relpath_to_certifi_cafile, openssl_cafile)
    print ("- установка разрешений")
    os.chmod (openssl_cafile, STAT_0o775)
    print ("- обновление завершено")

если __name__ == '__main__':
    главный()

для использования непроверенного ssl вы можете добавить это в свой код:

import ssl
ssl._create_default_https_context = ssl._create_unverified_context

Я нашел это решение и работает нормально:

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

Использовать библиотеку запросов. Попробуйте это решение или просто добавьте 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("")

Проверьте, работает ли это у вас

Для меня проблема заключалась в том, что я устанавливал REQUESTS_CA_BUNDLE в моем .bash_profile

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

После того, как я установил REQUESTS_CA_BUNDLE пустым (т.е. удален из .bash_profile), запросы снова сработали.

export REQUESTS_CA_BUNDLE=""

Проблема проявляется только при выполнении python запросов через CLI (интерфейс командной строки). Если я запустил requests.get (URL, CERT), он разрешился нормально.

Mac OS Catalina (10.15.6). Pyenv от 3.6.11. Я получаю сообщение об ошибке: [SSL: CERTIFICATE_VERIFY_FAILED] проверка сертификата не удалась: невозможно получить сертификат местного эмитента (_ssl.c: 1056)

Мой ответ в другом месте: https://stackoverflow.com/a/64151964/4420657

У меня сработали два шага: - идем Macintosh HD> Приложения> Папка Python3.7 - нажмите «Install Certificates.command»

Эта команда терминала:

открыть / Applications / Python \ 3.7 / Install \ Certificates.command

Здесь найдено: https://stackoverflow.com/a/57614113/6207266

Разрешил за меня. С моим конфигом

pip install --upgrade certifi

не повлияло.

2022 WebDevInsider