Wie prüft man flexibel auf diverse/unterschiedliche Werte? (Oder alternativer Ansatz)

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
chris8080
User
Beiträge: 10
Registriert: Freitag 8. Mai 2015, 02:07

Hallo,

ich versuche via Scrapy Daten von diversen Websites zu scrapen.
Die Optionen die ich habe sind entweder die Daten per XPath oder CSS zu extrahieren (oder den gesamten HTML code zu analysieren und die Daten mit .. ? zu extrahieren).

Von den Kategorie Seiten in Webshops hätte ich gern:
- Produktname
- Link
- URL zum Bild
- Preis

Für eine oder wenige Domains, kein Problem - wenn es für viele Domains (sagen wir 80 - 90% aller häufig vorkommenden Shops + Templates) funktionieren soll, deutlich schwerer.

Eine Option die mir als erstes einfällt ist über eine große Menge:
if elif
Strukturen alle möglichen Optionen abzufangen / zu testen.
Sicher mit Aufwand machbar und recht unelegant.

Wenn man sich das HTML von Kategorieseiten anschaut, dann sieht das ja meist vergleichbar aus:
Meist ein vielfaches von drei, vier oder fünf an li, div oder a tags, jeweils mit URL, Preis, kurzem Text und Bild / Bild URL.
Man könnte also erst Tags mit Statistiken versehen pro Seite und dann hätte man Wahrscheinlichkeiten, bei welchen tags es sich um den Produkt HTML "Element Ast" handelt.

Sicher könnte man auch mit einem Headless Browser screenshots erstellen und diese mit dem HTML vergleichen und dann über Bilderkennung (z. B. den Text unter den Produktbildern als Anhaltspunkt) dort etwas extrahieren.

Meine Fragen:
Fällt euch noch ein Weg ein den ich übersehen habe?
Welcher Weg erscheint für euch am einfachsten/praktischsten zu implementieren?
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Das praktikabelste ist es für jede URL zu speichern, welchem Schema sie folgt, und das auszuprogrammieren. Vielleicht gibt es bei vielen Seiten auch Gemeinsamkeiten. Kommt halt drauf an, welche Seiten Du im Blick hast.
chris8080
User
Beiträge: 10
Registriert: Freitag 8. Mai 2015, 02:07

Ja, das ist mehr oder weniger der Standardweg von Scrapy.
Das funktioniert prima für eine Domain oder auch 10 - 30.
Ich suche nach einer Option, wie man das (semi-) skalieren kann ohne das für jede Seite einzeln anpassen zu müssen.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Gibts nicht. Du kannst ein strategy pattern oder Ähnliches nutzen um die Struktur zu vereinheitlichen und gemeinsam nutzbares zu erhalten, um dann die Spezifika pro Seite abzuhandeln. Aber das war’s auch schon.
nezzcarth
User
Beiträge: 1636
Registriert: Samstag 16. April 2011, 12:47

Weiterhin existiert die Möglichkeit, hier mit heuristischen Methoden zu arbeiten, um relevante Infos in Webseiten zu finden und zu extrahieren. Da bewegt man sich dann aber schon eher im Bereich der Forschung und (nach meinem Kenntnisstand) gibt es dafür noch keine schlüsselfertigen Lösungen "für den Hausgebrauch".
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Aus eigener Erfahrung: Der Aufwand den es benötigt zu generalisieren, steht in keinem Verhältnis zu dem Aufwand der notwendig ist um einen Crawler für jeden Shop anzupassen. Letzteres ist bei brauchbarer Code Organisation (in Scrapy würde ich mindestens einen Spider pro Domain definieren) in Kombination mit einem generalisierten Datenmodel und ausnutzen von Gemeinsamkeiten zwischen Shops (viele sind sich tatsächlich recht ähnlich), mit relativ wenig aufwand machbar.

Die Regeln für "Wo finde ich den Preis?" etc. sind übrigens dein geringstes Problem. Wenn es darum wird nicht geblockt zu werden, bei matching usw. wird es erst richtig interessant und auch da ist es schwer um domain spezifische Logik herum zu kommen.

Wenn man nicht bereit ist viel Zeit (und Geld) kontinuierlich (Shops verändern sich auch mal...) in dieses Problem zu investieren, kann es sich lohnen diese Daten auch einfach einzukaufen. Ich glaub da ist man auch mit kleineren 6-stelligen Summen dabei.
chris8080
User
Beiträge: 10
Registriert: Freitag 8. Mai 2015, 02:07

__deets__ hat geschrieben: Sonntag 29. Dezember 2019, 14:21 Gibts nicht. Du kannst ein strategy pattern oder Ähnliches nutzen um die Struktur zu vereinheitlichen und gemeinsam nutzbares zu erhalten, um dann die Spezifika pro Seite abzuhandeln. Aber das war’s auch schon.
Vielen Dank für den Hinweis, so in der Richtung mache ich das jetzt.
Antworten