Verstehen von Anfragen im Vergleich zu Anfragen

8

Ich arbeite mit einem Prozess, der im Wesentlichen wie folgt aussieht:

  1. Nimm eine Liste von URLs.
  2. Erhalten Sie von jedem ein Response Objekt.
  3. Erstellen Sie ein BeautifulSoup-Objekt aus dem text jeder Antwort.
  4. Ziehen Sie den Text eines bestimmten Tags aus diesem BeautifulSoup-Objekt.

Aus meiner Sicht scheint dies ideal für Anfragen zu sein:

  

GRequests ermöglicht es Ihnen, Requests mit Gevent asynchron zu verwenden   HTTP-Anfragen leicht.

Aber die beiden Prozesse (einer mit Anfragen, einer mit Anträgen) scheinen mir unterschiedliche Ergebnisse zu bringen, wobei einige der Anfragen in Anträgen None und nicht eine Antwort zurückgeben.

Verwendung von Anfragen

%Vor%

Verwenden von gequests

%Vor%

Warum der Unterschied in den Ergebnissen?

Update: Ich kann den Ausnahmetyp wie folgt drucken. Verwandte Diskussion hier , aber ich habe keine Ahnung, was los ist.

%Vor%

System- / Versionsinfo

  • Anfragen: 2.18.4
  • grequests: 0.3.0
  • Python: 3.6.3
  • urllib3: 1.22
  • pyopenssl: 17.2.0
  • Alles über Anaconda
  • System: dasselbe Problem sowohl bei Mac OSX HS & amp; Windows 10, Build 10.0.16299
Brad Solomon 13.09.2017, 19:30
quelle

2 Antworten

2

Sie senden nur Anfragen zu schnell. Da grequests eine asynchrone Bibliothek ist, werden alle diese Anfragen fast gleichzeitig gesendet. Sie sind zu viele.

Sie müssen nur die gleichzeitige Aufgaben von grequests.map(rs, size=your_choice) begrenzen, ich habe grequests.map(rs, size=10) getestet und es funktioniert gut.

    
Sraw 14.12.2017, 08:26
quelle
4

Ich kenne den genauen Grund für das beobachtete Verhalten nicht mit .map() . Die Verwendung der .imap() -Funktion mit size=1 hat jedoch immer eine 'Response 200' für meine paar Minuten Test zurückgegeben. Hier ist der Code snipet:

%Vor%

Und wenn Sie nicht warten möchten, bis alle Anfragen fertig sind, bevor Sie an ihren Antworten arbeiten, können Sie das folgendermaßen tun:

%Vor%     
Mit
fabianegli 07.12.2017 19:44
quelle