Was kostet die Entwicklung eines prof. Webscrapers?

3 Antworten

mit der man eine sehr große Zahl (Millionen?) an beliebigen URL's in einer Stunde durchscrapen kann.

Womit dann jegliche Argumentation absurd wird, mit der man das als Privatnutzung bezeichnen könnte und folglich das Urheberrecht verletzt.
Da würde ich mir an der Stelle deines Kumpels zunächst einmal Gedanken darüber machen, wie er die vielen Genehmigungen der Webseitenbetreiber bekommen will, damit er das legal machen kann und keine Klage wegen Urheberrechtsverletzungen ans Bein genagelt bekommt. Denn dann wird der Punkt "wieviel Geld sowas kostet" ganz schnell mit Anwaltskosten etc. ziemlich teuer.

Daneben ist wohl die technische Seite bei einem solchen Einsatz letztlich der begrenzende Faktor. Was der verwendete Rechner an Datenmengen in der vorgegebenen Zeitspanne nicht speichern kann, wirst du von der "Millionen?" runter rechnen müssen.


Rexxxxx 
Fragesteller
 18.01.2024, 00:09

Das hieße dann aber, dass sämtliche Suchmaschinen (Google eingeschlossen) illegal sind? Denn ich kann mich nicht daran erinnern jemals Lizenzgebühren für die Nutzung meiner Daten erhalten zu haben.

0
Erzesel  18.01.2024, 11:22
@Rexxxxx
Denn ich kann mich nicht daran erinnern jemals Lizenzgebühren für die Nutzung meiner Daten erhalten zu haben.

Ist doch ne win-win Situation Goggle findet Deine Daten/ Webseite automatisch und zeigt sie (irgendwo) in den Suchergebnissen.

Wenn Du nicht möchtest, das Suchmaschinen auf Deine Daten zugreifen kannst Du den Suchmaschinen mitteilen, das "Robots" nicht erwünscht sind...

...allerdings wird es dadurch schwerer dein Angebot zu finden.

Diese Ausschlussregelung wurde festgelegt, da eine explizite Zustimmung für Suchmaschinen wesentlich mehr Aufwand erfordert.die meisten Webseiten verfügen aus Unkenntnis der Seitenbetreiber nicht über die genannten Tags/Dateien und würde bei einer Zustimmungsregelung von jeglicher Indexierung ausgeschlossen...

Also einfach Nein "sagen" und und gut is...

Wenn sich en Scrapper nich an ein "Nein" hält, so muss dessen Betreiber mit den rechtlichen Kosequenzen leben.

0

warum nicht einfach selber machen? so einen scraper könnte man ja vermutlich mittlerweile einfach mit KI-Unterstützung schreiben, dafür ist das banal genug.

Beim skalieren müsste man es halt entsprechend hosten.

Legal und seriös kann ich nicht einschätzen. Verstehe auch nicht was für daten gesammelt werden sollten.


Rexxxxx 
Fragesteller
 17.01.2024, 23:17

also einfach Chat GPT fragen?

0
aberli  17.01.2024, 23:19
@Rexxxxx

Jo, versuch ists wert, kannst ja davon ausgehend noch verbessern.

wenn das so skalliern soll könnte es aber von vorteil sein eine spezielle libary für massenabfragen zu verwenden oder was anderes als python kp

0
Rexxxxx 
Fragesteller
 17.01.2024, 23:26
@aberli

Welche Library wäre da geeignet z.b?

0
Erzesel  18.01.2024, 10:30

naja die Wahl der Codeobjekte, welche hinter den bunten Bildern im Browser stehen bekommt bisher keine KI hin...

KI könnte vielleicht den Rumpf eines solchen Programms und nötige Funktionen bereitstellen. Gezielt bestimmte Filter für spezielle Objektgruppen festzulegen dürfte nicht klappen. Das was ein Mensch auf dem Bildschirm sieht, ist etwas völlig anderes, als das was eine Codeanalyseprogramm/Parser "sieht". (und nichts anderes bildet den Kern eines Webscrappers)

Was mich betrifft, so finde ich es ineffizient einen Frage an eine KI zu formulieren.

In der gleichern Zeit programmiere ich den ganzen Ablauf von Hand...🥱

0

Einen universellen Webscrapper zu "bauen" der automatisch mit allem zurecht kommet ist nahezu unmöglich. Jede Webseite ist anders programmiert. Es gibt sogenannte Universalscrapper, diese bieten jedoch lediglich den Rahmen um spezialisierte Scripte/Settings für einzelne Webseiten auszuführen.

(das bekomme ich auch mit ein Paar Zeilen Powershell hin) 🥱😅

Irgendwie scheinst Du nicht wirklich zu wissen wie Webscrapping funktioniert.

Der Webscrapper lädt den Quelltext der Webseite herunter. Da viele Elemente von Webseiten dynamisch angelegt sind, müssen eventuell auch enthaltene Scripte ausgeführt oder automatisch Post-Daten oder Subseitenaufrufe an den Server gesendet werden .

Was danach im Speicher steht, wird geparsed und in seine Bestandteile/Objekte zerlegt und diese wiederum auf bestimmte "Aufällige" Merkmale im enthaltenen Text oder definierten Objekten untersucht.

Zu "endecken" was die nötigen Merkmale sind, welche einen gemeinsamen Faktor der zu ermittelnden Zielobjekte ausmacht , benötigt eine ganze Menge Erfahrung und etwas "Intuition". Will man mit der groben Keule von der aufgerufenen Webseite lediglich alle Bilder herunterladen, genügt es einfach mach den entsprechenden -img-Tags zu suchen und die Zieladressen zu filtern. (aber dann muss man auch mit jeder Menge Müll rechnen)

komplexer wird die Sache schon, wenn die Hauptseite via Menüs auf Subseiten verweist.

Hier mal eine kleine Powershell-Demo für einen Massen-Downloader der gezielt aus einer komplexe Webseite (samt Subseiten) lediglich das jeweils größte Bildformat herunterlädt.

$progressPreference = 'silentlyContinue'
$DestBasePath=$pwd.path +'\Desktopography2'

Write-Host Parse "http://desktopography.net"
$Exhibitions=(Invoke-WebRequest "http://desktopography.net").Links|
    Where-Object{$_.innerText -like '20*'}|
    Sort-Object -property innerText -unique |
    Select-Object href,@{n='Year';e={$_.innerText}}
$Exhibitions |ft 

$Exhibitions|
    ForEach-Object{
        $Year=$_.Year;
        $Null = md "$DestBasePath\$Year" -ea sil  # erzeuge falls nötig Zielordner
        # ermittle die Adressen der einzelnen Bildseiten der  Ausstellungen
        (Invoke-WebRequest $_.href).links|
            Where-Object{$_.class -eq  'overlay-background'}|
            ForEach-Object{
                Write-Host "found Picture: $($_.href)  from Year: $Year" -fo green
                #...und dort Namen des jeweils größten  16:9 Bildformats 
                (Invoke-WebRequest $_.href).links|
                    Where-Object{$_.class -eq  'wallpaper-button'}|
                    Sort-Object -property innerText -Descending|
                    Select-Object -first 1|
                    ForEach-Object{
                        Write-Host ...download to:  $DestBasePath\$Year\$($_.download)   -fo mag
                        Invoke-WebRequest $_.href -OutFile "$DestBasePath\$Year\$($_.download)"
                    }
            }
    }
Pause

Die geparste Webseite hat eine recht klare Struktur desshalb gestaltete sich die Wahl der Filter relativ einfach...

PS: Rechtlich ist die Sache nicht ganz fair, allerdings macht er auch nichts anderes, als man mit 1600 Klicks in ein paar Stunden auch von Hand hinbekäme. Zumal die Bilder zum Download bestimmt sind.

hier nur mal die Entwicklungsschritte für die ersten 9 Zeilen:

Bild zum Beitrag

im Quelltext 1n Zeile 219:

Bild zum Beitrag

und im html-Parser von Powershell unter den .Links -Objekten die hier:

Bild zum Beitrag

...danach werden die verlinkten Subseiten (und deren Subseiten geladen und wiederum auf gemeinsame Merkmale untersucht.

Kannst ja mal versuchen selber von Hand nachzuvollziehen was das Powershellscript voll automatisch auswählt. Das ist bei dieser Seite völlig simpel und ich benutze die Demo gern, weil sich die Seite seit vielen Jahren nicht verändert hat.

Etwas anders verhält sich die Sache bei irgendwelchen Shopseiten/etc.. Deren Objecte / Bezeichner /Textelemente werden bewusst sehr dynamisch gestaltet und können sich mit jedem Aufruf komplett verändern. Da hat man weder mit 30 Zeilen noch 3000 eine Chance!

Programme wie JDownloader verfügen intern über einen einigermaßen flexiblen Linkscrapper dieser erfährt jedoch fast tägliche Updates, um mit Änderungen auf bekannten Warez-Seiten Schritt zu halten. (solche Updates entstammen jedoch der Handarbeit einer Community)

Webscrapper sind eine "arbeitsintensive" Alternative zu fehlenden oder kostenpflichtigen APIs. Diese können jedoch nur auf ein spezialisiertes Objekt angepasst werden.

noch einige Worte zu ChatGPT & Co :

Auf die Idee eine KI nach Code-Gemeinsamkeiten suchen zu lassen sind auch andere schon gekommen, allerdings mit mäßigem Erfolg... Bisherige KI können Aktionen/Abläufe in einer Bedienoberfläche nicht auf den Code dahinter zurückführen.

Nichts geht über ein geschultes "Code-Auge" und Erfahrung... und ein paar Werkzeuge...

 - (programmieren, IT, PHP)  - (programmieren, IT, PHP)  - (programmieren, IT, PHP)

Rexxxxx 
Fragesteller
 20.01.2024, 13:41

Danke für die ausführliche Antwort. Also mein Kollege hat schon einen Scraper, der die Daten theoretisch auslesen kann die er benötigt. (in erster Linie Metadaten wie Titel, Hashtags und Verlinkungen / Id's, die man direkt aus dem Seitenquelltext ziehen kann) Das funktioniert bislang auch ohne Probleme. Die Sache ist nun, dass es eine gigantische Liste von URL's gibt (alle von der gleichen Webseite), die regelmäßig abgearbeitet werden sollen. Und da wird jetzt halt eine etwas leistungsfähigere Anwendung benötigt, welche im Idealfall die komplette URL-Liste mit möglichst hoher Geschwindigkeit nacheinander abarbeiten soll und die geparsten Daten in eine neue DB / Tabelle schreiben soll...?

0
Erzesel  20.01.2024, 17:27
@Rexxxxx
eine gigantische Liste von URL's gibt (alle von der gleichen Webseite), die regelmäßig abgearbeitet werden sollen

...und natürlich noch schnell...

Dazu fällt mir neben rechtlichen Problemen in erster Linie der Flaschenhals "Internetverbindung" ein.

Kein Zweifel du magst vielleicht eine flotte Glasfaser-Leitung haben, und auch der Server dürfte sein bestes tun.

Wenn Du mein obiges Beispiel mal ausprobiert hast, dürfte aufgefallen sein, dass dies recht gemütlich zu Werke geht.

Keine Frage, ich hätte die Nummer (mit 3..4 Zeilen mehr) auch paralellisiert ausführen können. Dass hätte die Sache nicht wesentlich beschleunigt. Es macht keinen wesentlichen Unterschied ob man 10 Dateien nacheinander mit jeweils 400MBit lädt, oder parallel mit jeweils 40MBit, das Programm wartet auf die Dateien. Das extrahieren der gewünschten Daten aus den Datein benötigt Millisekunden.

( Ich hatte sogar bei einem Scrapper, für Preislisten eines namhaften "Parfümeurs" das paradoxe Verhalten, dass die "schlaue" Idee, die Daten einer Seite zu verarbeiten wärend die nächste lädt, langsamer war, als die sequenzielle Abarbeitung. Der laufzeitaufwand , neue parrallele Threads/Jobs einzurichten und die ermittelten Daten wieder von diesen "einzusammeln" , kann bei kleinen Datenmengen (unter ca 10..20Tsd. Zeilen/"Datensätzen", was bei Webseiten durchaus normal ist) länger sein , als diekt zu Werke zu gehen. )

Hinzu kommt, dass paralleler widerholter Zugriff in (unnatürlich) kurzer Folge auf Webseiten/Datein sehr schnell als "unrechtmäßig" behandelt werden. (...und wenn der Server dir eine Abuse auferlegt hast Du garnichts)

Da mir nicht bekannt ist, welche Seite Du mit Deinem Scrapper "vergewaltigen" möchtest und welcher Daten Du (in solchen Massen) habhaft werden möchtest, kann ich nicht festlegen, ob die Sache nicht den legalen Rahmen sprengt oder wie man optimieren könnte .

Ein guter Webscrapper wird auf die jeweilige Situation angepasst und verrichtet sein Werk, bis es dem Seitenbetreiber zu "bunt" wird und er den Code seiner Seite ändert. Im ungünstigsten Fall bekommst Du Post von seinem Anwalt🥵 (und ne fette Unterlassungsklage nebst einer Kostenaufstellung)

Wie gesagt, der langsamste Part am Scrappen ist der Download der Seiten. Das spielt es keine Rolle, welches Programm man verwendet. Nahezu alle Programme greifen dafür auf die gleichen Systembibliotheken zu.

Was die Verarbeitung angeht, kommt es darauf an, wie flexibel der Code sein soll. Ein Powershell-Script oder Python-Code sind wesentlich leichter an individuelle Gegebenheiten anzupassen als ein compiliertes Programm in C++,C# oder Java. Dabei ist eine Anwendung von der Stange in der Regel am "sperrigsten".

Wenn ich eine Präferenz für ein "Programm" festlegen müsste, dann Powershell. Dessen Cmdlets liefern bereits "vorverdaute" Objekte, die man lediglich durch die Pipelines schleust, bis das gewünschte übrigbleibt.

0
Rexxxxx 
Fragesteller
 20.01.2024, 18:44
@Erzesel

Also die Webseiten die gescraped werden sollen sind ausschließlich große Webdienste und Datenkraken, die selbst gerne mit ihren Robots alles abscrapen was nicht bei 1 auf dem Baum sitzt, massenhaft Regeln brechen und umfangreiche Nutzerdaten (bis ins intimste Privatleben) sammeln. Post vom Anwalt halte ich für SEHR UNWAHRSCHEINLICH weil ich Leute kenne, die das schon seit mehr als 1 Jahrzehnt machen und das sogar krass übertreiben. Abuse oder IP-Sperren lassen sich leicht umgehen...

Aktuell ist es so, dass das Script für 1 Seite immer so 30 Sek braucht und dann etwa 100-500 Einträge zusammenkommen. Das ist momentan noch etwas langsam und lässt sich garantiert deutlich optimieren?

0