स्क्रैपिंग: SSL: CERTIFICATE_VERIFY_FAILED त्रुटि http://en.wikipedia.org के लिए


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 त्रुटि [SSL: CERTIFICATE_VERIFY_FAILED] प्रमाणपत्र सत्यापित विफल रहा: स्थानीय जारीकर्ता प्रमाण पत्र प्राप्त करने में असमर्थ (_ssl.c: 1049)>
Catherine4j

1
और ... कृपया मुझे इस त्रुटि के पीछे का कारण बताएं, वास्तव में जानना चाहते हैं ~~ धन्यवाद !!
Catherine4j

1
हैं CERTIFICATE_VERIFY_FAILED: एसएसएल पर 529 मौजूदा सवाल है, जो बाहर कृपया आंकड़ा अपने समाधान है तो पास इस डुप्लीकेट के रूप में।
smci


और मैं स्पष्ट टिप्पणी करने वाला था: क्या आपने इसे http के बजाय https के साथ एक्सेस किया है?
एसएमसीआई

जवाबों:


437

एक बार मैं इस मुद्दे पर लड़खड़ा गया। यदि आप macOS का उपयोग कर रहे हैं, तो Macintosh HD> Applications> Python3.6 फ़ोल्डर पर जाएं (या आप जो भी अजगर का संस्करण उपयोग कर रहे हैं)> "Install प्रमाण पत्र.कॉम पर स्थापित करें" फ़ाइल पर डबल क्लिक करें। : डी


5
ओह, मेरे पास अपने मैक पर यह सर्टिफिकेट सर्टिफिकेट.कॉम की फाइल नहीं है ... पता नहीं क्यों TAT
Catherine4j

24
यदि आप Homebrew का उपयोग करके पायथन को स्थापित करते हैं तो वह फ़ाइल मौजूद नहीं है। समाधान यहाँ है: stackoverflow.com/a/44649450/412896
Sampo

4
कृपया इसे हल करने वाले उत्तर के रूप में किसी को चिह्नित करें। आपने मुझे इतना समय और प्रयास बचाया जब मैं बहुत फंस गया था !!
मार्क पुचला II

5
मैं इसे विंडोज 10 के लिए कैसे कर सकता हूं? ऐसी कोई फ़ाइल मौजूद नहीं है।
आकाश बसु

6
पौराणिक उत्तर
निको

43

असत्यापित ssl का उपयोग करने के लिए आप इसे अपने कोड में जोड़ सकते हैं:

import ssl
ssl._create_default_https_context = ssl._create_unverified_context

2
यह अच्छा है क्योंकि मुझे सिस्टम में बदलाव क्यों करना है अगर मुझे जोड़ने की आवश्यकता है तो कोड की दो लाइनें हैं।
नागरी

1
इस उत्तर को संभवतः उल्लेख करना चाहिए कि यह कोड इस बात पर निर्भर करता है कि उपयोगकर्ता डेटा के
खराब

जब आप असत्यापित प्रमाण पत्र का उपयोग करते हैं, तो आप जोखिम में हैं। और कोड की यह लाइन केवल तभी अच्छी है जब आपको पता हो कि डेटा स्रोत क्या है और इसका उत्पादन मोड के लिए डिफ़ॉल्ट रूप में सेट करना अच्छा नहीं है। सवाल यह है कि कुछ असत्यापित पृष्ठ को कैसे स्कार्प किया जाए यह कोड इस स्थिति के लिए कम से कम सुरक्षा की बड़ी चिंता नहीं करता है।
रामबोध

1
यह एक आसान तय है। धन्यवाद।
रॉय

30

इसे हल करने के लिए:

आपको केवल पायथन प्रमाणपत्र स्थापित करने की आवश्यकता है! MacOS पर एक सामान्य समस्या।

इन फ़ाइलों को खोलें:

Install Certificates.command
Update Shell Profile.command

बस इन दो लिपियों को चलाएं और आप इस मुद्दे को और अधिक नहीं करेंगे।

उम्मीद है की यह मदद करेगा!


8
मुझे अपने एप्लिकेशन डीआर में पायथन निर्देशिका दिखाई नहीं दे रही है .. मैं एनाकोंडा का उपयोग कर रहा हूं और अजगर 3.6 के लिए एक नया ईएनवी बनाया है क्योंकि मैंने पहले अजगर 2.7 स्थापित किया था (जो कि जाहिरा तौर पर मेरे एप्लिकेशन डीआर में फ़ोल्डर नहीं बनाया था!)। .. मेरे मैक पर प्रमाण पत्र नहीं मिल सकते हैं।
काई

3
इन्हें कहां से चलाया जाए?
baxx

1
@ अजीम: कैसे उबंटू में?
बेटी

21

यह टर्मिनल कमांड:

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

यहां पाया गया: https://stackoverflow.com/a/57614113/6207266

इसे मेरे लिए हल कर दिया। मेरे विन्यास के साथ

pip install --upgrade certifi

कोई प्रभाव नहीं पड़ा।


17

नौसिखिए उपयोगकर्ताओं के लिए, आप एप्लिकेशन फ़ोल्डर में जा सकते हैं और पायथन 3.7 फ़ोल्डर का विस्तार कर सकते हैं। अब पहले चलाएँ (या डबल क्लिक करें) सर्टिफिकेट्स.कॉम स्थापित करें और फिर शेल प्रोफाइल डॉट कॉम अपडेट करें

यहाँ छवि विवरण दर्ज करें


5

दो चरणों ने मेरे लिए काम किया: - जा रहा है Macintosh HD> अनुप्रयोग> Python3.7 फ़ोल्डर - "प्रमाण पत्र स्थापित करें" पर क्लिक करें


5

एनाकोंडा का उपयोग करने वाले किसी भी व्यक्ति के लिए, आप certifiपैकेज स्थापित करेंगे , और अधिक देखें:

https://anaconda.org/anaconda/certifi

स्थापित करने के लिए, अपने टर्मिनल में यह लाइन टाइप करें:

conda install -c anaconda certifi

मुझे भी यही समस्या है। एक वातावरण नहीं बना सकते। मैंने अभी miniconda3 (macOS) स्थापित किया है और मैं प्रमाणित ('कोंडा लिस्ट') स्थापित करता हूँ ..
काई

4

इस पोस्ट पर एक नज़र डालें, ऐसा लगता है कि पायथन के बाद के संस्करणों के लिए, प्रमाण पत्र पहले से स्थापित नहीं हैं जो इस त्रुटि का कारण लगता है। प्रमाण पत्र पैकेज को स्थापित करने के लिए आपको निम्नलिखित कमांड चलाने में सक्षम होना चाहिए:/Applications/Python\ 3.6/Install\ Certificates.command

पोस्ट 1: urllib और "SSL: CERTIFICATE_VERIFY_FAILED" त्रुटि

पोस्ट 2: एयरब्रेक त्रुटि : urlopen त्रुटि [SSL: CERTIFICATE_VERIFY_FAILED] प्रमाणपत्र सत्यापित विफल रहा: स्थानीय जारीकर्ता प्रमाणपत्र प्राप्त करने में असमर्थ



2

मैं इस समस्या को हल नहीं किया, दुख की बात है। लेकिन कोड काम करने में कामयाब रहे (लगभग मेरे सभी कोड्स में यह प्रोबेल्म btw है) स्थानीय जारीकर्ता प्रमाणपत्र समस्या python3.7 के तहत होती है इसलिए मैंने वापस python2.7 QAQ में बदल दिया और सभी को urllib2 से आयात urlopen सहित बदलने की आवश्यकता हुई " इसके बजाय "urllib.request आयात urlopen से" इतना दुखद ...


2

यदि आप एक मैक पर चल रहे हैं तो आप सिर्फ Install Certificates.commandस्पॉटलाइट और हिट एंट्री के लिए खोज कर सकते हैं।


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

स्टैक ओवरफ्लो पर सभी विशेषज्ञों की तुलना में मैं एक रिश्तेदार नौसिखिया हूं।

मेरे पास जुपिटर नोटबुक के 2 संस्करण हैं (एक ताजा एनाकोंडा नेविगेटर इंस्टॉलेशन के माध्यम से और एक ???? के माध्यम से)। मुझे लगता है कि यह इसलिए है क्योंकि एनाकोंडा को मेरे मैक (एनाकोंडा के निर्देशों के अनुसार) पर स्थानीय इंस्टॉलेशन के रूप में स्थापित किया गया था।

मेरे पास पहले से ही अजगर 3.7 स्थापित था। उसके बाद, मैंने ज्यूपिटर नोटबुक खोलने के लिए अपने टर्मिनल का उपयोग किया और मुझे लगता है कि इसने मेरे मैक पर विश्व स्तर पर एक और संस्करण डाल दिया।

हालाँकि, मुझे यकीन नहीं है क्योंकि मैं परीक्षण और त्रुटि के माध्यम से सीख रहा हूँ!

मैंने टर्मिनल कमांड किया:

conda install -c anaconda certifi 

(जैसा कि ऊपर निर्देशित है, लेकिन यह काम नहीं किया।)

मेरा अजगर 3.7 OS Catalina10.15.3 में स्थापित है:

  • / लॉर्ड्स / पायथन / 3.7 / साइट-पैकेज और
  • ~ / Library / पायथन / 3.7 / lib / अजगर / साइट-संकुल

प्रमाण पत्र इस पर है:

  • ~ / Library / पायथन / 3.7 / lib / अजगर / साइट-संकुल / सर्टिफिकेट-2019.11.28.dist-जानकारी

मैंने सर्टिफिकेट सर्टिफिकेट.कॉम को खोजने की कोशिश की ... लेकिन फ़ाइल संरचनाओं के माध्यम से इसे नहीं खोज सका ... न कि अनुप्रयोगों में ... ऊपर दिए गए लिंक में नहीं।

मैंने अंत में इसे स्पॉटलाइट के माध्यम से खोजकर स्थापित किया (जैसा कि किसी ने ऊपर सुझाव दिया है)। और यह स्वचालित रूप से डबल क्लिक करता है और उसी फ़ोल्डर में ANOTHER प्रमाणपत्र स्थापित करता है:

  • ~ / Library / पायथन / 3.7 / lib / अजगर / साइट-संकुल /

उपरोक्त किसी ने मेरे लिए कुछ भी हल नहीं किया ... मुझे अभी भी वही त्रुटि मिली है।

इसलिए, मैंने इस समस्या को हल किया:

  1. मेरी जुपिटर नोटबुक को बंद करना।
  2. एनाकोंडा नेविगेटर खोलना।
  3. नेविगेटर GUI (टर्मिनल के माध्यम से) के माध्यम से ज्यूपिटर नोटबुक खोलना।
  4. मेरी नोटबुक खोलना और कोड चलाना।

मैं आपको यह नहीं बता सकता कि यह क्यों काम किया। लेकिन इसने मेरे लिए समस्या हल कर दी।

मैं सिर्फ अगली बार किसी को परेशानी से बचाना चाहता हूं। अगर कोई मुझे बता सकता है कि यह क्यों काम किया, तो यह बहुत अच्छा होगा।

मैंने ज्यूपिटर नोटबुक के 2 संस्करणों के कारण अन्य टर्मिनल कमांड की कोशिश नहीं की, जो मुझे पता था कि एक समस्या थी। मुझे नहीं पता कि इसे कैसे ठीक किया जाए।


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 (कमांड लाइन इंटरफ़ेस) के माध्यम से अजगर को निष्पादित करते समय किया गया था । अगर मैं भाग गया तो requests.get(URL, CERT)यह ठीक हल हो गया ।

मैक ओएस कैटालिना (10.15.6)। 3.6.11 का पायनेव। त्रुटि संदेश मुझे मिल रहा था:[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)

मेरा जवाब कहीं और: https://stackoverflow.com/a/64151964/4420657


0

मैं डेबियन 10 बस्टर का उपयोग कर रहा हूं और youtube-dl के साथ एक फ़ाइल डाउनलोड करने का प्रयास करता हूं और यह त्रुटि प्राप्त करता हूं: sudo youtube-dl -k https://youtu.be/uscis0CnDjk

] [एसएसएल: CERTIFICATE_VERIFY_FAILED] प्रमाणपत्र सत्यापित विफल रहा: स्थानीय जारीकर्ता प्रमाण पत्र प्राप्त करने में असमर्थ (_ssl.c: 1056) '))

Python2 और python3.8 के साथ प्रमाणपत्र सही तरीके से स्थापित किए गए हैं, लेकिन मैं लगातार एक ही त्रुटि प्राप्त करता हूं। अंत में (जो सबसे अच्छा समाधान नहीं है, लेकिन मेरे लिए काम करता था प्रमाण पत्र की जांच को समाप्त करना क्योंकि इसे youtube-dl में एक विकल्प के रूप में दिया गया है) इस आदेश के साथ sudo youtube-dl -k --no-check-certificate https://youtu.be/uscis0CnDjk



-1

यह काम करेगा। पर्यावरण चर PYTHONHTTPSVERIFY को 0 पर सेट करें।

  • Linux कमांड टाइप करके:
export PYTHONHTTPSVERIFY = 0

या

  • अजगर कोड में उपयोग करना:
import os
os.environ["PYTHONHTTPSVERIFY"] = "0"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.