Scraping von Artikelpreisen aus Onlineshop

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
PythonsPalace
User
Beiträge: 12
Registriert: Freitag 9. September 2016, 09:58

Hallo,

ich bin auf der Suche nach einem Tool, das in regelmäßigen Abständen die aktuellen Preise für eine Reihe von Produkten auf einer Onlineshop-Plattform abrufen kann. ich muss eine Artikelnummer in ein Suchfeld eingeben und mir dann die gefundene URL ausgeben lassen.

Ich habe bereits erste Versuche mit BeautifulSoup und Selenium gemacht; beides schöne Programme, aber irgendwie doch nicht das richtige, oder ich habe nicht den richtigen Zugang gefunden...? Ich habe hier mehrere Tausend Artikel zu checken, hat jemand einen Hinweis für mich?

Besten Dank von einem Python Newbee...
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

Requests und BeautifulSoup wären der richtige Ansatz für eine individuelle Lösung. Wenn du es etwas abstrakter möchtest und vielleicht schon XPATH oder CSS beherrschst, wäre Scrapy eine gängige Alternative.
PythonsPalace
User
Beiträge: 12
Registriert: Freitag 9. September 2016, 09:58

Hallo, danke für dein Feedback.
BS bringt im Grunde genommen schon, was ich brauche; wenn ich eine brauchbare url mitliefere, z.B. eine Kategorieseite mit 35 Artikeln, kann ich die dort aufgelisteten Links anwählen und bestimmte Inhalte der Produktseiten per CSS-Selektor mit BS auslesen. Soweit so gut, kann ich so machen, die Bearbeitungsschritte liegen dann bei ca. 30-70 Artikeln pro Scrape.

Nun habe ich aber einen Katalog mit tausenden von Artikelnummern, wo mir die vorgegebenen Kategorien nichts mehr nützen.
Also müsste ich jedesmal:

1. das Suchfeld anspielen und Art.Nr. eingeben,
2. zu der ausgegebenen einzelnen Produkt-URL navigieren
3. Inhalte mit BS auslesen.
4. Produkt-URL verlassen und zur Ausgangsseite mit Suchfenster zurückkehren

Das müsste ich jetzt tausendfach wiederholen, und genau bei dieser Skalierbarkeit hakt's.

Danke für eure Unterstützung!
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Das ganze sollte sich sehr gut mit asyncio o.ä. parallelisieren lassen und dann passt es auch mit der Geschwindigkeit. Scrapy würde dies sicherlich auch tun.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@PythonsPalace: Wenn Du tausende Artikel abfragen willst, solltest Du Dich mit dem Seitenbetreiber in Verbindung setzen, ob dies mit den Nutzungsrechten für diese Seite vereinbar ist und ihn fragen, ob er eine API für diese Abfragen anbietet. Heutzutage beruhen fast alle Seiten auf solch einer API, die per Javascript bedient wird. Und das was Javascript auf der Seite macht, mußt Du dann in Python nachprogrammieren. Normalerweise reicht dafür requests und ein JSON- bzw. XML-Parser. Selten, dass man tatsächlich in HTML-Code nach Informationen suchen muß.
PythonsPalace
User
Beiträge: 12
Registriert: Freitag 9. September 2016, 09:58

besten Dank für alle eure Antworten!
PythonsPalace
User
Beiträge: 12
Registriert: Freitag 9. September 2016, 09:58

Hallo,

... noch mal eine Nachfrage: wenn ich vom Shopbetreiber nun eine API anfordere, bekomme ich dann eine einzelne API, die alle für mich interessanten Artikel enthält? Oder bekäme ich dann eher "Kategorie-APIs" und müsste dann einzelne Artikel selbst identifizieren?
:K Need advice. Danke!
BlackJack

@PythonsPalace: Woher sollen *wir* denn wissen was für eine API es bei einem Shop gibt den wir nicht mal kennen und der vielleicht die API auch nur auf Anfrage verrät, sie also auch nicht-öffentlich sein könnte‽ Und vielleicht hat er auch gar keine API. Oder mehrere. Und vielleicht möchte er sie *Dir* auch gar nicht zur Verfügung stellen. Oder nur mit Auflagen oder gegen Geld.
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

PythonsPalace hat geschrieben:wenn ich vom Shopbetreiber nun eine API anfordere, bekomme ich dann eine einzelne API, die alle für mich interessanten Artikel enthält? Oder bekäme ich dann eher "Kategorie-APIs" und müsste dann einzelne Artikel selbst identifizieren?
Nur damit es keine Missverständnisse gibt: Eine API ist eine Schnittstelle, mit der bestimmte Informationen abgefragt werden können - hier z.B. vom Server. So wie du es schreibst, klingt das mehr nach vorgefertigten Paketen mit Datensätzen. Das ist aber nicht gemeint. Die Datensätze holst du dir selber erst durch den Einsatz der besagten API. Wenn du so willst, dann verleiht dir die Kenntnis der benötigten API sozusagen das Wissen über die Sprache deines Informationsgebers. Was du dann damit abfragetechnisch anstellst, bleibt dir überlassen.
PythonsPalace
User
Beiträge: 12
Registriert: Freitag 9. September 2016, 09:58

... na dann weiss ich doch jetzt Bescheid. Danke für die Antwort.
Antworten