Bitte haben Sie Verständnis, da ich mit Python und Github im Allgemeinen ziemlich neu bin.
Ich habe Anfragen zum Scrapen von Daten aus dem Play Store verwendet. Ich muss eine große Anzahl von Anfragen stellen (ca. 20k). Es funktioniert hervorragend für etwa 3000-4000 Anfragen, bleibt aber danach hängen (SSL-Fehler). Ich bin mit SSL und Anfragen nicht vertraut, daher weiß ich nicht, was dies verursacht.
Fehler:
(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) )
The-efi auf diesem Github schien in diesem Thread das gleiche Problem zu haben: https://github.com/kennethreitz/requests/issues/3006 (siehe unten, er war nicht das OP), aber ich konnte es nicht finden den Thread öffnete er für weitere Hilfe. Ich verwende Python 2.7. sowie.
Ich stecke schon seit einiger Zeit daran fest und kann weder hier noch StackOverflow eine Antwort finden (die Antwort lag wahrscheinlich direkt vor meiner Nase, aber ich hatte Probleme, sie zu verstehen, weil ich nicht über SSL und Anfragen Bescheid wusste) .
Vielen Dank im Voraus für Ihre Hilfe und Entschuldigung, wenn etwas unklar ist - lassen Sie es mich bitte wissen.
Wenn Sie sagen, dass Sie stecken bleiben, wird dann nur die Ausnahme ausgelöst? Oder funktionieren Folgeanfragen nicht? Ich frage, weil vorübergehende Netzwerkfehler _do_ auftreten, und wenn Sie eine große Anzahl von Webanfragen stellen, sollten Sie eine Art Wiederholungslogik implementieren.
Die Ausnahme feuert. Folgeanfragen scheinen zu funktionieren, aber ich habe noch nicht versucht, einen Wiederholungsversuch zu implementieren. Ich hatte Angst, dass ich gegen die Regeln verstoße, zu viele Anfragen an einen Server zu stellen oder so, denke ich.
Ich werde das auf jeden Fall versuchen und diesen Thread aktualisieren. Vielen Dank!
Nun, für das, was es wert ist, weil Sie requests.*
, setzen Sie sich einem größeren Risiko aus, die Netzwerkressourcen zwischen Ihnen und dem Server zu überlasten. Sie sollten versuchen, eine Sitzung zu verwenden .
Für alle mit diesem Problem:
Ich habe es behoben, indem ich den Vorschlägen von
import requests
sess = requests.Session()
adapter = requests.adapters.HTTPAdapter(max_retries = 20)
sess.mount('http://', adapter)
Dann, wo ich vorher requests.get()
, habe ich sess.get()
.
Hoffentlich hilft das und danke für deine Hilfe @Lukasa !
Ich hatte genau die gleiche Fehlermeldung, das Problem war, dass ich den ndg-httpsclient nicht installiert hatte
@variable Ich habe ndg-httpsclient installiert, aber der gleiche Fehler: urllib.error.URLError :
Hilfreichster Kommentar
Ich hatte genau die gleiche Fehlermeldung, das Problem war, dass ich den ndg-httpsclient nicht installiert hatte
https://github.com/kennethreitz/requests/issues/3605