Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1272to1276
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

Mehrseitige Webseite auslesen mit Hyperlinks

Mehrseitige Webseite auslesen mit Hyperlinks
Beverly
Hi Helfer,
ich habe folgende Aufgabe: aus einer Webseite, bestehend aus mehreren (45) Unterseiten, sollen die Inhalte aller Unterseiten ausgelesen werden. Ich habe das realisiert, indem ich in einer Schleife mehrere Webabfragen tätige. Der Code sieht so aus (ist mit dem Makrorekorder aufgezeichnet und dann in eine Schleife umgewandelt):
Sub WebseitenAuslesen()
Dim intZaehler As Integer
Dim lngZeile As Long
intZaehler = 1
lngZeile = 35
Application.ScreenUpdating = False
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;https://portal.bvl.bund.de/psm/jsp/ListeMain.jsp?page=1&ts=1343843509938" _
, Destination:=Range("$A$1"))
.Name = _
"ListeMain.jsp?page=1&ts=1343843509938"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlAllTables
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
For intZaehler = 2 To 45
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;https://portal.bvl.bund.de/psm/jsp/ListeMain.jsp?page=" & intZaehler,  _
Destination:= _
Cells(lngZeile, 1))
.Name = "ListeMain.jsp?page=" & intZaehler
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlAllTables
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
lngZeile = lngZeile + 35
Next intZaehler
Application.ScreenUpdating = True
End Sub

Es funktionert, aber dauert sehr lange. Außerdem werden damit nur die Inhalte als Text ausgelesen, Forderung ist jedoch, auch die enthaltenen Hyperlinks (irgendwie) in das Tabellenblatt mit zu übernehmen. Ich habe mir schon im Archiv die verschiedenen Beiträge angeschaut und auch in anderen Foren gesucht, aber noch keine Lösung für folgende Probleme gefunden:
1. Hyperlinks aus einer Webseite zu übernehmen
2. komfortabel mehrere Webseiten auszulesen
Hat jemand eine Lösung für diese beiden Probleme und wenn ja, wie würde diese aussehen?


5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Mehrseitige Webseite auslesen mit Hyperlinks
02.08.2012 22:33:32
Nepumuk
Hallo,
an Stelle von:
.WebFormatting = xlWebFormattingNone
einfach:
.WebFormatting = xlWebFormattingAll
Ist dir schon klar dass du jedes mal wenn du dein Makro startest neue Abfragen erzeugst und nicht nur die Daten aktualisierst?
Gruß
Nepumuk
AW: Mehrseitige Webseite auslesen mit Hyperlinks
03.08.2012 09:15:40
Beverly
Hi Nepumuk,
vielen Dank für deinen Beitrag - mit xlWebFormattingAll funktioniert es korrekt.
Darauf hätte ich eigentlich auch selbst kommen können, wenn ich beim Aufzeichnen des Codes die richtige Einstellung unter den Optionen aktiviert hätte.
Dass jedes Mal bei Makroausführung neue Webabfragen abgelegt und nicht die vorhandenen aktualisiert werden ist mir klar. Um das zu ändern müsste man nur (wenn ich das richtig sehe) in der Zeile
.RefreshPeriod = 0

anstelle der 0 eine Zahl (in Minuten gesehen) eintragen, in welcher Zeitperiode aktualisiert werden soll. Aber zum gegenwärtignen Bearbeitungszeitpunkt bestehen noch so viele Unklarheiten, sodass ich mir um diese Angelegenheit noch gar keine Grdanken gemacht hatte. Deshalb schon mal Danke auch für diesen Hinweis.
Wie schon geschrieben, dauert das Ganze bei 45 Seiten doch recht lange (&gt 10 min). Vielleicht hast du (oder ein anderer Helfer) ja auch noch eine Idee, wie man die Performance wesentlich verbessern könnte.
Ich habe den Code übrigens noch vereinfachen können, mir ist nur nicht klar, weshalb es beim ersten Mal nicht entsprechend funktioniert hat und ich die 1. Seite nicht schon von Beginn an in die Schleife mit einbinden konnte:
Sub WebseitenAuslesen()
Dim lngZeile As Long
Dim intZaehler As Integer
Application.ScreenUpdating = False
intZaehler = 1
lngZeile = 1
For intZaehler = 1 To 45
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;https://portal.bvl.bund.de/psm/jsp/ListeMain.jsp?page=" & intZaehler & _
"&ts=1343976582485", Destination:=Cells(lngZeile, 1))
.Name = "ListeMain.jsp?page=" & intZaehler & "&ts=1343976582485"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = False
.RefreshOnFileOpen = True
.BackgroundQuery = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 60
.WebSelectionType = xlAllTables
.WebFormatting = xlWebFormattingAll
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
lngZeile = lngZeile + 36
Next intZaehler
Application.ScreenUpdating = True
End Sub



Anzeige
AW: Mehrseitige Webseite auslesen mit Hyperlinks
03.08.2012 09:25:24
Beverly
vergessen, Frage auf offen zu stellen


Mehrseitige Webseite auslesen mit Hyperlinks
03.08.2012 09:43:03
Anton
Hallo Karin,
probier sowas:
Public zeile As Long
Public IEApp As Object
Sub b()
zeile = 2
Application.ScreenUpdating = False
With Tabelle1
.Cells(1, 1) = "Handelsbezeichnung"
.Cells(1, 2) = "Zul.-Nr."
.Cells(1, 3) = "Zul.-Ende"
.Cells(1, 4) = "Wirkstoff"
.Cells(1, 5) = "Wirkungsbereich"
.Cells(1, 6) = "in Haus und" & vbLf & "Kleingarten zulässig"
End With
Set IEApp = CreateObject("InternetExplorer.Application")
IEApp.Visible = True
WebseitenAuslesen "https://portal.bvl.bund.de/psm/servlet/HandlerSuchForm?gesamt=true"
For page = 2 To 45
WebseitenAuslesen "https://portal.bvl.bund.de/psm/jsp/ListeMain.jsp?page=" & page
Next
IEApp.Quit
Set IEApp = Nothing
Tabelle1.Columns.AutoFit
Application.ScreenUpdating = True
End Sub
Function WebseitenAuslesen(adresse)
IEApp.Navigate adresse
Do: Loop Until IEApp.Busy = False
Do: Loop Until IEApp.Busy = False
Set IEDocument = IEApp.Document
Do: Loop Until IEDocument.ReadyState = "complete"
Set div = IEDocument.getElementById("tabPsm")
If Not div Is Nothing Then
For Each all In div.all
If all.nodename = "TABLE" Then
For zeilen = 1 To all.Rows.Length - 1
spalte = 1
For zellen = 0 To all.Rows(zeilen).Cells.Length - 1
If all.Rows(zeilen).Cells(zellen).innertext  "" Then
Tabelle1.Cells(zeile, spalte) = all.Rows(zeilen).Cells(zellen).innertext
spalte = spalte + 1
End If
Next
If Tabelle1.Cells(zeile, 1)  "" Then
Tabelle1.Cells(zeile, 1).Hyperlinks.Add Tabelle1.Cells(zeile, 1), _
"https://portal.bvl.bund.de/psm/jsp/DatenBlatt.jsp?kennr=" & Tabelle1.Cells(zeile, _
2)
Tabelle1.Cells(zeile, 2).Hyperlinks.Add Tabelle1.Cells(zeile, 2), _
"https://portal.bvl.bund.de/psm/servlet/HandlerSuchFormAWG?page=alleAW&kennr=" &  _
_
Tabelle1.Cells(zeile, 2)
zeile = zeile + 1
End If
Next
End If
Next
End If
Set IEDocument = Nothing
End Function

mfg Anton
Anzeige
AW: Mehrseitige Webseite auslesen mit Hyperlinks
03.08.2012 12:40:33
Beverly
Hi Anton,
das funktioniert ganz hervorragend und dauert nur 1 Minute - damit kann ich absolut leben ;-).
Herzlichen Dank für den Code.


Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige