2014-01-08 4 views
9

Ich versuche, einen einfachen Web-Crawler mit dem Requests-Modul zu programmieren, und ich würde gerne wissen, wie man seine -default-keep-alive-Funktion deaktiviert.Python-Requests (> = 1. *): Wie Keep-Alive deaktivieren?

Ich habe versucht, mit:

s = requests.session() 
s.config['keep_alive'] = False 

Allerdings bekomme ich eine Fehlermeldung, dass die Session-Objekt kein Attribut ‚config‘ hat, denke ich, es mit der neuen Version geändert wurde, aber ich kann nicht scheinen zu finden, wie man Mach es in der offiziellen Dokumentation.

Die Wahrheit ist, wenn ich den Crawler auf einer bestimmten Website laufen, es bekommt nur fünf Seiten höchstens, und dann endlos Schleifen, so dachte ich, es hat etwas mit der Keep-Alive-Funktion zu tun!

PS: ist Anfragen ein gutes Modul für einen Web-Crawler? Gibt es etwas angepasstes?

Vielen Dank!

+1

Dies wurde [in 1.x geändert] (http://docs.python-requests.org/en/latest/api/#migrating-to-1-x) – Elrond

Antwort

14

Dies funktioniert

s = requests.session() 
s.keep_alive = False 

Answered in the comments of a similar question.

+1

Soweit eine Web-Crawler-Empfehlung - SO sollte nicht für meinungsbasierte Fragen und Antworten verwendet werden. Wenn Sie daran interessiert sind, mit dem Web und den Webinhalten zu interagieren, würde ich empfehlen, etwas über Pakete wie scrapy und beautifulsoup zu recherchieren. – nfazzio

+0

zumindest auf aktuellen Anfragen Version funktioniert es nicht - Anfragen sll sendet Keep-Alive-Header – MacHala

3

Ich bin mir nicht sicher, aber können Sie versuchen, {"Connection": "close"} als HTTP-Header übergeben, wenn Sie eine GET-Anfrage mit Anfragen senden. Dies schließt die Verbindung, sobald ein Server eine Antwort zurückgibt.

>>> headers = {"Connection": "close"} 
>>> r = requests.get('https://example.xcom', headers=headers) 
+0

ich das versucht, aber aren‘ Solltest du eine POST-Anfrage dafür verwenden? Wie auch immer, das Problem besteht immer noch! – Acemad

1

Wie @praveen vorgeschlagen, von uns erwartet werden HTTP/1.1 Header Connection: close zu verwenden, um den Server zu benachrichtigen, dass die Verbindung soll nach Abschluss der Reaktion geschlossen werden.

Hier ist, wie es in RFC 2616 beschrieben ist:

HTTP/1.1 definiert die „close“ Anschlussmöglichkeit für den Sender zu signalisieren, dass die Verbindung wird nach Beendigung der Reaktion geschlossen werden. Zum Beispiel

Connection: close 

entweder in der Anfrage oder die Antwort-Header-Feldern zeigen an, dass die Verbindung nicht `persistent‘ in Betracht gezogen werden soll (siehe Abschnitt 8.1) nach der aktuellen Anforderung/Antwort ist abgeschlossen.

HTTP/1.1-Anwendungen, die keine persistenten Verbindungen unterstützen, MÜSSEN in jeder Nachricht die Verbindungsoption "close" enthalten.

Verwandte Themen