requests bei einer Ajax-Seite

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Hallo zusammen, ich will eine Website parsen, bei der ich via GET über die URL Variablen für eine Abfrage übergeben kann. Die Seite zeigt mir dann die Daten - leider zeitverzögert - an. D. h. die Seite baut sich auf, dann dauert es so gefühlt 5 Sekunden und ich erhalte die Daten, die ich haben möchte.

Gibt es eine Möglichkeit, dass ich die URL an den Server schicken kann und dann anmerken kann, dass ich die Seite erst nach 5 oder 6 oder ... Sekunden auch laden möchte!? Ich verstehe das requests-Modul bislang so, dass ich eine URL schicke und eine Antwort erhalte. Problem ist, dass diese Antwort dann aber noch nicht die Daten enthält.

Jemand eine Idee oder einen Tipp!?

(Alternativlösung bei mir: Die Ausgabe enthält HTML-Tabellen, ich kann mir vorstellen die Seite zu speichern und lokal auswerten zu lassen. Die Daten brauche ich eher selten, würde diesen Arbeitsschritt dennoch gerne automatisieren.)
BlackJack

@pixewakb: Der Server weiss doch nicht was für Daten die Webseite anfordern wird, also kann man dem auch nicht sagen er soll mal das schicken was der Browser abfragen würde wenn der das JavaScript für die Webseite ausführt. Du müsstest halt schauen was die Webseite nach dem laden noch so vom Server abfragt und diese Abfragen nachbauen.
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Ich habe noch mal eine Verständnisfrage: Ich habe eine Seite, die in der URL Parameter bekommt und zwar nicht, wie ich das von php gewohnt wäre mit "&id=12" sondern der Form "/1/1/100". Ich verstehe einigermaßen, was die Parameter machen, d. h. 100 steht für die letzten 100 Daten, die dann auf der Seite im Browser angezeigt werden.

Im Browser bekomme ich auch tatsächlich 100 Daten angezeigt, abrufen mit requests kann ich aber nur die letzten 2, wenn ich die URL mit den Parametern übergebe. Auf der Seite gibt es praktisch kein JS, ich sehe aber dort nicht, dass das etwas lädt.

Für mein Verständnis: Die URL scheint für mich zu einem php-Skript zu gehören, von wo JS dann in einer anderen Seite die Daten bezieht. Eigentlich müsste das php-Skript doch die vollständige Seite liefern, d. h. requests müsste das vollständige Ergebnis erhalten. Im Kern deutet es auf ein JS-Problem hin, das ich offensichtlich nicht sehe. Liege ich da falsch?

Gibt es da einen guten, d. h. einfachen Weg von außen rauszufinden, was die Seite js-mäßig nach dem Laden in meinem Browser macht? Gibt es einen probaten Weg, das in Python dann nachzubilden?

Es gab auch diese Anfrage zum Thema Python, requests und Ajax:
* Javascript Browser
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Ich habe diese Anleitung [url="https://impythonist.wordpress.com/2015/ ... web-pages/]"Ultimate guide for scraping JavaScript rendered web pages"[/url] (Blog, 2015) mit einer anderen Herangehensweise gefunden und werde das mal versuchen.
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

2. Ansatz lieferte auch kein besseres Ergebnis :(
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Ok, Link in Safari eingegeben und ich sehe nur 2 Treffer, also wahrscheinlich wird ein Cockie ausgewertet :( Gebe mich noch mal auf die Suche.
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Problem gelöst!

Ich habe gerade diese Anleitung befolgt Schnellstart requests - Cookies und folgenden Code genutzt:

Code: Alles auswählen

import requests

url = "https://adresse.de/1/1/100"

cookies = dict()
cookies["key"] = 'html5'

r = requests.get(url, cookies=cookies)
# print(r.text)

with open("result.html", "w") as f:
    f.write(r.text)
Ich habe die Daten für das cookies-Wörterbuch bekommen, indem ich in den Entwicklermodus in Chrome gewechselt bin (Rechtsklick auf der Seite und "Untersuchen" wählen) und dort dann Tab "Resources" > "Cookies" > "Seitenname". Ich habe die Daten dort rauskopier und die Daten der Spalten aus Name und Value ins Wörterbuch gepackt. Läuft dann.

Mir hat geholfen die Seite in Opera (also einem anderen Browser) zu betrachten, wo ich noch keine Cookies gesetzt hatte. Dadurch kam ich darauf, dass es kein js-Problem, sondern ein Cookie-Problem ist.
Antworten