AW: Daten aus Webseite filtern
12.02.2022 20:49:41
Oberschlumpf
Hi Dirk,
versuch es mit diesem Code, bei mir funktioniert's.
Allerdings hab ich ja auch zum Testen nur deine mageren Txt-Beispiele und nicht die vollständige HTML-Datei - aber du schaffst das schon...
Sub Test()
Dim lstrCont As String, larstrCont() As String, lloIdx As Long, lstrSplit() As String, liIdx As Integer, lloNext As Long
Open "\\server01\\Aktuelles 2022-02\Firma XY GmbH2.html" For Binary As #1
lstrCont = Space$(LOF(1))
Get 1, , lstrCont
Close
larstrCont = Split(lstrCont, vbLf)
For lloIdx = 0 To UBound(larstrCont)
If InStr(larstrCont(lloIdx), "") > 0 And _
InStr(larstrCont(lloIdx), "dmiss.gif") > 0 Then
lstrSplit = Split(larstrCont(lloIdx), " ")
For liIdx = 0 To UBound(lstrSplit)
If InStr(LCase(lstrSplit(liIdx)), "title") > 0 Then
lloNext = IIf(Cells(Rows.Count, 1).End(xlUp).Row = 1 And Range("A1").Value = "", 1, Cells(Rows.Count, 1).End(xlUp).Row + 1)
Range("A" & lloNext).Value = Right(lstrSplit(liIdx), Len(lstrSplit(liIdx)) - 7) & " " & lstrSplit(liIdx + 1)
End If
Next
End If
Next
End Sub
hilfts?
Ciao
Thorsten
AW: Daten aus Webseite filtern
DirkR
Hallo Thorsten,
super :-)
Es funktioniert einwandfrei!!!
Vielen, lieben Dank
Gruß DirkR
Code enthält n Fehler
Oberschlumpf
Moin Dirk,
erst mal: Freut mich, dass es funktioniert.
dann: Du hast mit meinem Code nur Glück, DASS es funktioniert
denn: da fehlt der 1. Parameter, nach dem in Verbindung mit dem 2. Parameter gesucht werden soll (hab ich erst jetzt bemerkt)
diese Zeile ist falsch
If InStr(larstrCont(lloIdx), "") > 0 And _
innerhalb der "" muss eigentlich was stehen...und zwar das hier (und nun kommts doch zu der von mir eingangs erwähnten Ausnahme, und auch ich muss n Bild zeigen)
Na ja, vielleicht funktionierts bei dir deswegen, weil du den Fehler auch schon bemerkt und korrigiert hast.
Der Grund für die - hier - Falschdarstellung:
Texte, die spitze Klammer auf/zu enthalten, sind HTML-Tags und werden hier leider auch als genau solche umgesetzt :-/
Ich hatte gestern beim zeigen meines Codes darauf nicht geachtet und bin, wie auch du, drauf "reingefallen".
Nun denn, wenn noch nicht geschehen, korrigier den Code mit dem fehlenden Text in der 1. If-Zeile, dann funktionierts immer noch, aber dann ist auch der Code vollständig :-)
Ciao
Thorsten
AW: Code enthält n Fehler
DirkR
Hallo Thorsten,
vielen Dank.
Ich habe Code eingefügt. :-)
Tatsächlich muss ich wohl Glück gehabt haben... denn es funktionierte auch ohne.
Vielen Dank.
Gruß DirkR
Alternative: Daten aus Webseite filtern
Zwenn
Hallo Dirk und Thorsten
Mit Deiner Lösung Thorsten, rein über String-Operationen, können solche Problemstellungen natürlich gelöst werden. Wird die Aufgabe aber komplexer (mehr abzufragende Datenfelder), wird das schnell unübersichtlich. Deshalb möchte ich noch den Weg über das DOM (Document Object Model) zeigen. Denn hier geht es ja um die Datengewinnung aus HTML-Dateien und die Methoden des DOM bieten eine hervorragende Möglichkeit, direkt auf bestimmte Knoten im DOM-Baum zuzugreifen. Der DOM-Baum repräsentiert ein beliebiges HTML-Dokument in einer hierarchischen Struktur:
https://de.wikipedia.org/wiki/Document_Object_Model
Soweit ich es gesehen habe, liest Du die beiden ersten Elemente aus dem Split-Array aus, um den Namen aus dem title-Attribut zu gewinnen Thorsten. Davor warne ich aus eigener Erfahrung. Denn Namen mit drei oder mehr Bestandteilen werden damit nicht vollständig erfasst. Da braucht es nur ein paar Holländer mit dem Namensbestandteil van oder mehrere Vornamen ohne Bindestrich. Z.B. heiße ich selbst Sven Ole mit Vornamen. In der vorliegenden Datei lässt sich das Ende des vollständigen Namens immer an der öffnenden Klammer "(" festmachen.
Im folgenden Beispielcode habe ich auf das Abfangen von Fehlern verzichtet, weil das über die Abfrage des zurückgelieferten HTTP-Status des Webservers funktionieren würde. Die Datei wird aber lokal gelesen. Das funktioniert, aber der Status bleibt dann einfach 0. Wird ein Dokument vom Webserver geliefert wie gewünscht, ist der Status 200:
https://de.wikipedia.org/wiki/HTTP-Statuscode
Sub GetStatus1Names()
Dim url As String
Dim doc As Object
Dim nodeAllStatus1 As Object
Dim nodeOneStatus1 As Object
Dim titleAttrib As String
Dim bracketIndex As Long
Dim result As String
url = "D:\status1.html"
Set doc = CreateObject("htmlFile")
With CreateObject("Msxml2.XMLHTTP.6.0")
.Open "GET", url, False
.Send
doc.body.innerHTML = .responseText
Set nodeAllStatus1 = doc.getElementsByClassName("boxlayout_status1")
For Each nodeOneStatus1 In nodeAllStatus1
If InStr(1, nodeOneStatus1.getElementsByTagName("img")(0).src, "dmiss.gif") Then
titleAttrib = nodeOneStatus1.getElementsByTagName("img")(0).getAttribute("title")
bracketIndex = InStr(1, titleAttrib, "(")
result = result & Trim(Left(titleAttrib, bracketIndex - 1)) & Chr(13)
End If
Next nodeOneStatus1
End With
MsgBox result
End Sub
Viele Grüße,
Zwenn
AW: Alternative: Daten aus Webseite filtern
Oberschlumpf
Hi SvenO (mit Leerzeichen! ;-) )
ich hab 2 Rückmeldungen
a) Zitat "...liest Du die beiden ersten Elemente aus dem Split-Array aus...ein paar Holländer mit dem Namensbestandteil van oder mehrere Vornamen ohne Bindestrich..."
Du hast total recht!!!
Aber hier kann ich mich rausreden :-))
Als Vorlage hatte ich nur "Hans Mustermann", ich hatte Dirke mehrmals darüber informiert, dass seine Beispiele in der Anzahl durchaus viel, viel mehr hätten sein können (sollen).
Denn, ja, wäre ein Beispiel "Cristiano Ronaldo dos Santos Aveiro" gewesen (hätte ich nich nur gelernt, dass der "Fußballer nicht dieses Jahres" :-) mehr Namen und n andern Nachnamen hat, als ich dachte :-) )...sondern ich hätte natürlich eine andere String-Lösung erarbeitet als die, die ich lieferte.
Aber bei nur "Hans Mustermann" kam ich gar nicht auf die Idee (Erinnerung), dass manche mehr Vornamen und/oder Doppelnachnamen mit/ohne Bindestrich haben können.
Aber ok - Dirk meint "Problem is gelöst" - alles is gut :-)
b) Und jetzt komm ich zum Hauptanliegen meiner Antwort! :-)
YEAHH...ich hatte von dir schon sehr, sehr oft Hinweise zum DOM gelesen, hab schon viele Internetseiten mit diesem Thema in meinen Favoriten "verewigt", aber ich hab das Ganze trotzdem noch immer nicht verstanden, weil ich die Beispiel-Codes nicht für mein-HTML-Auslese-Problem verstanden habe, bzw umsetzen konnte.
Aber jetzt, mit deinem neuesten Bsp-Code, kann ich in meinen HTMLs wenigstens mit ner MsgBox schon mal genau den Teil/die Teile teilweise anzeigen lassen, um die es mir geht.
Meine DOM-"Ergebnisse" sind noch nich das Gelbe vom Ei :-), aber endlich seh ich wenigstens ein ganz ganz bisschen Eigelb am langen Ende des Eiweiß-Tunnels :-))
Danke + Ciao
Thorsten
AW: Alternative: Daten aus Webseite filtern
DirkR
Hallo Thorsten, Hallo Zwenn,
sorry....mein Fehler...
Ja es kommen auch Namen vor wie z. B. Hans Dieter Schmidt oder Besucher 1 [nur GNP]
Mir war leider nicht klar, dass dies Auswirkungen haben könnte.
Grüße DIrkR
AW: Alternative: Daten aus Webseite filtern
Oberschlumpf
häää?
Dirk?
Du hattest doch "super" geschrieben und "alles funktioniert"
Aber DAS stimmt ja gar nicht, wenn man deine neuesten Antworten liest....ich bin verwirrt...
Egal, du hast ja von Sven ein Bsp-Code, der dein und vllt jedes andere HTML-Auslesen-Problem besser löst als meine String-Idee(n)
Also...viel Erfolg damit!
Ciao
Thorsten
AW: Alternative: Daten aus Webseite filtern
DirkR
Hallo Thorsten,
beim Testen hatte leider die Kombi Besucher 1 [nur GNP] nicht die Bedingung erfüllt um gefiltert zu werden.
Ich werde weiter testen...
Gruß DirkR
AW: Alternative: Daten aus Webseite filtern
Zwenn
Hallo Thorsten,
wie gesagt, über die "Namensproblematik" bin ich in der Vergangenheit auch mal gestolpert, weil ich es mir zu einfach gemacht habe. Im Forum ist es ähnlich wie im Berufsleben denke ich. Der "Kunde" fragt oft nach Hilfe für ein Problem, dass er selbst im Detail nicht kennt oder gar falsch einschätzt. Es ist dann am "Sachbearbeiter" eine Lösung zu finden, die alle Apekte berücksichtigt und am Ende vielleicht eine völlig andere Prüblemstellung behandelt, die jedoch den "Kundenwunsch" bedient.
Es freut mich, wenn der Code Dir hilft. Ich habe ja diesmal gar nix kommentiert, weil es mir vor allem darum ging zu zeigen, es gibt auch hier mehrere Möglichkeiten an die Sache heranzugehen. Hast Du schon Fragen zum Auslesen von Internetseiten gestellt? Ich kann mich gerade nicht erinnern. Aber alles, was in meinem Beispiel verwendet wird, habe ich schon mehrfach an anderer Stelle erklärt. Das sind ja eigentlich nur Grundlagen des DOM, um gezielt auf HTML-Elemente zuzugreifen.
Viele Grüße,
Zwenn
AW: Alternative: Daten aus Webseite filtern
Oberschlumpf
Hi Sven,
nee, zu meinem HTML-Problem gibts noch keine Fragen von mir; noch versuch ich es allein, bzw mit Googles, und damit unter Anderem deiner Hilfe.
Ciao
Thorsten
AW: Alternative: Daten aus Webseite filtern
DirkR
Hallo Zwenn,
vielen Dank für deine Hilfe.
Ich habe deine Code getestet.
Leider bekomme ich in der Zeile .open "GET", url, False folgende Fehlermeldung:
Laufzeitfehler '-2147012890 (80072ee6)':
Systemfehler: -2147012890
Was mache ich falsch?
Gruß DirkR
AW: Alternative: Daten aus Webseite filtern
Zwenn
Hallo Dirk
Zu dem Fehler kann ich Dir keine zielführende Auskunft geben. Hast Du den Pfad zur HTML Datei angepasst? Versuchst Du direkt auf die URL im Internet zuzugreifen?
Du hast nur einen kleinen Ausschnitt einer HTML Datei zur Verfügung gestellt. Auf der Basis wird bei mir mit dem Beispielcode "Hans Mustermann" in einer MSG Box ausgegeben. Hast Du mehr Namen, sollten die Zeilenweise in einer MSG Box ausgegeben werden. Der Fehler liegt bei Dir aber bereits vor der Behandlung des HTML Codes, nämlich beim Zugriff auf die Ressource.
Rein theoretisch kann es auch an Deiner Umgebung liegen. Ich verwende Windows 10, 64 Bit, aktueller Patch Stand und Excel 2016, 32 Bit, aktueller Patch Stand. Wenn Du für den Dateizugriff die open() Methode von Thorsten verwendest, kannst Du den ganzen XMLHTTP Krempel weglassen, der den Fehler bei Dir verursacht. Ich habe das verwendet, um zu zeigen, wie direkt auf eine URL im Internet zugregriffen werden kann. Oft sind dazu aber noch zusätzliche Angaben notwendig, damit das funktioniert. Aber wie gesagt, der Fehler tritt bei Dir schon vorher auf.
Viele Grüße,
Zwenn
|