aus Website Daten automatisiert extrahieren

Apfelflasche

Newbie
Registriert
Jan. 2020
Beiträge
3
Hey zusammen,

ich würde gerne von einer Website Daten automatisiert extrahieren. Also zum Beispiel Aufrufzahlen einer Anzeige, die dann automatisiert in z.B. eine Exel Tabelle geschrieben werden.
Hat jemand eine Idee wie, bzw. womit das funktionieren könnte?

Danke an jede Hilfe
 
Wo stehen die Zahlen denn?
 
Technisch kein Problem. Aber rechtlich?
 
  • Gefällt mir
Reaktionen: cb_darkman
Da müsstest du uns schon etwas mehr Infos zur Idee und zu deinen Fähigkeiten geben...

Dafür gibt es in sehr vielen Sprachen entsprechende Lösungen... in welchen hast du denn bereits Erfahrungen gesammelt?
 
Ich habe eine Anzeige auf ebay und interessiere mich nun dafür, an welchen Tagen, wie viele Aufrufe generiert wurden. Das möchte ich nun nicht jeden Tag einfach abschreiben, sondern irgendwie automatisieren.
Habe bisher nur Java gemacht. Kann aber auch ein wenig Javascript..
Ergänzung ()

preadfish schrieb:
Technisch kein Problem. Aber rechtlich?
Warum sollte das rechtlich ein Problem sein, wenn ich von meiner Anzeige die Klicks extrahiere? Ist ja nur für meinen privaten Gebrauch. o.O
 
Ein normaler Ansatz wäre, einen Bot zu skripten, welcher - unter Beachtung einer robots.txt - den fraglichen Content zieht, parst und ggf. interpretiert.
Da Du das bei ebay machen möchtest, solltest Du Dich bei denen erkundigen, die haben für technisch weiterführende Lösungen AFAIK APIs, auf deren Nutzung Du möglicherweise angewiesen sein könntest (wegen Geschäftsbedingungen).
Ziehen kann man den Content auch einfach über ein bash-Script, etwa mit wget; dann kann man das resultierende HTML mit unendlich vielen Sprachen auseinanderpflücken und meinetwegen in eine Textdatei schreiben, eine CSV oder (mit einer entsprechenden Bibliothek) in XLS-Dateien - oder gleich in eine Datenbank, falls man Daten automatisiert weiterverarbeiten möchte.
Da Du Java kannst, mach das doch mit Java. Wüsste nicht was gegegen spräche.
 
Schau dir einfach Python an und da die Module Requests zum Abrufen der Daten und BeautifulSoup zum Parsen, oder wenn du ein Framework verwenden möchtest, Scrapy.
 
Wenn du schon Java kannst, dann bau ein Programm, das die URL aufruft und das HTML extrahiert z.B. mit Jsoup. Danach musst du dann nur noch die richtige Stelle im HTML finden, die Zahl parsen und fertig.

Auf der Jsoup Webseite steht auch schon ein Beispiel, wie's geht.
 
Apfelflasche schrieb:
Warum sollte das rechtlich ein Problem sein, wenn ich von meiner Anzeige die Klicks extrahiere? Ist ja nur für meinen privaten Gebrauch. o.O

Der Server den du kontaktieren möchtest gehört immer noch eBay, damit sind die der Ansprechpartner was du darfst und was nicht. Zugegeben, die Zugriffe werden denen in den Logs nicht mal auffallen - eine Kostenloskultur im Sinne von "Ist doch meine Anzeige, kann ich doch abrufen was ich will" rechtfertigt das jedoch nicht.
 
Phrasendreher schrieb:
Ein normaler Ansatz wäre, einen Bot zu skripten, welcher - unter Beachtung einer robots.txt - den fraglichen Content zieht, parst und ggf. interpretiert.
Da Du das bei ebay machen möchtest, solltest Du Dich bei denen erkundigen, die haben für technisch weiterführende Lösungen AFAIK APIs, auf deren Nutzung Du möglicherweise angewiesen sein könntest (wegen Geschäftsbedingungen).
Ziehen kann man den Content auch einfach über ein bash-Script, etwa mit wget; dann kann man das resultierende HTML mit unendlich vielen Sprachen auseinanderpflücken und meinetwegen in eine Textdatei schreiben, eine CSV oder (mit einer entsprechenden Bibliothek) in XLS-Dateien - oder gleich in eine Datenbank, falls man Daten automatisiert weiterverarbeiten möchte.
Da Du Java kannst, mach das doch mit Java. Wüsste nicht was gegegen spräche.
Hätte vielleicht dazu sagen müssen, dass es eine Anzeige auf ebay kleinanzeigen ist und somit die oben genannten APIs etc. nicht verfügbar sind. Das Problem ist nicht den content zu ziehen oder zu prasen sondern, dass dies automatisch jeden Tag passiert und dann automatisch in Exel reingeschrieben wird.

EIn Tool nur um bestimmte Parameter ein Webseite auszulesen habe ich schon gefunden. Da ich dies aber auch jedes Mal neu betätigen muss, wenn ich die Daten für den heutigen Tag sehen möchte, hilft mir das nicht weiter.

Danke erstmal für deine ausführliche Antwort
Ergänzung ()

Vielleicht stelle ich mein Problem nochmal genauer da:

Ich möchte von einer ebay-Kleinanzeigen Anzeige täglich und automatisiert die views in eine Exel Tabelle geschrieben bekommen.
Die Daten also solche zu extrahieren ist mit webscraper.io nicht schwer, allerdings fehlt da das automatisierte.
Ist es überhaupt möglich, eine Exel Tabelle automatisch zu erweitern. Kenne mich mit Exel leider überhaupt nicht gut aus.
 
Apfelflasche schrieb:
Da ich dies aber auch jedes Mal neu betätigen muss, wenn ich die Daten für den heutigen Tag sehen möchte, hilft mir das nicht weiter.

Dann baust du dir einen Timer außenrum, der den Code alle 24 Stunden ausführt.
Oder benutzt deine Windows / Linux / macOS Bordmittel, die das Programm alle 24 Stunden starten.
Geht natürlich nur, wenn dein Rechner an ist. Falls nicht, brauchst du einen Rechner, der immer an ist - oder anders gesagt: Miete dir einen Server.

Die ausgelesenen Daten in Excel, eine Textdatei oder Datenbank zu schreiben, sollte dann auch kein Problem mehr darstellen.

EDIT: Du kannst dir auch ein VBA Script schreiben, das direkt in Excel ausgeführt wird und dir Daten herunterlädt, ausliest und dann in eine Zelle schreibt.
 
Zuletzt bearbeitet:
HTML ist unbrauchbar.

Gut, wenns gar nicht anders geht, okay. Aber schau mal nach, ob es nicht irgendwelche APIs gibt, egal welcher Natur; kann JSON, XML, plaintext, sonstwas sein.

HTML kann man dann (und nur dann) verwenden, wenn es XHTML konform ist und kann es dann als XML interpretieren. Aber grad bei ebay mit user-generated content... meh. Seh ich schwarz.
 
Apfelflasche schrieb:
Warum sollte das rechtlich ein Problem sein, wenn ich von meiner Anzeige die Klicks extrahiere? Ist ja nur für meinen privaten Gebrauch. o.O
AGBs
Theorethisch solltest du die durch schauen und im Zweifel eine Erlaubnis einholen. Auf der anderen Seite ist es höchst unwahrscheinlich das sich eine Firma die Mühe macht wegen einem request pro Tag dem nach zu gehen.

Technisch nicht all zu kompliziert richtest auf dem Linux Server ein Cron job ein der täglich ein Skript startet was die Webseite crawlt (z.B. wget) und die Information (sollte immer an der gleichen Stelle stehen/einfaches Muster) dann zu einem CSV hinzufügt. Excel nimmt man eigentlich nicht für data logging aus guten Gründen.

Vermutlich hat ebay-kleinanzeigen auch eine API die für die Apps genutzt werden (scheinbar bekannt da es eine Windows phone app gab die keine Webseite war und nicht vom Webseitenbetreiber stammte).
 
@TE
Falls Du allerdings Pech hast, ist das von Dir gesuchte Datum garnicht Teil des HTML-Dokuments, sondern wird erst später/dynamisch per Javascript nachgeladen; dann könntest Du es möglicherweise im Browser sehen, aber nicht im Quelltext wiederfinden.

Hast Du Dir denn schon die Mühe gemacht, Deine Kleinanzeige im Browser-Quelltext anzusehen?
Falls ja und falls Du dort findest was Du suchst, dann könntest Du schon das Muster entwickeln, mit welchem Du dort heran kommst. Stichworte: awk/grep/sed/cut/Regex - das sollte irgendwann fast jedem Programmierer etwas sagen.
Falls die interessanten Daten nicht im Quelltext vorliegen, könnte man mit der Browser-Console (schon mal F12 probiert?) die XHR-Requests untersuchen (sofern vorhanden) und darin das Payload of interest suchen - mit ganz viel Glück gäbe es dann vllt. gar eine URL, die mit den richtigen Parametern aufgerufen gleich ausspuckt was Du haben willst.
Viel Glück!
 
r15ch13 schrieb:
Ist da nichts passendes dabei?
Schau da nach. Schon seit langem gibt es Webservices als REST API für sowas bei allen grossen Webseiten.
HTML Seiten zerpflücken ist sehr Old School, anfällig für Änderungen auf der Seite und auch extrem inperformant.
Java ist perfekt dafür geeignet so wie zig anderes Sprachen auch.
Schreib ein Standalone Java Programm mit JAX-RS Client und Jackson als JSON Mapper. Das Programm kannst du auch als Service in Windows laufen lassen. Das zyklische Abfragen kannst du dann auch direkt im Java Programm hinterlegen. Schreib die Ergebnisse in eine Textdatei im CSV-Format. Das ist automatisch auch Excel tauglich und du sparst viel Aufwand Apache poi zu integrieren.
 
Phrasendreher schrieb:
Falls die interessanten Daten nicht im Quelltext vorliegen, könnte man mit der Browser-Console (schon mal F12 probiert?) die XHR-Requests untersuchen (sofern vorhanden) und darin das Payload of interest suchen - mit ganz viel Glück gäbe es dann vllt. gar eine URL, die mit den richtigen Parametern aufgerufen gleich ausspuckt was Du haben willst.
Man könnte die Seite auch einfach rendern und dann auslesen :)
 
Also wenn dir PowerShell hilft und sofern die Daten bei Ebay abgreifbar sind ohne API (hab ich keine Ahnung) ...
Damit kannst du die Seite parsen und direkt als Excel ausgeben.

Um direkt zum relevanten Element zu springen kannst du unter anderem folgende 3 Methoden verwenden.
  • ElementById
  • ElementByName
  • ElementByTagName
Gibt auch noch weitere.

Die relevanten Daten bekommst du durch analysieren der Seite.

Beispiel für deinen initialen Post hier im Thread:
Der Teil für BasicAuth wird nicht genutzt, solange du $flagUseBasicAuth auf $false belässt.
PowerShell:
$uri = 'https://www.computerbase.de/forum/threads/aus-website-daten-automatisiert-extrahieren.1916772/' 

# Flag for using BasicAuth 
$flagUseBasicAuth = $false 

##################################################################################################
#region BasicAuth   
#-------------------------------------------------------------------------------------------------
# Basic Auth Credentials   
$username = 'test123' 
$passwordPlainText = '123' 

# Combine User and Password   
$authPair = "$username`:$passwordPlainText" 

# Generate BasicAuth Base64 string   
$basicAuthValue = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($authPair)) 

# Create BasicAuth header   
$header = @{ 
	Authorization = "Basic $basicAuthValue" 
} 
#endregion Basic Auth   
##################################################################################################


# Web request  
If ($flagUseBasicAuth) { 
	$webResponse = Invoke-WebRequest -Uri $uri -Headers $header 
} Else { 
	$webResponse = Invoke-WebRequest -Uri $uri 
} 

# Get elements of web response  
$element = $webResponse.ParsedHtml.getElementById('js-post-23570356')   
# $element = $webResponse.ParsedHtml.getElementsByName('')     # Element by Name
# $element = $webResponse.ParsedHtml.getElementsByTagName('')  # Element by TagName


# output
$element.innerText


Die Ausgabe kannst du dann direkt als Excel-Datei speichern, indem du das COM-Objekt "Excel.Application" nutzt.
Hab dazu leider kein eigenes Beispiel, aber da hilft Google:
https://www.google.com/search?rlz=1...hUKEwiHruzg_IrnAhVQysQBHQ0aCn0Q4dUDCAs&uact=5


Solltest du das angehen, dann bitte unbedingt PowerShell 5.1 verwenden.
Siehe: https://www.computerbase.de/forum/t...reren-einzelnen-zellen.1693664/#post-20248809
Dort gings auch um eine Excel-Ausgabe via PowerShell.
Sonst ist das Ganze extrem langsam.

PowerShell 5.1 bekommst du durch das "Microsoft Windows Management Framework":
https://www.microsoft.com/en-us/download/details.aspx?id=54616
 
Zuletzt bearbeitet:
Zurück
Oben