Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
for i in range (50):
urllib.urlretrieve("http://www.comdirect.de/"\
+ "inf/kursdaten/historic.csv?DATETIME_TZ_START_RANGE_FORMATED=1.1.1990"\
+ "&ID_NOTATION=3230170&INTERVALL=16&OFFSET=" + str(i)\
+ "&DATETIME_TZ_END_RANGE_FORMATED=" + heute + "&WITH_EARNINGS=true"\
, str(id) + "/offset%03i.csv" %i)
Jetzt weiss ich nicht im Voraus, wieviele Dateien das sind. Ich würde gerne eine while-Schleife verwenden und die Datei nur laden, wenn es eine csv ist. In diesem Beispiel sind es 31 Dateien, die Dateien 32 aufwärts sind eine html-Datei. Wie könnte ich vorher prüfen, ob die Datei exisitert? Danke.
@BasiL: An dieser Stelle ist vielleicht auch der Hinweis angebracht, dass so etwas wie „Dateien“ in HTTP nicht existiert. HTTP kennt nur Anfragen an Adressen, und Antworten mit Daten. Versuche nicht, HTTP-Ressourcen so zu verarbeiten, wie man Dateien verarbeiten.
Eine Möglichkeit wäre es zu schauen ob man einen 404-Error erwischt hat (wie ihn die meisten Seiten zurückgeben wenn man auf etwas nicht vorhandenes zugreift). Wenn ich requests nutze, vergleiche ich dafür das Attribut status_code der Anfrage mit einem Zahlenwert:
Da hab ich wohl tatsächlich vergessen darauf zu verlinken, aber nun gut. Ich bin mir sicher, dass man die Vorgehensweise ebenfalls auf die mitgelieferten Module anwenden kann und finde sie eher zugänglich als die Abfrage des Content-type (welche bei dem Beispielcode des verlinkten Moduls auch demonstriert wird).
Übrigens sollte ein HEAD-Request anstelle eines GET-Requests reichen, um zu schauen, ob eine Ressource zu einer URL existiert. Das überträgt weniger Daten und ist damit für Client und Server effizienter.