Seite 1 von 1

Info aus HTML/PHP-Dokument

Verfasst: Montag 6. April 2020, 13:53
von Taburkel
Moin,

erste Info: Ich bin Python- und Programmieranfänger! Zweite Info: Falls ich bei meiner Internet- und Forenrecherche die Lösung zu meinem Problem übersehen habe, tut es mir sehr leid, dass ich Frage hier stelle! Ich habe wirklich lange recherchiert.

Ich habe mit einem Python-Einsteigerkurs begonnen, den ich Kapitel für Kapitel durcharbeite, aber ich muss bewusst eine komplexere zeitkritische Fragestellung angehen auf Bitte meines Vorgesetzten. Wenn das nicht geht, ist es OK. Ich akzeptiere auch evtl. Kritik, dass ich mich erstmal einarbeiten sollte.

Wir haben über Jahre Kundendaten auf einem geschützten Internetportal eingetragen. Das Portal bietet eine Eingabemaske für jede Kundenbestellung, in die man die Daten einträgt (z.B. Stückzahlen, Einzelpreis). Im Anschluss kann man sich daraus ein pdf generieren lassen (bspw. Gesamtpreis etc.). Nun möchten wir die Daten der letzten 10 Jahre (>1500 Kundenbestellungen) auswerten. Der Betreiber sagt aber, dass keine Funktion zur Verfügung steht, die Daten aller Bestellungen als csv o.ä. herunterzuladen. Händisch geht das aber wegen der Menge nicht.

Die Eingabeseite ist mit Typo3 erstellt, es gibt so etwas wie Frames, aber im HTML-Code keine frame tags. Es gibt oben Links für die Navigation ("Über uns", "Für Kunden", "Referenzen") und links eine Spalte mit Links ("Ihre Kunden", "Neuen Kunden anlegen"). Der größte Teil ist die Eingabemaske für die aktuelle Bestellung.

Jede Bestellung hat danach eine eigene vom System vergebene ID, die hinten an die URL angehängt ist: https://www.firmaX.de/kunden/123456 (fiktive URL)

(Pikanterweise kann ich auch fremde Bestellungen einsehen, wenn ich hinten die ID ändere; ich muss aber mit meinem LogIn eingeloggt sein. Ich werde das den Betreibern schnellstmöglich mitteilen, hoffe aber, vorher noch unsere Daten zu kriegen.)

Mit dem webbrowser kann ich die individuelle Eingabemaske aufrufen:

Code: Alles auswählen

for i in ["123456", "654321", "112233"]:
    base_url = "https://www.firmaX.de/kunden/"
    url = base_url + str(i)
    webbrowser.open(url)
Da sehe ich Browser dann die Eingabemaske mit den eingegebenen Werten (Stückzahlen; Einzelpreis).

Wenn ich diese Webseiten allerdings speichern will, enthält das gespeicherte txt nur die beiden Navigationsframes ("Über uns"; "Für Kunden"... und "Ihre Kunden", "Neuen Kunden anlegen"). Die Info aus der Eingabemaske ist nicht mit gespeichert. Da sind aber die Daten (Auftragsvolumen, Datum, Stückzahlen), die wir benötigen.

Code: Alles auswählen

import requests

url = "https://www.firmaX.de/kunden/123456/"

r = requests.get(url)
with open('Bestellung.txt', 'w', encoding="utf-8") as file:
    file.write(r.text)
Ich (als Laie) denke, die Info ist ja verfügbar, sonst würde ich beim Öffnen mit webbrowser.open() nicht die eingegebenen Werte bei den individuellen Bestellungen sehen können. Kann ich diese Werte nicht irgendwie speichern?

Ist das so verständlich? Fehlen noch Angaben? Vielen Dank!

Taburkel

Re: Info aus HTML/PHP-Dokument

Verfasst: Montag 6. April 2020, 14:00
von sparrow
Da lässt sich vom grünen Tisch schwer etwas zu sagen. Eine Webseite in einem Browser zu öffnen ist etwas anderes als die URL anzusprechen. Ein Webbrowser kann JavaScript ausführen und damit unter Umständen Daten nachladen, die Seite verändern, etc. Das tut dein Aufruf nicht.
Du müsstest also durch die Webentwicklertools des Browser schauen, welche Aufrufe dort ggf. durch die Webseite ausgeführt werden.

Re: Info aus HTML/PHP-Dokument

Verfasst: Montag 6. April 2020, 14:19
von Taburkel
Hi,

danke für die schnelle Antwort!
Nach was müsste ich denn schauen? plugins? events?

Immerhin kriege ich im Inspektor (Mozilla Strg+Shift+c) auch den eingegebenen Wert (value=12) angezeigt, den ich benötigen würde.

Vielen Dank und Grüße
Taburkel

Re: Info aus HTML/PHP-Dokument

Verfasst: Montag 6. April 2020, 14:26
von __blackjack__
@Taburkel: Ich würde mir als erstes den Netzwerkverkehr beim laden der Seite anschauen, falls das wirklich Frames sind, welche URL denn der Frame mit den Daten hat, oder ob da eventuell per JavaScript/”Ajax” Daten nachgeladen werden, und ob man das leicht mit `requests` nachbauen kann.

Oh, und Du sagst Du musst angemeldet sein. Das bist Du vielleicht im Browser, aber ich sehe davon nichts in Deinem Python-Code‽ Da müsste man wohl erst einmal über `requests.Session` die Anmeldung machen und dann erst die Seite mit den Daten aufrufen.