Scraping: Lỗi SSL: CERTIFICATE_VERIFY_FAILED cho http://en.wikipedia.org


113

Tôi đang thực hành mã từ 'Web Scraping với Python' và tôi tiếp tục gặp sự cố chứng chỉ này:

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("")

Lỗi là:

  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, tôi cũng đang thực hành trị liệu, nhưng liên tục nhận được vấn đề: lệnh không tìm thấy: liệu pháp (Tôi đã thử tất cả các loại giải pháp trực tuyến nhưng không có tác dụng ... thực sự bực bội)


1
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] xác minh chứng chỉ không thành công: không thể lấy chứng chỉ của tổ chức phát hành địa phương (_ssl.c: 1049)>
Catherine4j

1
và ... xin vui lòng cho tôi biết lý do đằng sau lỗi này, thực sự muốn biết ~~ cảm ơn !!
Catherine4j

1
529 câu hỏi hiện có trên SSL: CERTIFICATE_VERIFY_FAILED , vui lòng tìm ra giải pháp của bạn sau đó đóng câu hỏi này là trùng lặp.
smci


Và tôi đã định nhận xét rõ ràng: bạn đã truy cập nó bằng https thay vì http?
smci

Câu trả lời:


393

Đã có lần tôi vấp phải vấn đề này. Nếu bạn đang sử dụng macOS, hãy chuyển đến Macintosh HD> Ứng dụng> thư mục Python3.6 (hoặc bất kỳ phiên bản python nào bạn đang sử dụng)> nhấp đúp vào tệp "Install Certificates.command". : D


5
oh tôi không có này cài đặt tập tin Certificates.command trên mac của tôi ... không biết tại sao TAT
Catherine4j

20
Nếu bạn cài đặt Python bằng Homebrew thì tệp đó không tồn tại. Giải pháp là ở đây: stackoverflow.com/a/44649450/412896
Sampo

3
Ai đó vui lòng đánh dấu đây là câu trả lời đã giải quyết nó. Bạn đã tiết kiệm cho tôi rất nhiều thời gian và công sức khi tôi rất bế tắc !!
Mark Puchala II,

3
Làm cách nào để làm điều đó cho Windows 10? Không có tệp như vậy tồn tại.
Aakash Basu

4
Câu trả lời huyền thoại
Nico

34

để sử dụng ssl chưa được xác minh, bạn có thể thêm mã này vào mã của mình:

import ssl
ssl._create_default_https_context = ssl._create_unverified_context

1
điều này là tốt vì tại sao tôi phải thực hiện thay đổi hệ thống nếu tất cả những gì tôi cần thêm là hai dòng mã.
Nagri

1
câu trả lời này có lẽ nên đề cập rằng mã này có thể gây ra các mối quan tâm lớn về bảo mật tùy thuộc vào những gì người dùng làm với dữ liệu sau khi nó được cạo ..
Michael Altfield

chắc chắn khi bạn sử dụng chứng chỉ chưa được xác minh, bạn sẽ gặp rủi ro. và dòng mã này chỉ tốt nếu bạn biết nguồn dữ liệu là gì và nó không tốt cho chế độ sản xuất để thiết lập nó làm mặc định. câu hỏi là làm thế nào để lấy một số trang chưa được xác minh, mã này ít nhất sẽ không gây ra mối lo ngại lớn về bảo mật cho tình huống này.
Rambod

1
điều này hoạt động như một sự quyến rũ! cảm ơn anh bạn!
Rodrigo Serzedello

30

Để giải quyết điều này:

Tất cả những gì bạn cần làm là cài đặt chứng chỉ Python! Một vấn đề phổ biến trên macOS.

Mở các tệp này:

Install Certificates.command
Update Shell Profile.command

Chỉ cần chạy hai tập lệnh này và bạn sẽ không gặp sự cố này nữa.

Hi vọng điêu nay co ich!


8
Tôi không thấy thư mục Python trong Dir ứng dụng của mình .. Tôi đang sử dụng Anaconda và đã tạo một env mới cho python 3.6 vì trước đó tôi đã cài đặt python 2.7 (dường như cũng không tạo thư mục trong Dir ứng dụng của tôi!). .. Không thể tìm thấy Lệnh chứng nhận trên máy Mac của tôi
Kai

1
những thứ này phải được chạy từ đâu?
baxx

1
@Azim: thế còn trong Ubuntu thì sao?
Betty


16

Đối với người dùng mới làm quen, bạn có thể vào thư mục Ứng dụng và mở rộng thư mục Python 3.7. Bây giờ trước tiên hãy chạy (hoặc nhấp đúp) câu lệnh Install Certificates.com và sau đó là Update Shell Profile.command

nhập mô tả hình ảnh ở đây


5

Hai bước phù hợp với tôi: - đi tới thư mục Macintosh HD> Ứng dụng> Python3.7 - nhấp vào "Install Certificates.command"


4

Hãy xem bài đăng này, có vẻ như đối với các phiên bản Python sau này, các chứng chỉ không được cài đặt sẵn có vẻ là nguyên nhân gây ra lỗi này. Bạn sẽ có thể chạy lệnh sau để cài đặt gói certifi:/Applications/Python\ 3.6/Install\ Certificates.command

Bài đăng 1: urllib và lỗi "SSL: CERTIFICATE_VERIFY_FAILED"

Bài đăng 2: Lỗi Airbrake: lỗi urlopen [SSL: CERTIFICATE_VERIFY_FAILED] xác minh chứng chỉ không thành công: không thể lấy chứng chỉ của tổ chức phát hành địa phương


4

Đối với bất kỳ ai đang sử dụng anaconda, bạn sẽ cài đặt certifigói, xem thêm tại:

https://anaconda.org/anaconda/certifi

Để cài đặt, hãy nhập dòng này vào thiết bị đầu cuối của bạn:

conda install -c anaconda certifi

Tôi cũng gặp vẫn đề này. Không thể tạo môi trường. Tôi vừa cài đặt miniconda3 (macOS) và tôi thấy certifi đã được cài đặt ('danh sách chung cư') ..
Kai

3

Tôi có thể tìm thấy giải pháp này và đang hoạt động tốt:

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

2

Tôi đã không giải quyết được vấn đề, thật đáng buồn. nhưng đã quản lý để làm cho mã hoạt động (hầu như tất cả các mã của tôi đều có probelm btw này), sự cố chứng chỉ của nhà phát hành cục bộ xảy ra trong python3.7 vì vậy tôi đã thay đổi trở lại python2.7 QAQ và tất cả những gì cần thay đổi bao gồm "từ urlopen nhập urllib2" thay vì "from urllib.request import urlopen" buồn quá ...


2

Nếu bạn đang chạy trên máy Mac, bạn chỉ có thể tìm kiếm Install Certificates.commandtrên tiêu điểm và nhấn enter.


0

Sử dụng thư viện yêu cầu. Hãy thử giải pháp này hoặc chỉ cần thêm vào https://trước 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("")

Kiểm tra xem điều này có phù hợp với bạn không


0

Tôi là một người mới so với tất cả các chuyên gia về Stack Overflow.

Tôi có 2 phiên bản sổ ghi chép jupyter đang chạy (một phiên bản thông qua cài đặt Anaconda Navigator mới và một thông qua ????). Tôi nghĩ điều này là do Anaconda đã được cài đặt dưới dạng cài đặt cục bộ trên máy Mac của tôi (theo hướng dẫn của Anaconda).

Tôi đã cài đặt python 3.7. Sau đó, tôi sử dụng thiết bị đầu cuối của mình để mở sổ ghi chép jupyter và tôi nghĩ rằng nó đã đưa một phiên bản khác trên toàn cầu lên máy Mac của tôi.

Tuy nhiên, tôi không chắc vì tôi chỉ đang học qua thử và sai!

Tôi đã thực hiện lệnh đầu cuối:

conda install -c anaconda certifi 

(như hướng dẫn ở trên, nhưng nó không hoạt động.)

Python 3.7 của tôi được cài đặt trên OS Catalina10.15.3 trong:

  • /Library/Python/3.7/site-packages VÀ
  • ~ / Library / Python / 3.7 / lib / python / site-pack

Chứng chỉ tại:

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

Tôi đã cố gắng tìm Lệnh cài đặt Certificate.com ... nhưng không thể tìm thấy nó khi xem qua cấu trúc tệp ... không phải trong Ứng dụng ... không phải trong các liên kết ở trên.

Cuối cùng tôi đã cài đặt nó bằng cách tìm nó thông qua Spotlight (như ai đó đã đề xuất ở trên). Và nó đã tự động nhấp đúp và cài đặt chứng chỉ KHÁC trong cùng một thư mục như:

  • ~ / Library / Python / 3.7 / lib / python / site-pack /

KHÔNG CÓ gì ở trên giải quyết được bất cứ điều gì cho tôi ... Tôi vẫn gặp lỗi tương tự.

Vì vậy, tôi đã giải quyết vấn đề bằng cách:

  1. đóng sổ tay jupyter của tôi.
  2. mở Anaconda Navigator.
  3. mở sổ ghi chép jupyter thông qua Navigator GUI (thay vì thông qua Terminal).
  4. mở sổ ghi chép của tôi và chạy mã.

Tôi không thể cho bạn biết tại sao điều này lại hiệu quả. Nhưng nó đã giải quyết được vấn đề cho tôi.

Tôi chỉ muốn cứu ai đó rắc rối lần sau. Nếu ai đó có thể cho tôi biết lý do tại sao nó hoạt động, điều đó sẽ thật tuyệt vời.

Tôi đã không thử các lệnh đầu cuối khác vì 2 phiên bản máy tính xách tay jupyter mà tôi biết là có vấn đề. Tôi chỉ không biết làm thế nào để khắc phục điều đó.


0

Đối với tôi, vấn đề đã được rằng tôi đã thiết lập REQUESTS_CA_BUNDLEtrong tôi.bash_profile

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

Sau khi tôi đặt REQUESTS_CA_BUNDLEthành trống (tức là bị xóa khỏi .bash_profile), requestshoạt động trở lại.

export REQUESTS_CA_BUNDLE=""

Sự cố chỉ xảy ra khi thực thi python requestsqua CLI (Giao diện dòng lệnh). Nếu tôi chạy requests.get(URL, CERT)nó được giải quyết tốt.

Mac OS Catalina (10.15.6). Pyenv của 3.6.11. Thông báo lỗi tôi nhận được:[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)

Câu trả lời của tôi ở nơi khác: https://stackoverflow.com/a/64151964/4420657



-1

Điều này sẽ hoạt động. Đặt biến môi trường PYTHONHTTPSVERIFY thành 0.

  • Bằng cách gõ lệnh linux:
export PYTHONHTTPSVERIFY = 0

HOẶC LÀ

  • Sử dụng trong mã python:
import os
os.environ["PYTHONHTTPSVERIFY"] = "0"

-3

Giải pháp duy nhất phù hợp với tôi:

Xóa ứng dụng Xcode

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.