1

以下の場合、リクエストを使用して Project Gutenberg をスクレイピングしています。

import requests
requests.get("https://www.gutenberg.org/wiki/Science_Fiction_(Bookshelf)", verify = True) 

エラーが発生します:

    SSLError                                  Traceback (most recent call last)
<ipython-input-33-15981c36e1d3> in <module>()
----> 1 requests.get("https://www.gutenberg.org/wiki/Science_Fiction_(Bookshelf)", verify=True)

/Library/Python/2.7/site-packages/requests/api.pyc in get(url, params, **kwargs)
     67 
     68     kwargs.setdefault('allow_redirects', True)
---> 69     return request('get', url, params=params, **kwargs)
     70 
     71 

/Library/Python/2.7/site-packages/requests/api.pyc in request(method, url, **kwargs)
     48 
     49     session = sessions.Session()
---> 50     response = session.request(method=method, url=url, **kwargs)
     51     # By explicitly closing the session, we avoid leaving sockets open which
     52     # can trigger a ResourceWarning in some cases, and look like a memory leak

/Library/Python/2.7/site-packages/requests/sessions.pyc in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
    463         }
    464         send_kwargs.update(settings)
--> 465         resp = self.send(prep, **send_kwargs)
    466 
    467         return resp

/Library/Python/2.7/site-packages/requests/sessions.pyc in send(self, request, **kwargs)
    571 
    572         # Send the request
--> 573         r = adapter.send(request, **kwargs)
    574 
    575         # Total elapsed time of the request (approximately)

/Library/Python/2.7/site-packages/requests/adapters.pyc in send(self, request, stream, timeout, verify, cert, proxies)
    429         except (_SSLError, _HTTPError) as e:
    430             if isinstance(e, _SSLError):
--> 431                 raise SSLError(e, request=request)
    432             elif isinstance(e, ReadTimeoutError):
    433                 raise ReadTimeout(e, request=request)

SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:590)

これは数日前に機能していて、ページをこすることができました。コードは何も変更していません。Heroku と Postgres をインストールしましたが、それがエラーの原因かどうかはわかりません..google.com やその他のページのリクエストを引き続き行うことができます。Python バージョン 2.7.10 と Mac OSX 10.10.5 を使用しています。

このエラーを回避してグーテンベルク ページをスクレイピングするにはどうすればよいですか? このエラーがよくわからないので、助けていただければ幸いです。

4

1 に答える 1

1

彼らは最近 (2015 年 9 月 21 日) 新しい SSL 証明書をインストールしたようです。その際、サイトは TLS 1.2 接続のみを受け入れるため (ライブラリが使用しようとしている SSLv3 はなく、またTLS 1.0 または TLS 1.1 なし)。

SSL スキャンの結果については、こちらを参照してください。

動作しなくなった理由はコードとは関係ありませんが、許可されているセキュリティ プロトコルが変更され、システム (OpenSSL バージョン) が TLS 1.2 をサポートしていないようです。

お使いのコンピューターで OpenSSL ライブラリをアップグレードしてみてください。その後、サイトに再度接続できるはずです (申し訳ありませんが、Mac で Python 用に OpenSSL ライブラリを更新する詳細はわかりません)。

于 2015-09-30T01:03:24.270 に答える