🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Daten aus Website auslesen

CALC ist die Tabellenkalkulation, die Sie immer wollten.
Wirman
Beiträge: 6
Registriert: Di 9. Feb 2016, 09:27

Daten aus Website auslesen

Beitrag von Wirman » Di 9. Feb 2016, 09:36

Hallo,

ich habe folgende Frage: Ich verwende LibreOffice unter Ubuntu. Ich will nun Daten aus einer Website auslesen, z.B. Quoten von einem Wettanbieter. Mit der Funktion "Einfügen externer Daten" geht das leider vollkommen schief, weil man da sehr ungünstig nur an die richtigen Werte kommt. Das Ganze müsste doch auch über VBA gehen, wo man direkt die Elemente auf der Website ansprechen kann und dort sich nur die passenden Infos rausholt. Ich habe da auch schon einen Ansatz an Code gefunden:

Code: Alles auswählen

Public Sub GetValueFromBrowser()
    Dim ie As Object
    Dim url As String
    Dim myPoints As String

    url = "http://run.plnkr.co/plunks/6UTb9kHRZ363Ivhh2BPE/"
    Set ie = CreateObject("InternetExplorer.Application")

    With ie
      .Visible = 0
      .navigate url
       While .Busy Or .readyState <> 4
         DoEvents
       Wend
    End With

    Dim Doc As HTMLDocument
    Set Doc = ie.document

    myPoints = Trim(Doc.getElementsByName("points")(0).Value)
    Range("A1").Value = myPoints

End Sub
Das Problem ist nur, dass ich unter Ubuntu natürlich keinen Internet Explorer hab, und mit anderen Browsern geht das so nicht. Wie schaffe ich das, entweder einen anderen Browser zu nehmen, oder gibt es eine andere Möglichkeit die Elemente einer Website auszulesen?

vielen Dank und viele Grüße
Wirman

mikele
* LO-Experte *
Beiträge: 1930
Registriert: Mo 1. Aug 2011, 20:51

Re: Daten aus Website auslesen

Beitrag von mikele » Di 9. Feb 2016, 14:19

Hallo,

deine Frage ist im Bereich "LibreOffice Programmierung" besser aufgehoben.
Du bist dir im Klaren, dass VBA unter MS-Office läuft und unter Libreoffice andere Programmiersprachen (Libreoffice Basic, Python, ...) genutzt werden. VBA läuft zwar mit EInschränkungen auch, aber in diesem konkreten Fall, glaube ich, wirst du damit nicht erfolgreich sein.
geht das leider vollkommen schief, weil man da sehr ungünstig nur an die richtigen Werte kommt
"vollkommen schiefgehen" und "sehr ungünstig" sind widersprüchlich: "vollkommen schiefgehen" heißt "geht gar nicht", "sehr ungünstig" heißt "geht, aber nicht so einfach/komfortabel ..."
Gruß,
mikele

Wirman
Beiträge: 6
Registriert: Di 9. Feb 2016, 09:27

Re: Daten aus Website auslesen

Beitrag von Wirman » Di 9. Feb 2016, 14:28

Nun gut, dann sollte ich das ganze ein wenig umformulieren. Bisher dachte ich eigentlich, dass LibreOffice Basic sehr ähnlich zu VBA ist. Deswegen die Frage nach VBA. Wenn es eher mehr Unterschiede wie Gemeinsamkeiten gibt, lass ich mich gerne eines besseren belehren.

Also, es geht nicht vollkommen schief, aber es ist sehr unkomfortabel! Schon allein die Suche über den Fensterdialog ist sehr umständlich, dann weiß man nicht, welche Tabelle der Website nun relevant ist und schließlich ist die Art und Weise, wie es dann in das Tabellenblatt eingetragen wird auch nicht wirklich hilfreich.

Deswegen wird das ganze dann wohl auf die "Programmierung" rauslaufen. Kann man das Thema dorthin verschieben? Wie kann man das in LibreOffice programmiertechnisch lösen? Beziehungsweise wie greif ich auf HTML-Elemente auf Websites von LibreOffice aus zu?

mikele
* LO-Experte *
Beiträge: 1930
Registriert: Mo 1. Aug 2011, 20:51

Re: Daten aus Website auslesen

Beitrag von mikele » Di 9. Feb 2016, 15:17

Hallo,

das Verschieben des Threads geben wir mal in die Hände der Moderatoren.
Nebebei habe ich mal ein bisschen 'rumgespielt und eine Variante gefunden, eine Html-Seite zeilenweise auszulesen.
Wenn die Seite also exakt so aufgebaut ist ("http://run.plnkr.co/plunks/6UTb9kHRZ363Ivhh2BPE/") dann liefert dir folgendes Makro den Wert 300:

Code: Alles auswählen

Function html_lesen

	sURL = "http://run.plnkr.co/plunks/6UTb9kHRZ363Ivhh2BPE/"
	oSFA = createUNOService ("com.sun.star.ucb.SimpleFileAccess")
	oInpDataStream = createUNOService ("com.sun.star.io.TextInputStream")
	oInpDataStream.setInputStream(oSFA.openFileRead(sUrl))
	for x = 0 to 8
		mytext = oInpDataStream.readLine()
	next x
	n=instr(mytext,"value=" & chr(34))
	mytext=mid(mytext,n+7)
	n=instr(mytext,chr(34))
	html_text=left(mytext,n-1)

End Function
Manchmal erhalte ich allerdings einen timeout-Fehler, der noch irgendwie zu umgehen ist ...
Gruß,
mikele

Wirman
Beiträge: 6
Registriert: Di 9. Feb 2016, 09:27

Re: Daten aus Website auslesen

Beitrag von Wirman » Di 9. Feb 2016, 16:09

Hi,

also das funktioniert soweit, aber ist dann doch ziemlich rudimentär. Bei solch einer einfachen Seite funktioniert das ja noch, aber leider nicht bei komplexen Seiten. Da weiß ich ja nicht, wo genau denn nun das steht, was ich will, und die Anzahl der Charakter bei mehreren Tausend ist dann auch ziemlich mühsam. Gibt es nicht etwas ähnliches zu dem VBA-Code, wo man ElementsByName oder ElementsByID aufrufen kann?

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2539
Registriert: Fr 10. Dez 2010, 10:01

Re: Daten aus Website auslesen

Beitrag von karolus » Di 9. Feb 2016, 16:24

Hallo

Wie soll man dir jetzt helfen wenn man nicht die echten URLs kennt....und nicht weiss welche Informationen daraus benötigt werden.

Mit python ginge es mit 99,9% Wahrscheinlichkeit ohne überhaupt zu wissen ob oder welchen Webbrowser du benutzt.

Basic oder VBA sind für sowas einfach nicht brauchbar.
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Wirman
Beiträge: 6
Registriert: Di 9. Feb 2016, 09:27

Re: Daten aus Website auslesen

Beitrag von Wirman » Di 9. Feb 2016, 19:11

Okay, dann ganz konkret:

Sportwetten-Seiten wie z.B. Tipico. Die Spiele der ersten Fußball-Bundesliga werden hier angezeigt: https://www.tipico.com/de/online-sportw ... ga/g42301/
Konkret will ich die Partien plus die Quoten in ein Tabellendokument haben. Dafür hat mir ein Freund gezeigt, wie das in Java geht.

Code: Alles auswählen

                for (Element e : doc.getElementById("comp-selection").getElementsByClass("e_active")) {
                    if (!e.classNames().contains("jq-event-row-cont")) continue;
                    Element ee = e.getElementsByClass("left").get(1);
Dort werden per jsoup package die Elemente per ID oder Class ausgelesen und dann die richtigen Informationen rausgezogen. Das ganze wird in eine .csv Datei gespeichert. Da ich die Dateien aber ja in Calc weiterverarbeiten will, dachte ich mir, es ist praktischer, wenn ich die gleich mit Calc auslesen kann. Da es die Möglichkeit ja anscheinend gibt, dachte ich, jemand kann mir helfen, wie das funktioniert.

Also nochmal was ich will: Von einer Seite mit Sportwetten oder einer ähnlichen Seite, in der eine Tabelle mit Spielen und Ergebnissen und/oder Quoten stehen, per LibreOffice Basic die gewünschten Daten auslesen, in geeigneter Form aufbereiten, um damit mathematische Berechnungen durchführen zu können.
ich hoffe es gibt dafür eine Möglichkeit (bzw funktioniert das mit VBA?!)

viele Grüße
Wirman

mikele
* LO-Experte *
Beiträge: 1930
Registriert: Mo 1. Aug 2011, 20:51

Re: Daten aus Website auslesen

Beitrag von mikele » Mi 10. Feb 2016, 13:51

Hallo,

das Makro lässt sich natürlich so umbauen, dass die gesamte Seite nach dem gesuchten Stichwort durchforstet wird - bleibt aber ein workaround.

@karolus: Da ich so ein ähnliches Problem habe, würde mich eine python-Lösung brennend interessieren (jedesmal, wenn ich den Entschluss fasse, mich in python einzuabreiten, bleibe ich schon bei den ersten Schritten hängen, wahrscheinlich wegen der fehlenden IDE ...)
Gruß,
mikele

Wanderer
* LO-Experte *
Beiträge: 909
Registriert: Di 11. Feb 2014, 20:03
Wohnort: Berlin

Re: Daten aus Website auslesen

Beitrag von Wanderer » Fr 12. Feb 2016, 00:57

Hallo,

@mikele: Eventuell helfen Dir die beiden Links weiter. https://docs.python.org/2/library/htmlparser.html oder
z.B http://docs.python-guide.org/en/latest/ ... os/scrape/
Bei ersten Schritten sind natürlich die Unterschiede python2/python3 und das dauernde Thema bytes/string/unicode nicht wirklich hilfreich.

Ich habe mir mal ein entsprechendes Programm zum extrahieren von Datensätzen aus emails geschrieben, was erstaunlich einfach war,
da viel schon mit den vorhandenen Libraries zu erschliessen ist.

Bei Basic kann ich Karolus nur beistimmen. Evtl findet man für VBA noch passende Libraries, aber der Internet-Explorer ist selbst für Windows nicht mehr zukunftsträchtig, aber von der Basic-Variante eines Office-Pakets sollte man da nicht zuviel erwarten, wenn es um Internet-Programmierung geht.

MfG, Jörn
LO 6.0.7 (32Bit) Win8.1 Pro 32 Bit/ LO 6.3.2 Win10 64Bit / LO 6.0.7 Win7 Pro 64 Bit

balu
* LO-Experte *
Beiträge: 370
Registriert: Mi 1. Jun 2011, 16:21

Re: Daten aus Website auslesen

Beitrag von balu » Sa 13. Feb 2016, 15:07

Hallo Wirman,

Frag mich jetzt blos nicht wie ich das hinbekommen hatte, das ich gestern abend auf deine verlinkte Seite zugreifen konnte und die Partien sowie die Quoten extrahieren konnte. Zumal es dann auf einmal nicht mehr funktionierte.

Ich hatte erst alles mit OOo 3.2.1 mühselig mir zusammengeschustert, Datei gespeichert, neu geladen, ein paar winzige Änderungen vorgenommen, gespeichert, neu geladen, und alles war bestens.

Dann fiel mir ein: Das ich das ja auch noch in AOO und LO testen musste. Also eine kopie angelegt und in AOO Datei gestartet. Ergebnis war: Mist verdammter! Es funktioniert nicht :twisted: ! Also das gleiche spielchen auch in LO versucht, und wieder das gleiche; es funktioniert nicht :twisted: !

Dann habe ich in OOo die Datei (nicht die Kopie, sondern die Originale) geschlossen, und dann erneut geöffnet. Ergebnis: Jetzt funktionierte sie dort auf einmal auch nicht mehr :evil: !

Hatte gestern abend und seit heute morgen alles mögliche probiert, aber die Datei war nicht dazu zu überreden das sie wieder funktioniert. Ich habe fast die Befürchtung, das ab einer bestimmten Uhrzeit vom Server her irgendwie ein Riegel vorgeschoben wird. Denn, so weit ich mich recht daran erinnern kann, funzte die Datei gestern abend nicht mehr als ein Spiel lief. Sicher bin ich mir da aber nicht. Obwohl es seit gestern abend eine Fehlermeldung vom Office gibt, das da Probleme mit dem Server existieren. (Nur mal so am Rande bemerkt.)

Also ein direkter Zugriff per Datei auf die Web-Seite scheint momentan irgendwie nicht möglich zu sein. Aber es gäbe da noch die Möglichkeit die Seite lokal zu speichern und dann auf diese lokale Datei zuzugreifen, was ich schon ausprobiert habe und auch funktioniert.

Falls das für dich keine große Rolle spielt, das die Web-Seite erst lokal gespeichert werden muss, so könnte ich das Makro dementsprechend ändern das erst die Seite gespeichert wird um auf sie zuzugreifen. Und vielleicht könnte ich da noch etwas einbauen, was ich aber erst ab Montag ausprobieren kann.


Ach ja! Beinahe vergessen.
Es spielt bei meiner Datei keine Rolle welcher Internetbrowser benutzt wird, da das Makro direkt auf den Quell-Code der Seite zugreift.


Also melde dich hier, und dann schaun ma mal weiter. ;)



Gruß
balu


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten