2016-08-19 2 views
0

初質問:Pythonは図書館SSLエラーを要求:[errnoを2]そのようなファイルまたはディレクトリ

File "D:\Anaconda\Lib\site-packages\requests\api.py", line 70, in get return request('get', url, params=params, **kwargs)

File "D:\Anaconda\Lib\site-packages\requests\api.py", line 56, in request return session.request(method=method, url=url, **kwargs)

File "D:\Anaconda\Lib\site-packages\requests\sessions.py", line 475, in request resp = self.send(prep, **send_kwargs)

File "D:\Anaconda\Lib\site-packages\requests\sessions.py", line 596, in send r = adapter.send(request, **kwargs)

File "D:\Anaconda\Lib\site-packages\requests\adapters.py", line 497, in send raise SSLError(e, request=request)

requests.exceptions.SSLError: [Errno 2] No such file or directory

これは、ここでのコードの1行にまでさかのぼる:

私は以下の結果を得ている
import requests, os, bs4, calendar #, sys 
import urllib.request 

while not year>2016: 
    print('Downloading page {}...'.format(url)) 

    res = requests.get(loginpageURL, verify='false', auth=('username', 'password')) #this is the line that doesn't work 
    res = requests.get(url, verify='false') #but I have tried it without that line and this line also doesn't work 
    res.raise_for_status() 

    soup = bs4.BeautifulSoup(res.text) 
    print(soup) 

私はこの問題を幅広く調査し、実際はrequests/urllib3ライブラリ自体の問題であるという結論に至りました。

最初に、verify = 'false'フィックスhereを試しました。それはうまくいかなかった。誰かhereさんが新しいopenSSLとcertifiをインストールすると言われましたが、私のシステムにインストールされ、最新の状態になっているようです。 このバグは、hereに大きな書き込みがあります。私が見ることのできる解決策はありません。 既知の問題としてgithubで特定されていますhere。 requests.exceptions.SSLErrorを::、this答えによると、私は(私はプロジェクトディレクトリに含まれる)=「このcacert.pem」を確認するために、=「false」を検証変更しようとし、それがこのエラーを投げた

[SSL:CERTIFICATE_VERIFY_FAILED]証明書の検証に失敗しました(_ssl.c:645)

ここでは、このコードスニペットを実行したいと思っています。私は数百のzipファイルを一括してダウンロードしようとしています。ウェブサイト - ライブラリの既知の問題にもかかわらず。私はPythonには比較的新しいですが、特にWebスクレイピングには新しいので、これは私のための急いで学ぶ曲線です。どんな助けもありがとう。私はscrapping requestsまで行く必要がありますか?

ありがとうございます!

+0

実際には分かりませんが、私はこの問題に少し前から直面していて、一部のSSLモジュールが見つからないことを知っていました。ニースの質問btw。 – FunkySayu

+0

あなたは正しいかもしれません。それが私の知識が崩壊するところです。私はすでにMechanicalSoupライブラリを使ってみましたが、get: requests.exceptions.SSLError:[SSL:CERTIFICATE_VERIFY_FAILED]証明書の検証に失敗しました(_ssl.c:645) –

答えて

4
res = requests.get(loginpageURL, verify='false', ... 

検証では、真偽値(TrueまたはFalse)か、信頼ストアのパスとして使用されるパスを指定します。あなたの指定'false'は文字列でありブール値ではないので、ファイルfalseをCAストアとして使用しようとします。このファイルが見つからないため、結果はNo such file or directoryになります。

これを修正するには、verify=Falseを使用する必要があります。つまり、ブール値を使用します。

検証を無効にすることは別として、検証は悪い考えであり、テストのために、またはTLSによって提供されるセキュリティがプログラムに対して完全に無関係である場合にのみ行う必要があります。あなたのケースのようなログインページでは、中間の人が簡単にユーザー名とパスワードを盗聴できるので、検証を無効にすることはおそらく悪いことです。

+0

Thanks Steffen as上記のように、私はcacert.pemへのパスを示すようにその方法を変更し、 'requested.exceptions.SSLError:[SSL:CERTIFICATE_VERIFY_FAILED]証明書の検証に失敗しました(_ssl.c:645)というエラーを投げました。 –

+0

@DK:これは別の質問です。しかし、要するに、このサイトのルートCAがcacert.pemにないか、サーバーがチェーン証明書の配信に失敗しています。これは、あなたのcacert.pemのURLと内容が分かっている場合にのみ起こります。 –

関連する問題