Laden...

Liste aus Onlineportal exportieren mit Web Scraping hinter Authentifizierung

Erstellt von UK17 vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.528 Views
U
UK17 Themenstarter:in
3 Beiträge seit 2019
vor 4 Jahren
Liste aus Onlineportal exportieren mit Web Scraping hinter Authentifizierung

Ich verwalte den Terminplan für meinen Fußballverein. Um herauszufinden wann welche Spiele stattfinden, exportiere ich mir eine Liste aller Spiele meines Vereins von der Seite DFBnet SpielPlus. Dort habe ich einen Account für meinen Verein...
Ich würde diesen Arbeitsschritt gerne automatisieren. Allerdings bin ich hinsichtlich Web-Technologie nicht sehr erfahren und komme deshalb gerade nicht weiter.

Ich versuche die notwendigen Arbeitsschritte mit Hilfe der Bibliothek ScrapySharp zu automatisieren. Wenn ich dort den Browser mit der Einstellung "IgnoreCookies = true" verwende, sehe ich im Debugging, dass der Server mir nach dem Login die erwartete Seite zurückliefert. So kann ich sogar noch 2 Schritte weiter gehen, bis ich eine Suche absetze. Das Ergebnis der Suche ist dann aber leer. Ich schätze, weil hier auf den Cookie zugegriffen wird.

Wenn ich die Cookies nicht ignoriere, erhalte ich schon beim Versuch die o. g. Seite (URL=https://www.dfbnet.org/spielplus/login.do) aufzurufen - also noch vor Eingabe der Benutzerdaten - eine CookieException > Fehlermeldung:

"Fehler beim Analysieren des Cookieheaders für URI
>
." mit der InnerException "Der "Path"="/spielplus"-Teil des Cookies ist ungültig."

Kann mir jemand einen Tipp geben, wie ich prinzipiell vorgehen muss? Oder gibt es vielleicht andere Bibliotheken oder Tools, die mir besser weiterhelfen können?

VG!

16.835 Beiträge seit 2008
vor 4 Jahren

Laut Readme des Links von Dir kann Scrapysharp mit Cookies für Anmeldungen umgehen.
Musst halt agieren wie ein Browser.

U
UK17 Themenstarter:in
3 Beiträge seit 2019
vor 4 Jahren

Ja, aber wie agiere ich wie der Browser?

Ich habe mal als Bild angehängt, was der Browser beim Aufruf der Seite als Cookie anzeigt.

ScrapySharp stellt eine Methode mit folgender Signatur zur Verfügung:

void SetCookies(Uri cookieUrl, string cookiesExpression);

Ich komme aber nicht darauf, was ich dieser Methode in meinem Fall übergeben muss.

16.835 Beiträge seit 2008
vor 4 Jahren

Der Cookie wird gesetzt: beim Login.
Den musst Dir holen und wiederverwenden. Der HttpClient macht das nicht automatisch.

U
UK17 Themenstarter:in
3 Beiträge seit 2019
vor 4 Jahren

Der Cookie wird gesetzt: beim Login.
Den musst Dir holen und wiederverwenden. Der HttpClient macht das nicht automatisch.

Das dachte ich mir auch schon.

Aber wenn ich die Cookies nicht ignoriere, erhalte ich schon beim Versuch die o. g. Seite (URL=https://www.dfbnet.org/spielplus/login.do) aufzurufen - also noch vor Eingabe der Benutzerdaten - eine CookieException "Fehler beim Analysieren des Cookieheaders für URI https://www.dfbnet.org/." mit der InnerException "Der "Path"="/spielplus"-Teil des Cookies ist ungültig."
Ignorieren darf ich die Cookies doch sicher auch nicht!?

Und wenn ich es irgendwie hinbekäme mich einzuloggen: Wie könnte ich mir dann den Cookie holen...?
Wie lautet genau die URL? https://www.dfbnet.org/spielplus/login.do oder einfach https://www.dfbnet.org oder wie?
Und wo sehe ich den Namen des Cookies? Ist das z. B. JSESSIONID

Wie gesagt: Ich bin in Sachen Web-Technologie nicht so vertraut...

16.835 Beiträge seit 2008
vor 4 Jahren

Dann mach dich auch mit HTTP vertraut 😃
Der Login wird vermutlich über ein Formular erfolgen, das via HTTP Post an eine gewisse URL geschickt wird.
Wenn der Login erfolgreich ist bekommst du einen Cookie.
Das kannst du auch alles im Browser prinzipiell nachvollziehen.

Genau das musst du auch mit deinem Tool machen:
HTTP Post auf die URL mit den Credentials. Wie letztere übertragen werden müsste man sich im Traffic zB via Chrome Network Tab in den Developer Tools anschauen.
Und im Response des Requests sollte dann der Cookie stecken.

W
872 Beiträge seit 2005
vor 4 Jahren

Ich würde mir an Deiner Stelle mal Fidler ansehen - es gibt da auch Extensions, die automatisch den C# Code zum Recording aufzeichnen, um schnell ein Codegerüst zu bekommen.