Preisabfragen meines Großhändlers

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
Kalysto
User
Beiträge: 117
Registriert: Freitag 14. April 2017, 15:28

Hallo zusammen,

Ich habe eine Frage ob das möglich wäre was ich vor habe.

Ich habe 2 Großhändler:
Moster: https://imgur.com/YUWOXbi
Rexel: https://imgur.com/uHwoU5Z

Von diesen möchte ich nun jeweils meinen Einkaufspreis ausgeben lass und in meine MYSQL DB eintragen..
Ich muss mich aber mit meinen Daten des jeweiligen Großhändlers anmelden sodass ich meine Preise erhalten würde.

Ginge so etwas ?
Und wäre wer so nett mir dabei zu helfen ?

Danke euch schonmal im Voraus!
Benutzeravatar
sparrow
User
Beiträge: 4540
Registriert: Freitag 17. April 2009, 10:28

Irgendwelche Bildchen helfen da nicht weiter.
Man kann es dir auch nicht pauschal beantworten. Es gibt Methoden, sich gegen das automatisierte Abrufen von Daten zu schützne. Dann wird dein Vorhaben schwer bis unmöglich.
Und von "ja geht problemlos" bis "nein" gibt es jede Facette, je nach Aufbau und eingesetzter Technik der Webseite.
Kalysto
User
Beiträge: 117
Registriert: Freitag 14. April 2017, 15:28

Und wie „startet“ man so etwas ?
Einen Aufruf mit Kundennummer und Passwort Authentifizierung?
Benutzeravatar
snafu
User
Beiträge: 6873
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Such mal nach dem Stichwort Selenium. Das hat ist für viele solcher Aufgaben ein bewährtes Mittel. Du navigierst damit durch den Login bis zur gewünschten Seite und kannst dann zB mittels CSS Selector das passende HTML-Element für die Preisinfos abgreifen und davon den entsprechenden Text rausziehen.
Kalysto
User
Beiträge: 117
Registriert: Freitag 14. April 2017, 15:28

Danke dir danach werde ich einmal schauen 👍
paddie
User
Beiträge: 103
Registriert: Donnerstag 11. Oktober 2018, 18:09

Bei Moster (die nutzen den Fegime Online-Shop) würde es mit Selenium funktionieren. Da hab ich was ähnliches schonmal zum Abgleich Produk-EAN gebastelt. War allerdings wirklich nur was ganz schnelles, wo garantiert hier jeder die Hände überm Kopf zusammenschlägt ;-).
imonbln
User
Beiträge: 191
Registriert: Freitag 3. Dezember 2021, 17:07

Wie wäre es bei beiden einfach mal höflich zu fragen, ob Sie eine API haben und wenn ja, dann diese verwenden.

https://moster.elektro-online.de/e-busi ... nnect.html macht hier sogar Werbung, dass sie da offen sind.

Bei Rexel überlasse ich es dir, das in Erfahrung zu bringen.

Sollten die keine API haben lautet das Schlagwort webscraping, eine Disziplin in der Python sehr gut ist (auch ohne Selenium)
paddie
User
Beiträge: 103
Registriert: Donnerstag 11. Oktober 2018, 18:09

OH, das mit der Schnittstelle seh ich auch jetzt zum ersten Mal. Mal nachfragen ob es da auch was ähnliches für Lieferanten gibt. Bis letztes Jahr gabs auf jeden Fall noch nichts, da mussten wir noch Excel-Listen schicken :-/
Benutzeravatar
snafu
User
Beiträge: 6873
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

imonbln hat geschrieben: Montag 28. März 2022, 10:17 Sollten die keine API haben lautet das Schlagwort webscraping, eine Disziplin in der Python sehr gut ist (auch ohne Selenium)
Reines Webscraping hilft nur nichts, wenn man sich vorher einloggen muss.
LukeNukem
User
Beiträge: 232
Registriert: Mittwoch 19. Mai 2021, 03:40

snafu hat geschrieben: Montag 28. März 2022, 11:51 Reines Webscraping hilft nur nichts, wenn man sich vorher einloggen muss.
Für BeautifulSoup und Scrapy hab' ich das schon gemacht, wo ist das Problem?
Benutzeravatar
snafu
User
Beiträge: 6873
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Nee, stimmt schon. Scraping ist ja mehr als nur das Parsen des Seiteninhalts. Aber nur mit bs4 könnte man jetzt keinen Login machen. Das hab ich gemeint.
Kalysto
User
Beiträge: 117
Registriert: Freitag 14. April 2017, 15:28

LukeNukem hat geschrieben: Montag 28. März 2022, 22:50
snafu hat geschrieben: Montag 28. März 2022, 11:51 Reines Webscraping hilft nur nichts, wenn man sich vorher einloggen muss.
Für BeautifulSoup und Scrapy hab' ich das schon gemacht, wo ist das Problem?
Und wie hast du das gemacht ?
Ich scheitere mit bs4 schon am Login...
Alles was ich im Netz finde fürs Login funktioniert nicht... 😭
Das Login dort wurde mit requests gemacht was in meinem Fall nicht geht.
Benutzeravatar
sparrow
User
Beiträge: 4540
Registriert: Freitag 17. April 2009, 10:28

Warum geht denn requsts nicht? Dss ist ja nun mal def übliche Weg, wie Daten an den Webserver gehen.
Benutzeravatar
snafu
User
Beiträge: 6873
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Kalysto hat geschrieben: Samstag 2. April 2022, 07:35 Das Login dort wurde mit requests gemacht was in meinem Fall nicht geht.
Kannst du requests in deiner Umgebung gar nicht erst installieren oder gibt es Probleme bei der Verwendung?

Evtl können wir dir helfen, aber dann brauchen wir konkretere Angaben dazu...
Kalysto
User
Beiträge: 117
Registriert: Freitag 14. April 2017, 15:28

snafu hat geschrieben: Samstag 2. April 2022, 07:52
Kalysto hat geschrieben: Samstag 2. April 2022, 07:35 Das Login dort wurde mit requests gemacht was in meinem Fall nicht geht.
Kannst du requests in deiner Umgebung gar nicht erst installieren oder gibt es Probleme bei der Verwendung?

Evtl können wir dir helfen, aber dann brauchen wir konkretere Angaben dazu...
Das installieren klappt ohne Probleme.
Das Problem ist das mit requests die Authentifizierung beim Großhändler nicht klappt bs4 gibt mir nur die Login Seite aus nicht die eigentliche Materialseite wo ich hin möchte. (Wo dann sogesehen die Preise wären)
Benutzeravatar
sparrow
User
Beiträge: 4540
Registriert: Freitag 17. April 2009, 10:28

Ist dir klar, wie HTTP funktioniert?
"Funktioniert nicht" und in Prosa verpackte Fehlerbeschreibungen helfen nicht.

Neu musst schon die Kommunikation mit der Seite Debugger und schauen, was beim Login passiert und welche Ibfornationen du von Webserver erhält um mitzuteilen, dass du authentifiziert bist.
Benutzeravatar
snafu
User
Beiträge: 6873
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Und um sich das zu ersparen, hatte ich am Anfang Selenium empfohlen...
Benutzeravatar
DeaD_EyE
User
Beiträge: 1244
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Selenium führt auch JavaScript aus. Das ist zwar langsamer, aber für Leute, die nichts von JavaScript wissen, leichter zugänglich.

Ich habe letztens versucht, mich via Python mit meinem Vodafone Plaste Router zu verbinden. Nach ca. 5 Minuten musste ich feststellen, dass ein Javascript sich die Inhalte abholt und auch das Passwort verschlüsselt. Wenn man das mit bs4 macht, muss alles selbst machen. Ich müsste mir erst eine neue Session holen und danach meine Credentials mit der Session (die verwenden RC4 soweit ich weiß) via POST-Request an eine andere Route senden. Das ist Selenium einfacher zu verwenden und ich muss mir nicht den Kopf darüber zerbrechen, was im JavaScript gemacht wird, damit ich das mit Python replizieren kann.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
LukeNukem
User
Beiträge: 232
Registriert: Mittwoch 19. Mai 2021, 03:40

Kalysto hat geschrieben: Samstag 2. April 2022, 07:35
LukeNukem hat geschrieben: Montag 28. März 2022, 22:50 Für BeautifulSoup und Scrapy hab' ich das schon gemacht, wo ist das Problem?
Und wie hast du das gemacht ?
Ich scheitere mit bs4 schon am Login...
Alles was ich im Netz finde fürs Login funktioniert nicht... 😭
Das Login dort wurde mit requests gemacht was in meinem Fall nicht geht.
So ein Login erfolgt üblicherweise durch Übermittlung von Credentials (Logindaten) und führt üblicherweise entweder zu einem Erfolg oder zu einem Mißerfolg. Betrachten wir das einmal genauer...

Credentials werden heutzutage eher selten über HTTP Basic Auth oder häufiger mit einem HTTP POST Request eines Formulars übergeben. Welche Methode benutzt wird und wie, insbesondere beim POST-Request, die Daten dabei übergeben werden, findet man heraus, indem man sich die Website genauer anschaut -- den Seitenquelltext, die Debugging-Werkzeuge des Webbrowsers oder einen -- entsprechend konfigurierten Packet-Sniffer, heute in Tagen von HTTPS gerne auch über einen MITM-Proxy zum Brechen der TLS-Verschlüsselung. Eher selten werden die Credentials aber auch über Java- bzw. ECMAScript übertragen, auch das läßt sich anhand der vorher genannten Möglichkeiten genauer herausfinden. Wie dem auch sei: der wie auch immer geartete Request bekommt vom Webserver üblicherweise eine Antwort, durch deren Auswertung man herausfinden kann, ob der Login erfolgreich war oder nicht... ;-)

Webseiten, die einen Login erfordern, brauchen zudem einen Mechanismus, um den eingeloggten Benutzer wiederzuerkennen. Meistens ist das eine Session-ID, die vom Webbrowser als Cookie gespeichert und dann bei jedem Aufruf einer URL der Domain automatisch mitübertragen wird. Ich habe auch schon andere Mechanismen wie etwa die Übertragung mithilfe des URL und sogar über den Domainnanem gesehen, aber das ist ausgesprochen selten und das letzte Mal, als ich so etwas gesehen habe, ist schon sehr lange her.

Was die Sache mit dem SessionID-Cookie angeht, so hat Scrapy dafür eine eigene Middleware, die den "Set-Cookie"-Header erkennt und den so gesetzten Cookie automatisch in alle Folgereqests zur betreffenden Domain einbaut, ähnliches gilt für Selenium, das ja im Wesentlichen einen Webbrowser fernsteuert. Mit BeautifulSoup und requests mußt Du Dich natürlich selbst darum kümmern. Um so etwas zu realisieren, sind Grundkenntnisse in HTML, HTTP und ECMAScript allerdings dringend angeraten.

Einfacher wird es, wenn Dein Shop-Anbieter Dir eine anständige API anbietet, etwa über REST. Viele Shopsysteme und Shops machen das. Ob Dein Anbieter so etwas verfügbar und aktiviert hat, solltest Du bei ihm erfragen; wenn er etwas Entsprechendes anbietet, wird er Dir vermutlich auch eine Dokumentation dafür liefern oder zumindest auf eine verweisen können. Viel Glück!
Antworten