Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1452to1456
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Bestimmten String aus Webseite auslesen

Bestimmten String aus Webseite auslesen
16.10.2015 11:25:04
jockel
Hallo,
kann ich per VBA ein bestimmte Webseite öffnen, Innerhalb der Webseite nach einem eindeutigen String suchen, zB: "Vorhaben intern" und alles, was sich rechts neben disem String befindet (Text) , kopieren und in Excel in eine Bestimmte Zelle schreiben ?
Danke
Gruß Jockel

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
PS: Bestimmten String aus Webseite auslesen
16.10.2015 11:26:16
jockel
PS: die Webseite muss nicht sichtbar geöffnet sein, das auslesen kann auch im Hintergrund passieren.
Wäre mir fast lieber

AW: PS: Bestimmten String aus Webseite auslesen
16.10.2015 14:55:36
jockel
Sorry, habe vergessen , auf nicht beantwortet zu setzen

eine Möglichkeit...
17.10.2015 16:27:54
Michael
Hi Jockel,
versuch mal das:
Option Explicit
Sub GetTextAusSite()
Dim sURL As String, sResult As String
Dim von As Long, bis As Long
sURL = "https://wiki.selfhtml.org/"
sResult = GetHTTPResult(sURL)
von = InStr(1, sResult, "Vollständiges")
MsgBox von
bis = InStr(von, sResult, "http://stackoverflow.com/questions/18163560/excel-vba-http-request-download-data-from-yahoo-finance
Dim XMLHTTP As Variant, sResult As String
Set XMLHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
XMLHTTP.Open "GET", sURL, False
XMLHTTP.Send
sResult = XMLHTTP.Status & " - " & XMLHTTP.StatusText & vbLf & XMLHTTP.ResponseText
Set XMLHTTP = Nothing
GetHTTPResult = sResult
End Function

Das WinHttpRequest holt die Seite im Hintergrund.
Die Frage ist, bis wohin Du suchen möchtest. Man könnte evtl. den verbleibenden String (nach dem 1. instr) mit split in ein Array stecken und die erste Zeile ausgeben.
Ich vermute, daß Du weißt, was nach dem gesuchten Text kommt, also habe ich mal zu Testzwecken nach der spitzen Klammer gesucht (also dem nächsten vorhandenen HTML-Tag): das kannst Du nach Bedarf ändern.
Happy Exceling,
Michael
P.S.: ich sehe grade, daß die untere Funktion dem eigentlichen Text die Server-Status-Info voranstellt - die könnte man abfragen. "200" steht für Server ok.

Anzeige
AW: eine Möglichkeit...
19.10.2015 09:03:24
jockel
Hallo MIchael,
Danke für Deine Hilfe.
Habe den Code mal getestet. Bei mir kommt eine Fehlermeldung :
"der Servername oder die Serveradresse konnte nicht verarbeitet werden"
Tritt auf bei "XMLHTTP.Send"
Funktioniert das Beispiel bei dir ? Oder kann es sein, dass mir ein Verweis fehlt ?
Wie sieht den das Ergebnis aus ?
Danke noch mal.
Gruß
Jockel

noch eine Möglichkeit...
19.10.2015 16:54:14
Michael
Hi Jockel,
das kann ich nicht nachvollziehen: es läuft bei mir sowohl mit X2000 als auch mit 2007 - direkt aus dem Browser in den VB-Editor kopiert.
Kann es sein, daß Du ein 64-bit-Windows hast, bei dem das Objekt nicht mehr vorhanden ist? Obwohl... dann müßte eine Fehlermeldung bereits vorher erscheinen.
Egal. Es gibt auch andere "Objekte" mit ähnlicher Funktion; kann man u.a. nachlesen bei:
http://waidner-itsolutions.de/2012/11/webservices-mit-vba-ansprechen/
oder
https://www.herber.de/forum/archiv/1304to1308/1306802_MSXML2XMLHTTPObjekt_parsen_GetElementByID.html
Ich habe die Funktion mal in meinen Schnipsel eingebaut:
Sub b()
Dim objXMLHTTP As Object
Dim sURL As String, sResult As String
Dim von As Long, bis As Long
Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
sURL = "https://wiki.selfhtml.org/"
' sResult = GetHTTPResult(sURL)
objXMLHTTP.Open "GET", sURL, False
objXMLHTTP.Send
MsgBox "Status: " & objXMLHTTP.Status
sResult = objXMLHTTP.ResponseText
Set objXMLHTTP = Nothing
von = InStr(1, sResult, "Vollständiges")
MsgBox von
bis = InStr(von, sResult, "

der wiederum mit 2007 anstandslos läuft.
Von gibt übrigens irgendwas mit 9000 aus, bis ein bißchen mehr, und ausgegeben wird dann "Vollständiges Inhaltsverzeichnis" oder so.
Bin neugierig, ob das dann tut.
Schöne Grüße,
Michael

Anzeige
AW: noch eine Möglichkeit...
20.10.2015 11:53:15
jockel
Hallo Michael,
ja, Danke, es funktioniert nun. :-)
Weiß nicht, warum es vorher nicht ging, aber dieses Beispiel funzt nun.
Noch eine Frage: ich habe festgestellt, wenn das gesucht Ergebnis reine Text ist, funktioniert der Code ohne Probleme. Es gibt aber auch Seiten, die teilweise mit Java laufen.
(Das ist jetzt eine Erkenntnis aus meinen Texts, vielleicht lieg eich auch falsch)
Wenn der gesuchte String kein reiner Text ist, sondern irgend wie mit Java zusammengebastelt ist, funktioniert der Code nicht mehr.
Der Code erkennt nur Text (ASCI)
Liegt das an dieser Zeile :
objXMLHTTP.ResponseText
Gibt es vielleicht noch einen andern Parameter dafür, der ausser reinen Text auch Java erkennt ?
Falls nicht, kein Problem , ich komme auch damit klar und das Beispiel ist so schon gut.
Gruß
Jockel

Anzeige
Da wird's schwierig
20.10.2015 14:51:26
Michael
Hi Jockel,
.ResponseText gibt in der Tat den reinen Text der Seite zurück - mitsamt dem darin enthalten JS-Code, der allerdings *nicht ausgeführt* wird.
Einige weitere Möglichkeiten findest Du hier: http://www.office-loesung.de/ftopic139760_0_0_asc.php
Ich habe auch mal mit einer Website herumgespielt, die Daten teilweise als Text und teilweise über JS erzeugt hat (das waren etwa die letzten drei Stellen einer Telefonnummer) - das Problem war dann letztlich, daß die Seite beim händischen Aufruf im Browser "richtig" angezeigt wurde, beim programmierten Aufruf über das Browser-Objekt dann allerdings eine zusätzliche "Zwischenseite" angezeigt hat, die ich dann auch nicht ohne Weiteres auslesen konnte - ich hatte dann keinen Bock mehr, das zu vertiefen und einen freundlichen Helfer gebeten, die paar benötigten Daten händisch über die Zwischenablage in Textdatein zu kopieren, die ich dann anschließend ausgewertet habe.
Jeder Seitenbetreiber weiß natürlich, wie Du auf seine Infos zugreifst (insbesondere, mit welchem Browser), nachzusehen etwa bei: https://panopticlick.eff.org/
Ich weiß nicht, was für eine Kennung all die programmierbaren Objekte zurückliefern, aber wenn ein Seitenbetreiber seine Daten vor automatischem Auslesen schützen will, kann er die Anzeige bei bestimmten Kennungen locker unterdrücken.
Ist ja auch legitim, wenn er davon lebt.
Schöne Grüße,
Michael

Anzeige
DANKE : Da wird's schwierig
21.10.2015 09:24:20
jockel
Hallo Michael,
Danke noch mal. Hast mir viel weitergeholfen.
Das mit dem Java geht halt einfach nicht, fertig :-)
Komme mit Deinem Beispiel auch so voran.
Gruß
Jockel

gerne, vielen Dank für die Rückmeldung, Gruß
21.10.2015 17:23:04
Michael

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige