Was kostet die Entwicklung eines prof. Webscrapers?
Ich frage für einen Kumpel, der sowas machen möchte und keine Ahnung hat wo er anfangen soll und wieviel Geld sowas kostet.
Also was ich meine ist die Entwicklung einer Art Hochleistungs - Anwendung, die z.b auf Selenium läuft, mit der man eine sehr große Zahl (Millionen?) an beliebigen URL's in einer Stunde durchscrapen kann. Wir haben auf Fiverr ein paar Leute gesehen, die was in der Richtung sehr günstig anbieten, aber hab leider keine Ahnung ob das legal ist, wer dort seriös ist und was in der Richtung angemessene Preise sind.
Wer hat zufällig Erfahrung mit dem Thema oder irgendwelche Tipps?
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.
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...
- https://knowledge.hubspot.com/de/seo/prevent-content-from-appearing-in-search-results
- https://www.blograusch.de/indexierung-von-webseiten/
...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.
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.
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...🥱
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:
im Quelltext 1n Zeile 219:
und im html-Parser von Powershell unter den .Links -Objekten die hier:
...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...
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...?
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.
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?
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.