2016-08-02 23 views
0

Ich schrieb einen Web-Scraper mit Requests-Modul. Ich öffne eine Sitzung und sende nachfolgende Anfragen mit dieser Sitzung. Es hat 2 Phasen.Python Session 10054 Verbindung abgebrochen Fehler

1) Kratzen Seite für Seite und sammeln IDs in einem Array. 2) Details zu jeder ID im Array mit Anfragen an einen Ajax-Server auf demselben Host abrufen.

Der Scraper funktioniert gut auf meinem Linux-Rechner. Allerdings, wenn ich den Bot auf Windows 10 ausführen, Phase 1 ist gut abgeschlossen, aber nach ein paar Anfragen in Phase 2 Python löst diese Ausnahme

Datei "c: \ python27 \ lib \ Site-Pakete \ Anfragen \ Adapter. py ", Zeile 453, in send raise ConnectionError (err, request = Anfrage) ConnectionError: (Verbindung abgebrochen., Fehler (10054, 'Varolan bir ba \ xf0lant \ xfd uzaktaki bir ana bilgisayar taraf \ xfdndan zorla kapat \ xfdld '))

Was unterscheidet zwei Betriebssysteme, die das verursachen? Wie kann ich dieses Problem überwinden?

Nachdem ich meinen Anfragecode wie unten geändert hatte, hatte das Wiederholen des Moduls keine positiven Auswirkungen. Jetzt wirft das Skript keine Ausnahmen, sondern hängt einfach nichts.

@retry(wait_exponential_multiplier=1000, wait_exponential_max=10000, stop_max_attempt_number=7) 
def doReq(self, url): 
    time.sleep(0.5) 
    response = self.session.get(url, headers=self.headers) 
    return response 

Antwort

0

Ich weiß immer noch nicht, warum dieses Problem nur in Windows auftritt. Das Wiederholen von Decorator scheint jedoch das Problem des Socket-Fehlers behoben zu haben. Der Grund für das Hängen des Skripts liegt daran, dass der Server nicht auf eine Anforderung reagiert hat. Standardmäßig wartet der Requests-Modus immer auf eine Antwort. Durch das Hinzufügen eines Zeitüberschreitungswerts wird eine Zeitüberschreitungsausnahme ausgelöst, und der Retry Decorator fängt sie ab und versucht es erneut. Ich weiß, dass dies eher eine Arbeit als eine Lösung ist, aber das ist das Beste, was ich gerade habe.