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

Zugriff auf Internetseite(n)

Zugriff auf Internetseite(n)
27.01.2009 08:53:00
Oberschlumpf
Hallo Leute
Diesmal hab ich ein (für mich) sehr großes Problem.
Erst mal zum Hintergrund:
Ich spiele in einem Verein Volleyball.
Wir verstehen uns alle so gut, dass wir irgendwann beschlossen, eine eigene Internetseite zu gestalten, auf der wir uns alle über alles Mögliche informieren (Ideen zur gemeinsamen Freizeitgestaltung, priv. Fotos, Bekanntgabe von vielleicht für alle interessante Events, Terminkalender für gemeinsame Unternehmungen, usw)
Der Name Seite lautet:
http://sonnenkinder.so.ohost.de
(den Namen nenn ich nur der Vollständigkeit halber - man kann nur die für mich wichtige Seite (Mitglieder) anklicken, wenn man eingeloggt ist)
Ich bin auf dieser Seite einer der Administratoren (zuständig für Accountpflege, Fotos "vorzeigbar" machen und zur Verfügung stellen, usw)
Problem:
Zur Zeit sind wir 30 Mitglieder auf dieser Seite.
Da aber das Interesse bei dem einen oder anderen schon mal verloren geht, verwandelt sich ein "aktiver Account" auch mal in eine "Karteileiche".
Und genau diese Accounts möchte ich löschen.
Zur Zeit kann ich das aber nur, in dem ich mir zu jedem einzelnen Account die Detailinfos anzeigen lasse, in denen auch das letzte Anmeldedatum steht, an dem ich entscheide, ob Karteileiche oder nich.
Frage:
Da ich ungern weiterhin 30 mal klicken möchte (30 Accounts = 30 x klicken für Details), würd ich gern die Detailseiten aller Accounts in Excel einlesen, damit ich auf einen Blick sehe, wer sich wann das letzte Mal einloggte.
Wie geht das?
Problem 2:
Da ich euch aus datenschutzrechtlichen Gründen keinen Zugriff auf "unsere" Seite geben kann, habe ich mal diese Seite ausgesucht, da sie vom Prinzip genau so aufgebaut ist, wie unsere Mitglieder-Seite:

http://www.denic. _
de/de/denic/mitgliedschaft/mitgliederliste/index.
jsp


(Das JSP müsst ihr bitte ans Ende des Links anhängen, weil der Link vollständig nicht darstellbar ist - auch der Zeilenumbruch ist nicht von mir gewollt)
Also....
Diese Liste zeigt alle Mitglieder, die sich bei der DENIC registriert haben.
Und wenn man nun einen dieser Links anklickt, werden zum jeweiligen Mitglied Detailinfos angezeigt.
Und genau darum geht es mir:
1. Als Start habe ich die Mitgliederliste
2. Nun möchte ich mit VBA nacheinander die Mitglieder "anklicken", um die Detailinfos nach Excel zu übertragen.
Da ich noch keine Bsp-Datei habe, würd es mir schon reichen, wenn die Details einfach ab Zelle A1 eingetragen werden.
Sollte ich für euch wichtige Infos vergessen haben, dann fragt mich, und ich antworte.
Sehr vielen Dank schon mal für euer Bemühen!
Ciao
Thorsten

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Membersuche im Internet
27.01.2009 09:10:01
RS
Hi Thorsten,
so wie es aussieht, wird auf deiner Beispielseite folgendes Schema gebraucht:
Jeder Member hat eine 'fortlaufende' Nummer.
Diese wird an den ursprünglichen Link als Abfrage angehängt.
Du könntest also für deine Seite so vorgehen:
Mach eine neue Webabfrage (Daten-Webabfrage) auf deinen ersten Member

http://www.denic.de/de/denic/mitgliedschaft/mitgliederliste/allDetail.jsp?member=DENIC-1


Jetzt kannst Du per VBA jeweils den Connection-String des Queryobjekts ändern (d.h. die Mitgliedernummer wechsel) und einen .Refresh auf das Query sollte dir die Detaildaten zurückgeben.
Alles klar?
Grüsse RS

Anzeige
AW: Membersuche im Internet
27.01.2009 09:20:00
Oberschlumpf
Hi
Ja, DANKE, ich glaube, genau DAS ist es!
Ich wird das jetzt mal in Ruhe testen, und wenn ich mit allem durch bin, melde ich mich wieder.
Cool, danke für den Tipp mit der ID.
Was bedeutet RS - oder - wie ist dein Name?
Ciao
Thorsten
AW: Membersuche im Internet
27.01.2009 09:28:46
RS
Hi Thorsten,
Ich habe noch folgendes festgestellt, was bei deiner Liste vielleicht ebenfalls zu Problemen führen könnte:
Die Member-ID ist nicht fortlaufend vergeben.
Tip: Webabfrage mit Eigenschaft

.WebFormatting = xlWebFormattingAll

definieren.
Jetzt kannst du die ID's direkt aus den Hyperlinks der Tabelle auslesen!
Grüsse eReS

Anzeige
AW: Membersuche im Internet
27.01.2009 09:32:00
Oberschlumpf
Hi
Hmm...schade für die Namensdefinition (RS = eReS)
ich finde...alle SIND gleich...und nicht manche sind gleicher....na ja
deswegen sollten sich auch alle an alle Regeln halten....
Danke für den 2. Tipp - da weiß ich aber noch nicht genau, wo und wie ich den anwenden kann/soll...aber das find ich schon raus
Ciao
Thorsten
AW: Zugriff auf Internetseite(n)
27.01.2009 09:46:20
Tino
Hallo Thorsten,
hier mal eine Möglichkeit die member und deren Link auszuerlesen.
'Verweis: Microsoft HTML Object Library 
Sub Links_von_einer_Seite_lesen()
Dim objMSHTML As New MSHTML.HTMLDocument
Dim Doc As MSHTML.HTMLDocument
Dim i As Integer
Set Doc = _
objMSHTML.createDocumentFromUrl("http://www.denic.de/de/denic/mitgliedschaft/mitgliederliste/index.jsp", vbNullString)
DoEvents

For i = 0 To Doc.all.tags("a").Length - 1
 If InStr(Doc.body.all.tags("a")(i), "?member=DENIC") > 0 Then
    Debug.Print Doc.body.all.tags("a")(i).innerText, Doc.body.all.tags("a")(i)
 End If
Next i

End Sub


Vielleicht kannst Du damit etwas anfangen.
Gruß Tino

Anzeige
AW: Zugriff auf Internetseite(n)
27.01.2009 10:13:00
Oberschlumpf
Hi Tino!
Auch an dich ein großes Danke schön für deine Mühe.
Wenn ich dein Bsp richtig verstehe, liest dein Code erst mal nur die Links aus (inkl Anzeigetext), die zu den Details der Mitglieder führen.
D. h., nun müsste ich die "gefundenen" Links weiter verarbeiten, damit ich schlussendlich an die Infos rankomme, die mich interessieren?
Ich versuche gerad erst mal das Bsp von RS zu verstehen und umzusetzen.
Und bis jetzt glaub ich, dass ich damit schneller zu meinem Ziel komme.
Wenn ich noch Fragen habe - aber natürlich auch - wenn ich es geschafft habe, melde ich mich wieder.
Danke!
Ciao
Thorsten
Anzeige
AW: Zugriff auf Internetseite(n)
27.01.2009 10:29:00
Tino
Hallo,
mein Gedanke war, um zu den Details zu kommen braucht man ja den Link.
(unbekannt ist die Anzahl der memper auf dieser Seite und deren weiterführender Link)
Mit dem Link kann man nun den Body der memper lesen,
müsste man halt etwas rumspielen wie es am effektivsten geht.
Gruß Tino
AW: Zugriff auf Internetseite(n)
27.01.2009 10:43:27
Oberschlumpf
Hi
Ja, du hast ja Recht.
Um an die Detailinfos zu kommen, benötige ich den weiterführenden Link.
Aber mit der Idee des 1. Antwortenden, starte ich (mit Makroaufzeichnung) in Excel eine WEB-Abfrage mit dem ersten weiterführenden Link zur Detailseite "unseren" ersten Volleyball-Mitglieds, und modifiziere danach den Code so, dass mit Hilfe einer For/Next-Schleife die Detailseiten all unserer Mitglieder in Excel eingelesen werden - vorm Einlesen der jeweils nächsten Seite, "greife" ich mir die Infos raus, die mich interessieren.
So weit zumindest meine Idee, wie ich das umsetzen will.
Was dabei rauskommt...demnächst in diesem Thread ;-)
Ciao
Thorsten
Anzeige
die Lösung - Frage beantwortet!
27.01.2009 11:44:13
Oberschlumpf
Hallo Leute
Hier nun meine vorläufige Lösung:

Sub Einlesen()
Dim lstrURL As String, liDurchlauf As Integer, liFreieZeile As Integer, larstrUser() As  _
String, liZeile As Integer
Application.ScreenUpdating = False
lstrURL = "URL;http://kann
ich leider nicht verraten.de"
With Sheets(2)
If .Cells(Rows.Count, 1).End(xlUp).Row > 5 Then
.Range("A5:C" & .Cells(Rows.Count, 1).End(xlUp).Row).ClearContents
End If
End With
For liDurchlauf = 1 To 50
Sheets(1).Activate
With ActiveSheet.QueryTables.Add(Connection:=lstrURL & liDurchlauf, Destination: _
=Range("A1"))
.Name = "userinfo.php&id=1"
.FieldNames = True
.PreserveFormatting = True
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
.WebTables = "23"
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.Refresh BackgroundQuery:=False
End With
liFreieZeile = Sheets(2).Cells(Rows.Count, 1).End(xlUp).Row + 1
With ActiveSheet
larstrUser = Split(.Range("A1").Value, " ")
If LCase(larstrUser(UBound(larstrUser)))  "von" Then
Sheets(2).Range("A" & liFreieZeile).Value = larstrUser(UBound( _
larstrUser))
For liZeile = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
Select Case .Range("A" & liZeile).Value
Case "Zuletzt online"
Sheets(2).Range("B" & liFreieZeile).Value =  _
Left(.Range("B" & liZeile).Value, 10)
Case "E-Mail"
Sheets(2).Range("C" & liFreieZeile).Value = . _
Range("C" & liZeile).Value
End Select
Next
End If
.Cells.ClearContents
.Range("A1").QueryTable.Delete
End With
Next
Application.ScreenUpdating = True
End Sub


Mit Hilfe des 1. Antwortenden hab ich eigtl. genau das erreicht, was ich wollte.
Der Code wird bei euch so nicht funktionieren, da ich ja den Link nicht verraten kann.
Das Finetuning - die Darstellung, Logik, etc - schaff ich (hoffentlich)alleine.
VIELEN DANK an ALLE Helfenden!
Ciao
Thorsten

Anzeige
Achtung, QueryTable.Add
27.01.2009 12:05:13
RS
Hi Thorsten,
Schön das du das Problem lösen konntest.
Ich will dich trotzdem noch auf einen entscheidenen "Flaw" in deinem Code aufmerksam machen!
Du addierst mit der .Add Methode jedesmal ein neues Queryobjekt. Auch wenn du die Zellen leerst, dieses Objekte werden dir Deine Exceltabelle irgendwann explodieren lassen. Du kannst das in einem VBE-Direktfenster mal überprüfen mit:
?ActiveSheet.QueryTables.Count
Eigentlich genügt 1 einziges Queryobjekt, in dem du in der Schleife nur die .Connection Eigenschaft änderst und die .Refresh darauf anwendest.
Grüsse RS
Anzeige
AW: Achtung, QueryTable.Add
27.01.2009 12:18:00
Oberschlumpf
Hi
Dieses Problem hatte ich berücksichtigt.
Mit der Zeile

.Range("A1").QueryTable.Delete


wird innerhalb der Schleife jedes Mal die Webabfrage gelöscht.
Hab ich gerad nach mehreren Durchläufen (1 Durchlauf = 50x) getestet mit:
msgbox ActiveSheet.QueryTables.Count
Das Ergebnis ist 0
Dann hatte ich die .Range(A1)... Zeile gelöscht, Makro gestartet, und danach war das Ergebnis = 50
Aber trotzdem ist deine Idee mit nur 1x QueryTable.Add, und erst dann die Schleife starten, besser programmiert.
Nur leider weiß ich nicht, wie und wo ich den Code ändern müsste.
Würde mich freuen, wenn du mir da auf die Sprünge hilfst.
Thx & Ciao
Thorsten

Anzeige
Habe übersehen, dass du ja
27.01.2009 12:36:44
RS
mit mehreren Sheets arbeitest und nur jeweils 1 .Add hast.
Dann ist das so wie Du es machst schon OK.
Grüsse RS

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige