Anzeige
Archiv - Navigation
1504to1508
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

HTML in Excel auslesen

HTML in Excel auslesen
12.07.2016 16:07:15
simon
Liebe Forumsmitglieder,
ich versuche derzeit im Rahmen einer wiss. Studie einige Daten aus (lizensierten)Zeitungsarchiven auszulesen und in Excel auszuwerten. Ich habe mir dafür auf Grundlage unterschiedlicher Foren ein Script zusammengefügt, dass für meine Zwecke funktioniert. Habe nun folgendes Problem:
Ich möchte von einer Website (quelltext Auszug unten) dafür "txt1 signature", "txt3" sowie "txt4_120" in einer Tabelle in Excel auslesen lassen. Für die beiden erstgenannten Objekte funktioniert das mit dem unten stehenden script auch gut. Ich bekomme es aber nicht hin, "txt4_120" auszulesen. Hier bräuchte ich vor allem den dazugehörigen Text, also im unten stehenden Bsp. "En Egypte, des textos pour aider les malades du diabète pendant le ramadan".
Hier der Auszug aus dem auszulesenden html Code:
" "<div class="grid_8 omega resultat"><br> <h3 class="txt4_120 "><a href="/afrique/article/2016/06/06/en-egypte-des-textos-pour-aider-les-victimes-du-diabete-pendant-le-ramadan_4938784_3212.html?xtmc=union_internationale_des_telecommunication_union_internationale_des_telecommunications&xtcr=2">En Egypte, des textos pour aider les malades du diabète pendant le ramadan</a></h3><br> <span class="txt1 signature">LE MONDE | 6 juin 2016</span><br> <p class="txt3">Près de 9 millions d’Egyptiens sont atteints de diabète. ...La rupture du jeûne est souvent l’occasion d’excès qui accentuent les effets de la maladie..... Le premier croissant de la nouvelle lune qui s’élèvera dans le ciel de ce lundi 6 juin donnera le top départ du mois saint. Durant vingt-huit...</p><br> </div>"
und hier mein Script dafür - das Problem liegt in Spalte 2 - ich denke ich spreche den falschen _
Objekttyp an, weiß aber nicht wie es anders geht.

Sub b()
Dim IEApp As Object, all As Object
Dim zeile As Long, spalte As Integer
Dim URL As String
Dim erg As Long
zeile = ActiveCell.Row
spalte = 1
URL = (InputBox("url:", "Url eingeben"))
Set IEApp = CreateObject("InternetExplorer.Application")
IEApp.Visible = False
IEApp.Navigate URL 'anpassen
Do: Loop Until IEApp.Busy = False
Do: Loop Until IEApp.Busy = False
Do: Loop Until IEApp.document.ReadyState = "complete"
For Each all In IEApp.document.all
spalte = 1 ' ## Quelle und Datum
If all.classname Like "txt1 signature" And all.nodename = "SPAN" Then
Tabelle1.Cells(zeile, spalte) = all.innertext
zeile = zeile + 1
End If
spalte = 2 ' ## Titel
If all.classname Like "txt4_120 " And all.nodename = "SPAN" Then
Tabelle1.Cells(zeile, spalte) = all.innertext
End If
spalte = 3 ' ## Text
If all.classname Like "txt3" Then
Tabelle1.Cells(zeile, spalte) = all.innertext
End If
Next
IEApp.Quit
Set IEApp = Nothing
MsgBox "Fertig"
End Sub

Vielen Dank für Hilfe!

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: HTML in Excel auslesen
12.07.2016 16:28:47
snb
Verwende kein internet.explorer, doch:
Sub M_snb()
With CreateObject("MSXML2.XMLHTTP")
.Open "Get", "http://www.contextures.com/xlSampleData01.html"
.send
c00 = .responseText
End With
With CreateObject("htmlfile")
.body.innerHTML = c00
For Each it In .Links
x4 = it.innertext
Next
End With
End Sub

AW: HTML in Excel auslesen
12.07.2016 17:47:20
Zwenn
Hallo Simon,
leider kann ich anhand Deines HTML-Code-Ausschnitts nicht sehen, ob bestimmte HTML bzw. CSS Fragmente öfter vorkommen und Du auf ein bestimmtes davon zugreifen musst. In dem Fall ginge es mit einer For Each Schleife und einem eindeutigen Identifikator.
Es wäre hilfreich, wenn Du einen Link zu der Seite posten könntest, von der der HTML-Ausschnitt stammt.
Um vielleicht selber eine Lösung zu finden, schau Dir mal diesen Beitrag von mir an, in dem ich mal den Einstieg in das DOM (Document Object Model) beschrieben habe:
https://www.herber.de/forum/archiv/1492to1496/t1492241.htm#1493245
Viele Grüße,
Zwenn

Anzeige
AW: HTML in Excel auslesen
14.07.2016 11:11:29
simon
Hi, vielen Dank für die schnelle Rückmeldung;
@ Zwenn, vielen Dank auch für den Link zum DOM, ich muss mir das mal in Ruhe anschauen, versuche gerade aber vor allem eine pragmatische Lösung zu finden (meine letzter Kontakt mit html und scripts war gegen Ende der 1990er Jahre..)
ich poste nochmal den neusten Stand des Codes; hier ist auch die Url der Seite Enthalten, die Inputbox dient nur noch der Abfrage der jeweiligen Ergebnisseite (in diesem Fall zwischen 1 und 26, die gebe ich manuell ein, da ich sowieso nach jeder Abfrage die Leerzeilen aus der Ergebnisspalte rauslösche).
Der Link zur Seite ist folglich: http://www.lemonde.fr/recherche/?keywords=%22Union+Internationale+des+T%C3%A9l%C3%A9communication%22+%22Union+Internationale+des+T%C3%A9l%C3%A9communications%22&page_num=1&operator=or&exclude_keywords=&qt=recherche_texte_titre&author=&period=custom_date&start_day=01&start_month=01&start_year=1945&end_day=13&end_month=07&end_year=2016&sort=desc
und das aktuelle Script:
Sub b()
Dim IEApp As Object, all As Object
Dim zeile As Long, spalte As Integer
Dim URL As String
Dim erg As Long
Dim Variable As Integer
zeile = ActiveCell.Row
spalte = 1
URL = (InputBox("Ergebnisseite", "Seitenzahl eingeben"))
URL = "http://www.lemonde.fr/recherche/?keywords=%22Union+Internationale+des+T%C3%A9l%C3% _
A9communication%22+%22Union+Internationale+des+T%C3%A9l%C3%A9communications%22&page_num=" & URL & "&operator=or&exclude_keywords=&qt=recherche_texte_titre&author=&period=custom_date&start_day=01&start_month=01&start_year=1945&end_day=13&end_month=07&end_year=2016&sort=desc"
Set IEApp = CreateObject("InternetExplorer.Application")
IEApp.Visible = False
IEApp.Navigate URL 'anpassen
Do: Loop Until IEApp.Busy = False
Do: Loop Until IEApp.Busy = False
Do: Loop Until IEApp.document.ReadyState = "complete"
For Each all In IEApp.document.all
spalte = 1 ' ## Quelle und Datum
If all.classname Like "txt1 signature" And all.nodename = "SPAN" Then
Tabelle1.Cells(zeile, spalte) = all.innertext
zeile = zeile + 1
End If
spalte = 2 ' ## Titel
If all.classname Like "txt4_120 " And all.nodename = "SPAN" Then
Tabelle1.Cells(zeile, spalte) = all.innertext
End If
spalte = 3 ' ## Text
If all.classname Like "txt3" Then
Tabelle1.Cells(zeile, spalte) = all.innertext
End If
Next
IEApp.Quit
Set IEApp = Nothing
MsgBox "Fertig"
End Sub
Danke!!

Anzeige
AW: HTML in Excel auslesen
14.07.2016 14:28:12
simon
Hi, vielen Dank für die schnelle Rückmeldung;
@ Zwenn, vielen Dank auch für den Link zum DOM, ich muss mir das mal in Ruhe anschauen, versuche gerade aber vor allem eine pragmatische Lösung zu finden (meine letzter Kontakt mit html und scripts war gegen Ende der 1990er Jahre..)
ich poste nochmal den neusten Stand des Codes; hier ist auch die Url der Seite Enthalten, die Inputbox dient nur noch der Abfrage der jeweiligen Ergebnisseite (in diesem Fall zwischen 1 und 26, die gebe ich manuell ein, da ich sowieso nach jeder Abfrage die Leerzeilen aus der Ergebnisspalte rauslösche).
Der Link zur Seite ist folglich: http://www.lemonde.fr/recherche/?keywords=%22Union+Internationale+des+T%C3%A9l%C3%A9communication%22+%22Union+Internationale+des+T%C3%A9l%C3%A9communications%22&page_num=1&operator=or&exclude_keywords=&qt=recherche_texte_titre&author=&period=custom_date&start_day=01&start_month=01&start_year=1945&end_day=13&end_month=07&end_year=2016&sort=desc
und das aktuelle Script:
Sub b()
Dim IEApp As Object, all As Object
Dim zeile As Long, spalte As Integer
Dim URL As String
Dim erg As Long
Dim Variable As Integer
zeile = ActiveCell.Row
spalte = 1
URL = (InputBox("Ergebnisseite", "Seitenzahl eingeben"))
URL = "http://www.lemonde.fr/recherche/?keywords=%22Union+Internationale+des+T%C3%A9l%C3% _
A9communication%22+%22Union+Internationale+des+T%C3%A9l%C3%A9communications%22&page_num=" & URL & "&operator=or&exclude_keywords=&qt=recherche_texte_titre&author=&period=custom_date&start_day=01&start_month=01&start_year=1945&end_day=13&end_month=07&end_year=2016&sort=desc"
Set IEApp = CreateObject("InternetExplorer.Application")
IEApp.Visible = False
IEApp.Navigate URL 'anpassen
Do: Loop Until IEApp.Busy = False
Do: Loop Until IEApp.Busy = False
Do: Loop Until IEApp.document.ReadyState = "complete"
For Each all In IEApp.document.all
spalte = 1 ' ## Quelle und Datum
If all.classname Like "txt1 signature" And all.nodename = "SPAN" Then
Tabelle1.Cells(zeile, spalte) = all.innertext
zeile = zeile + 1
End If
spalte = 2 ' ## Titel
If all.classname Like "txt4_120 " And all.nodename = "SPAN" Then
Tabelle1.Cells(zeile, spalte) = all.innertext
End If
spalte = 3 ' ## Text
If all.classname Like "txt3" Then
Tabelle1.Cells(zeile, spalte) = all.innertext
End If
Next
IEApp.Quit
Set IEApp = Nothing
MsgBox "Fertig"
End Sub
Danke!!

Anzeige
AW: HTML in Excel auslesen
14.07.2016 14:29:52
simon
sorry, versehentlich gerade nochmal gepostet - keine Absicht.
Quick and Dirty Lösung
15.07.2016 11:35:13
Zwenn
Hallo Simon,
es gab zwei grundlegende Probleme in Deinem Code. Zum einen hast Du für den Titel die CSS Klasse auf "txt4_120 " und den Tag auf "SPAN" abgefragt. Der Tag ist aber nicht "Span", sondern "H3". Ausserdem gibt es zwei verschiedene "txt4_120 " Klassen. Nämlich die, wie Du sie geschrieben hast und "txt4_120 marqueur_restreint". Es ist einfacher mit "OR" auf beide zu prüfen, als abzufragen, ob der String "txt4_120 " im CSS Klassennamen enthalten ist.
Zusätzlich habe ich mal diesen Zeilenversatz in der dritten Spalte rausgenommen und die auszulesende Seitenzahl-Variable "Page" eingeführt. Die ging zwar auch mit "URL", aber das war doch eher verwirrend.
Ich finde die Lösung nicht wirklich schön, muss ich sagen. Aber sie macht, was Du willst denke ich.

Option Explicit
Sub b()
Dim IEApp As Object, all As Object
Dim zeile As Long, spalte As Integer
Dim Page As String
Dim URL As String
Dim erg As Long
Dim Variable As Integer
zeile = ActiveCell.Row
Page = (InputBox("Ergebnisseite", "Seitenzahl eingeben"))
URL = "http://www.lemonde.fr/recherche/?keywords=%22Union+Internationale+des" _
& "+T%C3%A9l%C3%A9communication%22+%22Union+Internationale+des+T%C3%A9l" _
& "%C3%A9communications%22&page_num=" & Page & "&operator=or&exclude_" _
& "keywords=&qt=recherche_texte_titre&author=&period=custom_date" _
& "&start_day=01&start_month=01&start_year=1945&end_day=13&end_month" _
& "=07&end_year=2016&sort=desc"
Set IEApp = CreateObject("InternetExplorer.Application")
IEApp.Visible = False
IEApp.Navigate URL 'anpassen
Do: Loop Until IEApp.Busy = False
Do: Loop Until IEApp.document.ReadyState = "complete"
For Each all In IEApp.document.all
spalte = 1 ' ## Quelle und Datum
If all.classname Like "txt1 signature" And all.nodename = "SPAN" Then
Tabelle1.Cells(zeile, spalte) = all.innertext
End If
spalte = 2 ' ## Titel
If all.classname Like "txt4_120 " And all.nodename = "H3" Or _
all.classname Like "txt4_120 marqueur_restreint" And all.nodename = "H3" _
Then
Tabelle1.Cells(zeile, spalte) = all.innertext
End If
spalte = 3 ' ## Text
If all.classname Like "txt3" Then
Tabelle1.Cells(zeile, spalte) = all.innertext
zeile = zeile + 1
End If
Next
IEApp.Quit
Set IEApp = Nothing
MsgBox "Fertig"
End Sub
Viele Grüße,
Zwenn
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige