Versuchen, Anfragen zu verwenden, um eine Liste von URLs herunterzuladen und die Ausnahme abzufangen, wenn es eine schlechte URL ist. Hier ist mein Testcode:Python mit Anfragen mit gültigem Hostnamen
import requests
from requests.exceptions import ConnectionError
#goodurl
url = "http://www.google.com"
#badurl with good host
#url = "http://www.google.com/thereisnothing.jpg"
#url with bad host
#url = "http://somethingpotato.com"
print url
try:
r = requests.get(url, allow_redirects=True)
print "the url is good"
except ConnectionError,e:
print e
print "the url is bad"
Das Problem ist, wenn ich in url pass = „http://www.google.com“ alles funktioniert wie es sollte, und wie zu erwarten, da es eine gute URL ist.
http://www.google.com
the url is good
Aber wenn ich in url pass = "http://www.google.com/thereisnothing.jpg"
ich noch bekommen:
http://www.google.com/thereisnothing.jpg
the url is good
seine so fast wie seine nicht einmal etwas suchen nach dem "/"
nur um zu sehen, ob die Fehlerprüfung funktioniert überhaupt habe ich einen schlechten Hostnamen übergeben: #url = "http://somethingpotato.com"
, die die Fehlermeldung trat zurück ich erwartet hatte:
http://somethingpotato.com
HTTPConnectionPool(host='somethingpotato.com', port=80): Max retries exceeded with url:/(Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1b6cd15b90>: Failed to establish a new connection: [Errno -2] Name or service not known',))
the url is bad
Was ich Anfrage erfassen eine schlechte URL nicht nur ein schlechter Hostnamen fehle zu machen?
Dank
Ich hatte gehofft, den eigentlichen Fehler (e) übergeben, da ich den Fehler in eine Datei schreiben möchte. Vielleicht kann ich anstelle von "url is bad" in der else-Anweisung r.status_code ausgeben (was schlecht sein sollte, wenn es zur else-Anweisung gehört). Würdest du das vorschlagen? – chowpay
@chowpay Das Problem ist, dass es sich nicht wirklich um einen Fehler handelt, so dass Sie keinen Fehler zum Drucken finden können. Ich würde vorschlagen, eine benutzerdefinierte Funktion zu machen, um eine "Fehler" -URL auszudrucken, die die URL und den Statuscode enthalten könnte. Wenn Sie ein Beispiel möchten, könnte ich meine Antwort hinzufügen –
ja bitte. danke – chowpay