Info aus HTML/PHP-Dokument

Django, Flask, Bottle, WSGI, CGI…
Antworten
Taburkel
User
Beiträge: 5
Registriert: Montag 6. April 2020, 12:31

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
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

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.
Taburkel
User
Beiträge: 5
Registriert: Montag 6. April 2020, 12:31

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

@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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten