私はPythonとgithub全般にまったく慣れていないので、ご容赦ください。
Playストアからデータをスクレイピングするリクエストを使用しています。 大量のリクエスト(約20k)を行う必要があります。 約3000〜4000のリクエストには最適ですが、その後スタックします(SSLエラー)。 私はSSLとリクエストに精通していないので、これの原因がわかりません。
エラー:
(SSLError Traceback (most recent call last)
<ipython-input-23-1da544640d89> in <module>()
53 time.sleep(0.1)
54
---> 55 r = requests.get('https://play.google.com' + link + '&hl=en')
56 link_tree = html.fromstring(r.content)
57 description = link_tree.xpath('//div[@jsname="C4s9Ed"]/text()') + link_tree.xpath('//div[@jsname="C4s9Ed"]/p/text()')
C:\Users\Nathan\AppData\Local\Enthought\Canopy\User\lib\site-packages\requests\api.pyc in get(url, params, **kwargs)
65
66 kwargs.setdefault('allow_redirects', True)
---> 67 return request('get', url, params=params, **kwargs)
68
69
C:\Users\Nathan\AppData\Local\Enthought\Canopy\User\lib\site-packages\requests\api.pyc in request(method, url, **kwargs)
51 # cases, and look like a memory leak in others.
52 with sessions.Session() as session:
---> 53 return session.request(method=method, url=url, **kwargs)
54
55
C:\Users\Nathan\AppData\Local\Enthought\Canopy\User\lib\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)
466 }
467 send_kwargs.update(settings)
--> 468 resp = self.send(prep, **send_kwargs)
469
470 return resp
C:\Users\Nathan\AppData\Local\Enthought\Canopy\User\lib\site-packages\requests\sessions.pyc in send(self, request, **kwargs)
574
575 # Send the request
--> 576 r = adapter.send(request, **kwargs)
577
578 # Total elapsed time of the request (approximately)
C:\Users\Nathan\AppData\Local\Enthought\Canopy\User\lib\site-packages\requests\adapters.pyc in send(self, request, stream, timeout, verify, cert, proxies)
445 except (_SSLError, _HTTPError) as e:
446 if isinstance(e, _SSLError):
--> 447 raise SSLError(e, request=request)
448 elif isinstance(e, ReadTimeoutError):
449 raise ReadTimeout(e, request=request)
SSLError: EOF occurred in violation of protocol (_ssl.c:590) )
このgithubの-efiは、このスレッドでも同じ問題を抱えているようです: https :
私はかなり長い間これに固執していて、ここでも答えも見つかりません(答えはおそらく私の目の前にありましたが、SSLとリクエストの知識が不足しているために理解するのに苦労しました) 。
よろしくお願いします。不明な点がある場合は申し訳ありません。お知らせください。
あなたが立ち往生していると言うとき、それは例外が発火するだけですか? または、フォローアップリクエストが機能しませんか? 一時的なネットワークエラーが発生するため、質問します。多数のWebリクエストを行う場合は、それらに直面して何らかの再試行ロジックを実装することを検討する必要があります。
例外が発生します。 フォローアップリクエストは機能しているようですが、まだ再試行を実装しようとはしていません。 サーバーなどにリクエストが多すぎるというルールに反しているのではないかと心配していました。
私は間違いなくそれを試して、このスレッドを更新します。 ありがとう!
requests.*
を使用しているため、自分とサーバー間のネットワークリソースが過負荷になるリスクが高くなります。 セッションを使用し
この問題を抱えている人のために:
@Lukasaの提案に従って修正し、リクエストをインポートした直後にこれを追加しました。
import requests
sess = requests.Session()
adapter = requests.adapters.HTTPAdapter(max_retries = 20)
sess.mount('http://', adapter)
次に、以前はrequests.get()
を使用していましたが、 sess.get()
。
うまくいけば、これがお役に立てば幸いです、そしてあなたの助けに感謝します
まったく同じエラーメッセージが表示されました。問題は、ndg-httpsclientがインストールされていないことでした。
@variable ndg- エラー:urllib.error.URLError :
最も参考になるコメント
まったく同じエラーメッセージが表示されました。問題は、ndg-httpsclientがインストールされていないことでした。
https://github.com/kennethreitz/requests/issues/3605