Seite 1 von 1

Datei im Internet auf Existenz prüfen

Verfasst: Donnerstag 29. März 2012, 17:41
von BastiL
Hallo zusammen,

ich lade Fondsdaten von der Comdirekt:

Code: Alles auswählen

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.

Grüße Bastian

Re: Datei im Internet auf Existenz prüfen

Verfasst: Donnerstag 29. März 2012, 17:57
von deets
Kannst du nicht. Aber je nach request koenntest du auf den zurueckgegebenen Content-type gucken, ob's noch CSV ist oder HTML.

Re: Datei im Internet auf Existenz prüfen

Verfasst: Donnerstag 29. März 2012, 18:08
von lunar
@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.

Re: Datei im Internet auf Existenz prüfen

Verfasst: Donnerstag 29. März 2012, 18:27
von BastiL
deets hat geschrieben:Aber je nach request koenntest du auf den zurueckgegebenen Content-type gucken, ob's noch CSV ist oder HTML.
Danke, das wäre ja auch ok. Wie müsste ich das machen?

Re: Datei im Internet auf Existenz prüfen

Verfasst: Donnerstag 29. März 2012, 20:00
von webspider
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:

Code: Alles auswählen

>>> import requests
>>> r = requests.get("http://www.google.de/images/srpr/logo3w.png")
>>> r.status_code
200
>>> r = requests.get("http://www.google.de/images/not_available.png")
>>> r.status_code
404

Re: Datei im Internet auf Existenz prüfen

Verfasst: Donnerstag 29. März 2012, 20:11
von snafu
webspider hat geschrieben:Wenn ich requests nutze [...]
Falls das jemand, so wie ich, nicht auf Anhieb verstanden hat -> requests.

Re: Datei im Internet auf Existenz prüfen

Verfasst: Donnerstag 29. März 2012, 20:17
von webspider
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).

Re: Datei im Internet auf Existenz prüfen

Verfasst: Donnerstag 29. März 2012, 20:34
von snafu
webspider hat geschrieben:Ich bin mir sicher, dass man die Vorgehensweise ebenfalls auf die mitgelieferten Module anwenden kann
Ja, und solche trivialen Abfragen sind jetzt auch nicht übelst kompliziert:

Code: Alles auswählen

>>> from urllib import urlopen
>>> conn = urlopen("http://www.google.de/")
>>> conn.getcode()
200
>>> conn.info()["Content-Type"]
'text/html; charset=ISO-8859-1'

Re: Datei im Internet auf Existenz prüfen

Verfasst: Donnerstag 29. März 2012, 20:37
von BastiL
DAnke,

waren tole Tipps. Ich habe es jetzt über den Dateityp umgesetzt.

Re: Datei im Internet auf Existenz prüfen

Verfasst: Samstag 31. März 2012, 09:11
von sma
Ü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.

Stefan