Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1004to1008
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
Webseiten aus Liste downloaden
27.08.2008 17:14:29
Markus
Hallo zusammen,
ich plane folgendes: Da Downloadmanager /-tools meist naive alle Links einer oder mehrere Linktiefen runterladen und somit viel Datenmüll produzieren, möchre ich via eines VBA -Makros zielgerichtet eine Liste an Webseiten runterladen, die in einer Exceltabelle steht. Diese Liste kann sehr lang sein, da sie von einem zweiten Makro generiert wurde (d.h. die URLs wurden unter Kenntnis des URL-Rewriting-Prinzip der Webseite erzeugt).
Hat jemand bereits ein Makro der ersten Art? Vom Funktionsprinzip müsste es die Webseite in Excel (oder IExplorer/Firefox) aufrufen und als *.html in einem vordefinierten Ordner ablegen. Hierbei bin ich rein am Text auf den Webseiten interessiert und die verlinkten Grafiken etc. können verworfen werden (d.h. diese brauchen in der heruntergeladenen Datei dann nicht dargestellt werden).
Mit bestem Dank und vielen Grüßen,
Markus

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Webseiten aus Liste downloaden
27.08.2008 19:52:48
Rolf
Hallo Markus!
Ich bin auch mit solchen Problem paar mal aufgetreten.
Ich wollte aus einer ComboBox aus einer Liste Links
wahlen und die Liste aus Links der Domäne laden.
mir wurde vorgeworfen das ich zuviel will!
Falls Du etwa sowas zusammen bastels-melde Dich!
Grüße
Rolf
AW: Webseiten aus Liste downloaden
27.08.2008 20:01:00
Markus
Hallo Rolf,
werde ich machen. Bis dato kann ich nur sagen, dass man "Microsoft Internet Control" & ActiveX aktivieren und nutzen muss. Wie das jedoch geht, ist mir noch ein Rätsel.
Melde mich, sobald ich etwas funktionstüchtiges habe...
VG, Markus
Anzeige
AW: Webseiten aus Liste downloaden
27.08.2008 20:23:00
Nepumuk
Hallo Markus,
das ist das ganz normale Webbrowser-Control. Das geht aber auch mit dem Internetexplorer. FF lässt sic nicht per VBA steuern.
Aber so ganz verstanden, was du eigentlich willst, habe ich noch nicht. Willst du Dateien runterladen oder einfach nur Seiten aus dem Web als Htm speichern?
Gruß
Nepumuk
AW: Webseiten aus Liste downloaden
27.08.2008 22:46:00
Markus
Hi Nepumuk,
ich will lediglich die Seiten in HTML in einem definierten Ordner speichern. Ich bin an den auf den Seiten enthaltenen Texten interessiert.
Es handelt sich um Pressemitteilungen, die jeweils auf einer eigenen HTML-Seite mit eigener URL stehen. Insgesamt mehr als Tausend, wobei ich die URLs über Excel selbst (nach)generieren kann und die Seiten gerne ohne manuelles anklicken ablegen würde. Danach werden sie, mit weiteren Dokumenten von einem zweiten Makro - welches bereits existiert - weiterverarbeitet. Der Bruch mit dem Zwischenspeichern im HTML-Format ist mir wichtig, d.h. ich will die Daten nicht gleich in Excel.
Danke für jedwege Hilfe!
Viele Grüße,
Markus
Anzeige
AW: Webseiten aus Liste downloaden
28.08.2008 00:57:00
Nepumuk
Hallo Markus,
ich musste gerade feststellen, dass es mit dem Internetexplorer (ab der Version 4.0) nicht mehr automatisch geht. Das wurde aus "Sicherheitsgründen" geblockt. Manuell, also mit jeweils einem Klick auf den Speicherbutton geht es so:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Sub Sleep Lib "kernel32.dll" ( _
    ByVal dwMilliseconds As Long)

Private Const OLECMDID_SAVEAS = 4
Private Const OLECMDEXECOPT_DONTPROMPTUSER = 2
Private Const READYSTATE_COMPLETE = 4

Public Sub prcSaveWebsite()
    Dim objBrowser As Object
    On Error GoTo error_exit
    Set objBrowser = CreateObject("Internetexplorer.Application")
    With objBrowser
        .Navigate ("http://www.herber.de/forum/")
        Application.StatusBar = "Suche Website..."
        Do While .Busy
            Sleep 100
        Loop
        Application.StatusBar = "Lade Website..."
        Do While .ReadyState <> READYSTATE_COMPLETE
            Sleep 100
        Loop
        .Width = 0
        .Height = 0
        .Visible = True
        .ExecWB OLECMDID_SAVEAS, OLECMDEXECOPT_DONTPROMPTUSER, "Test666", _
            "C:\Dokumente und Einstellungen\HP\Desktop\Neuer Ordner\"
        .Quit
    End With
    Set objBrowser = Nothing
    Application.StatusBar = False
    MsgBox "Webseite gespeichert!", vbInformation, "Information"
    Exit Sub
    error_exit:
    Application.StatusBar = False
    If Not objBrowser Is Nothing Then
        objBrowser.Quit
        Set objBrowser = Nothing
    End If
    MsgBox "Webseite NICHT gespeichert!", vbCritical, "Fehler"
End Sub

Bei meiner Recherche, warum es nicht mehr geht, bin ich auf einen Hinweis gestoßen, dass es mit dem FireFox-Browser funktionieren soll. Und zwar mit denselben Befehlen die auch der Microsoft-Browser benutzt. Da ich aber keinen FF auf meinem Rechner habe (und auch nicht für dich installiere) musst du das selber testen.
Gruß
Nepumuk
Anzeige
AW: Webseiten aus Liste downloaden
28.08.2008 10:21:31
Markus
Hallo Nepumuk,
dank Dir für den Code. Bei mir taucht jedoch ein Fehler auf (siehe Bild): Laufzeitfehler mit "Das aufgerufene Objekt wurde von den Clients getrennt".
Userbild
Zur Umgebung: WVista, Office 2007, IExplorer7
Zwar habe ich für die konkrete Anwendung nun schon den Code für eine Alternativlösung - welche Frames beim Speichern ausschließt - würde mich jedoch trotzdem freuen, falls Dir (bitte keinen großen Aufwand betreiben) eine Lösung einfällt, da das Frameproblem mit Deinem Code umgangen werden kann. Ausserdem kann der Code als Ausgangspunkt zum Steuern von Seiten dienen, was auch sehr hilfreich sein würde (bspw. wenn kein URL-Rewriting vorliegt, Hintergrund: Ich sammle aktuell systematisch Daten für meine Dipl.arbeit).
In jedem Fall nochmals besten Dank!
Viele Grüße,
Markus
Anzeige
AW: Webseiten aus Liste downloaden
28.08.2008 10:25:00
Markus
Noch ein Hinweis zum Fehler:
Er springt von der Zeile "Do While .Busy" direkt zur Zeile "objBrowser.Quit", ohne die sleep-Zeile aufzurufen oder die Schleife zu umgehen.
VG, Markus
@Rolf, du bist schon eine Nummer für sich!
28.08.2008 11:35:00
Tino
Hallo Rolf,
Hilfe hasst du bekommen, aber du hattest keine Lust dich selbst damit zu beschäftigen. (Faulheit)
Die Aussage „Also was Du machst- machst Du für dich und nicht für mich!“ war wohl der Oberhammer von Dir.
PS:ich werde Fragen von Dir gezielt aus dem Weg gehen und hoffe es gibt hier nicht noch einen Rolf der darunter zu leiden hat!
Gruß Tino
AW: @Rolf, du bist schon eine Nummer für sich!
28.08.2008 12:24:38
Rolf
Hallo Tino!
In diesem Forum scheibt man nicht du sondern Du(festgelegt von Hans)
Wen Du ein paar graue Zellen hast bedeutet das nicht das Du in VBA was
erreichen wirst.Ich bin kein Programmierer und Beschuldigungen als Faul
ist nicht zutreffend.Du solltest lieber sich von der Seite betrachten.
Rolf
Anzeige
AW: @Rolf, du bist schon eine Nummer für sich!
28.08.2008 12:37:22
Tino
"Du solltest lieber sich von der Seite betrachten" *kicher*
Verträgst wohl die Wahrheit nicht. ;-)
AW: Webseiten-HTML downloaden
28.08.2008 07:24:00
Erich
Hi Markus,
wenn du nur den reinen HTML-Quelltext einer Seite haben möchtest
(also auch ohne die Quelltexte eingebundener Frames), brauchst du gar keinen Browser.
Mit der Fkt. Get_Webfile(sURL As String) kannst du dir den Quelltext direkt abholen.
An zwei Stellen steht hxxp - die tt habe ich ersetzt, damit aus diesem Beitrag kein Link wird.
Die Quellen stehen oben im Code.

Option Explicit
' www.activevb.de/tipps/vb6tipps/tipp0227.html
' www.softgames.de/forum/frage114440.html
Private Declare Function InternetOpen Lib "wininet" Alias "InternetOpenA" ( _
ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, _
ByVal sProxyBypass As String, ByVal lFlags As Long _
) As Long
Private Declare Function InternetOpenUrl Lib "wininet" Alias "InternetOpenUrlA" ( _
ByVal hInternetSession As Long, ByVal lpszUrl As String, ByVal lpszHeaders As String, _
ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByVal dwContext As Long _
) As Long
Private Declare Function InternetReadFile Lib "wininet" ( _
ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, _
lNumberOfBytesRead As Long _
) As Long
Private Declare Function InternetCloseHandle Lib "wininet" ( _
ByVal hInet As Long _
) As Long
Private Const INTERNET_OPEN_TYPE_DIRECT = 1
Private Const INTERNET_FLAG_RELOAD = &H80000000
Sub Save_Webfile()                           ' speichert als Textfile
Dim strU As String, strE As String, kk As Integer
strU = "hxxp://www.herber.de/cgi-bin/tag1.pl"         ' URL anpassen
strE = Get_Webfile(strU)
kk = FreeFile(1)
Open "c:\temp\xxyycc.htm" For Output As #kk           ' Dateinamen anpassen
Print #kk, strE
Close kk
End Sub
Sub Test_Get_Webfile()                       ' speichert in Exceltabelle
Dim strU As String, strE As String, jj As Long
strU = "hxxp://www.herber.de/cgi-bin/tag1.pl"
strE = Get_Webfile(strU)
Columns(1).Clear
Columns(1).NumberFormat = "@"
jj = 0
While Len(strE) > 100 * jj
Cells(jj + 1, 1) = Replace(Mid(strE, 100 * jj + 1, 100), vbLf, "")
jj = jj + 1
Wend
End Sub
Function Get_Webfile(sURL As String) As String
Dim hOpen As Long, hFile As Long, strBuff As String, intA As Long
Const lngS As Long = 2048
hOpen = InternetOpen("ABC", INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
If hOpen Then
hFile = InternetOpenUrl( _
hOpen, sURL, vbNullString, ByVal 0&, INTERNET_FLAG_RELOAD, ByVal 0&)
If hFile Then
strBuff = Space(lngS)
Do
InternetReadFile hFile, strBuff, lngS, intA
Get_Webfile = Get_Webfile & Left(strBuff, intA)
Loop While intA > 0
InternetCloseHandle hFile
Else
Get_Webfile = "FEHLER hFile: " & hFile
End If
InternetCloseHandle hOpen
Else
Get_Webfile = "FEHLER hOpen: " & hOpen
End If
End Function

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Webseiten-HTML downloaden
28.08.2008 10:00:17
Markus
Hallo Erich,
danke für die erneute Hilfe! Der Code funktioniert und sollte auf die meisten Fälle passen, die mir begegnen werden. D.h. Frames etc. tauchen auf den Newsseiten selten auf und hiermit komm ich an die Texte ran.
Danke und viele Grüße,
Markus

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige