Seite 1 von 1

Dateien aus einer Webseite laden

Verfasst: Freitag 14. Dezember 2018, 20:15
von egon11
Hallo, ist es mit urllib oder so möglich, Dateien von einer Webseite zu laden und zu behandeln wie ein lokalen Pfad ("/home/meineDateien")?
Wenn auf einer Webseite in einen Ordner quasi sich mehrere Dateien befinden sie dann in einer Schleife zu laden und zu bearbeiten.
Ich habe bisher nichts treffendes gefunden.
Einen Denkanstoß wäre sehr hilfreich.

Re: Dateien aus einer Webseite laden

Verfasst: Freitag 14. Dezember 2018, 20:19
von __deets__
Jein. Man kann mit urllib und requests Daten runter laden. Und die dann speichern. Transparent so-arbeiten-als-ob-die-lokal-wären geht nicht.

Re: Dateien aus einer Webseite laden

Verfasst: Freitag 14. Dezember 2018, 20:37
von egon11
Also nix mit glob und so?
Meinst du Daten (den Inhalt einer Datei/Webseite) oder eine Komplette Datei?

Re: Dateien aus einer Webseite laden

Verfasst: Freitag 14. Dezember 2018, 21:15
von noisefloor
Hallo,

du lädst die komplette Webseite, in der Regel eine HTML Datei = Text - und dann kannst du damit machen, was Python so her gibt. Also z.B. das HTML mittels eines HTML/XML Parsers durchsuchen.

Wenn du Webseite dynamisch generiert wird, also z.B. Inhalt mittels JavaScript nachträglich eingefügt wird, dann funktioniert der Weg nicht. Dann musst du anders vorgehen.
Wenn auf einer Webseite in einen Ordner quasi sich mehrere Dateien befinden
Webseiten kennen keine Ordner und Dateien... Meinst du vielleicht Links auf Dateien?

Was hat du eigentlich vor? Wenn du das mal beschreiben würdest, würde auch vielleicht ein konkreterer Lösungsvorschlag dabei raus kommen.

Gruß, noisefloor

Re: Dateien aus einer Webseite laden

Verfasst: Freitag 14. Dezember 2018, 21:44
von egon11
Ich habe einen Webdav Server wo ich bestimmte Dateien abgelegt habe, das ist ein Ordner der mehrere Dateien beinhaltet. Die wollte ich "einfach so" wie z.b. mit glob in einer "for-Schleife" durchlaufen lassen.
Ok ich kann aber auch Clientdav py nehmen, das habe ich auch schon mal erfolgreich getestet, aber das muss man erst installieren...
Von daher dachte ich es gibt eine "einfachere" Lösung.
Ich habe es jetzt mit den Code gemacht und das Hilft mir weiter:

Code: Alles auswählen

from urllib.request import urlretrieve
import requests

url = "http://192.168.178.55:81/cc"

a = urlretrieve(url, "/home/dell/probe_urlretrieve.txt")

#################################

b = requests.get(url)
with open("/home/dell/probe_requests.txt", "wb") as code:
    code.write(b.content)
Nur weiß ich nicht wo da jetzt der Unterschied ist.

Re: Dateien aus einer Webseite laden

Verfasst: Samstag 15. Dezember 2018, 07:20
von snafu
egon11 hat geschrieben: Freitag 14. Dezember 2018, 21:44 Nur weiß ich nicht wo da jetzt der Unterschied ist.
Ein Außenstehender leider auch nicht, da 192.168.178.* zum privaten Adressbereich gehört (z.B. für Router) und somit nicht beurteilt werden kann, was da bei dir heraus kommt. Generell kann requests halt automatische Weiterleitungen, Fehlerbehandlungen, einfaches Mitgeben von Headern, usw. Mit Python-Boardmitteln ist es auch möglich, erfordert aber mehr Code und mehr Mitdenken seitens des Programmierers.

Re: Dateien aus einer Webseite laden

Verfasst: Samstag 15. Dezember 2018, 11:20
von noisefloor
Hallo,
Von daher dachte ich es gibt eine "einfachere" Lösung.
Wenn's ein fertiges Python-Modul gibt, welches eine brauchbare API hat, dann ist das immer einfacher als ein DIY Lösung.

Ansonsten kannst du unter Linux WebDAV via FUSE als Dateisystem einbinden, dann hast du darauf Zugriff wie auf eine lokale Festplatte etc.

Gruß, noisefloor

Re: Dateien aus einer Webseite laden

Verfasst: Samstag 15. Dezember 2018, 11:27
von __blackjack__
Kann man unter Windows nicht auch WebDAV als Laufwerk einbinden? Ich dachte ich hätte so etwas schon mal irgendwo gesehen.

Re: Dateien aus einer Webseite laden

Verfasst: Samstag 15. Dezember 2018, 12:45
von egon11
Also das mit Webdav ist mir bekannt, hab ich so in der Form schon mal gemacht (linux).
Jetzt ist die Frage was der Unterschied zwischen "urlretrieve" und "requests.get" ist.Beides funktioniert bei mir gleich.
Und die private IP ist jetzt nur zum Test.

Edit:
OT on:
Bei linux hänge ich das entfernte webdav Verzeichnis mittels "dafs" in ein Verzeichnis ein und wird so behandelt, als ob es lokal wäre.
OT off

Re: Dateien aus einer Webseite laden

Verfasst: Samstag 15. Dezember 2018, 13:08
von __blackjack__
@egon11: `requests.get()` lädt den gesamten Inhalt auf einmal in den Speicher wenn man da nicht explizit sagt, dass man a) „streaming“ möchte, und b) nicht `Response.iter_content()` verwendet um die Antwort vom Server in Blöcken zu lesen.

`a` und `b` sind nicht so wirklich tolle Namen. `a` verwendest Du ausserdem gar nicht.

Re: Dateien aus einer Webseite laden

Verfasst: Samstag 15. Dezember 2018, 13:23
von egon11
Ok vielen dank.