Dateien aus einer Webseite laden

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

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.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Also nix mit glob und so?
Meinst du Daten (den Inhalt einer Datei/Webseite) oder eine Komplette Datei?
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

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.
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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.
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Kann man unter Windows nicht auch WebDAV als Laufwerk einbinden? Ich dachte ich hätte so etwas schon mal irgendwo gesehen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

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
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Ok vielen dank.
Antworten