Was trinkt Ihr? :15:
Ihr seid super. :18:
Vielen Dank an Günter, an Zwenn und an Fennek. Das sind zwei sehr elegante Lösungen von Zwenn und Fennek.
Hättet Ihr noch eine Lösung dafür, nur die IPs aus der Userliste zu kopieren? Quasi abzuschreiben?
Vielen Dank auch an Benutzer „snb“. Habe Deinen Beitrag gerade gesehen, aber noch nicht ausführen können. Mir brummt derzeit die Rübe…
LG
Hallo zusammen
@Fennek
Alles gut, ich habe gar nix persönlich genommen in irgend einer negativen Weise :)
@snb
Kann man so machen, ist dann aber (mit Verlaub) scheiße
- Warum sollte man sich die Arbeit machen die Seite vor jedem Abgleich manuell zu speichern
- Umlaute werden bei Deiner Lösung durch "den üblichen Kuddelmuddel" ersetzt -> Was da an Links rauskommt ist nicht brauchbar [Edit: Stimmt nicht. Die Links werden mit den %-Zeichen für URLs aufgebaut und funktionieren. Die Namen werden aber falsch dargestellt]
- Bei IP6 Adressen wirds ganz gruselig (sofern ich das richtig zugeordnet habe) [Edit: Habe ich nicht, weil die sind ja nicht User: sondern Special:Contributions. Aber irgendwo kam was ganz unleserliches raus. Edit 2: Habs gefunden. Der Username לערי ריינהארט wird unleserlich ausgegeben]
- Auch Du liest "nur" die User: aus (Was sich allerdings leicht beheben lässt)
- Dein Code setzt keine Links in die Excel Tabelle, sondern nur Strings
Nix desto trotz finde ich es immer gut auch andere Lösungsansätze zu sehen :) Zumal Dein Code echt schnell ist :28:
Viele Grüße,
Zwenn
@Zwenn
zum Testen mache ich das lokale Abspeichern auch, sofern man im UTF-8 Format speichert, geht das auch mit den Umauten.
Für "MSXML2.HTTP" ist es egal, ob man aus dem Web oder einer lokalen Text-Datei lädt.
so liest PS auch die IP's aus, bei IPv4 sieht es gut aus, bei IPv6 teilweise sehr merkwürdig:
Code:
$url = 'https://xtools.wmflabs.org/articleinfo/de.wikipedia.org/Kunst//2019-02-28?editorlimit=200'
$ret = iwr $url -DisableKeepAlive -UserAgent "Clever-Excel"
foreach ($lk in $ret.links) {
if ($lk.href.Contains('User:') -or $lk.href.contains('Special:Contributions')) { $lk.href }
}
Die Liste spare ich mir und dem Forum.
Hallo zusammen
@Fennek
Stimmt auffallend, was Du über UTF8 und MSXML2.HTTP schreibst :)
@Teamplayer
Ehrlich gesagt weiß ich nicht genau was Du meinst. Aber um nur die IP Adressen auszuzlesen kannst Du folgendes verwenden (inklusive IP6
) In Spalte 5 werden die Links generiert, in Spalte 4 werden die IP Adressen als Zeichenketten eingetragen:
Code:
Sub WikiIPsAuslesen()
Dim browser As Object
Dim url As String
Dim knotenUserTabelle As Object
Dim knotenAlleUser As Object
Dim knotenEinUser As Object
Dim userLink As String
Dim zeile As Long
Dim spalte As Long
zeile = 2
spalte = 5
'Parameter editorlimit auf 2000 damit alle User direkt in einer Tabelle aufgelistet werden
url = "https://xtools.wmflabs.org/articleinfo/de.wikipedia.org/Kunst//2019-02-28?editorlimit=2000"
'Internet Explorer initialisieren, Sichtbarkeit festlegen,
'URL aufrufen und warten bis Seite vollständig geladen wurde
Set browser = CreateObject("internetexplorer.application")
browser.Visible = False
browser.navigate url
Do Until browser.ReadyState = 4: DoEvents: Loop
'UserTabelle holen
Set knotenUserTabelle = browser.document.getElementsByClassName("table table-bordered table-hover table-striped top-editors-table")(0)
'NodeCollection aller Usereinträge erstellen
Set knotenAlleUser = knotenUserTabelle.getElementsByTagName("tbody")(0).getElementsByTagName("tr")
'Alle Charteinträge durchgehen
For Each knotenEinUser In knotenAlleUser
'IP Link auslesen
userLink = knotenEinUser.getElementsByTagName("a")(0).href
If InStr(1, userLink, "Special:Contributions") > 0 Then
Cells(zeile, spalte - 1).Value = Trim(knotenEinUser.getElementsByTagName("a")(0).innertext)
ActiveSheet.Hyperlinks.Add Anchor:=Cells(zeile, spalte), Address:=userLink, TextToDisplay:=userLink
zeile = zeile + 1
End If
Next knotenEinUser
'Aufräumen
browser.Quit
Set browser = Nothing
Set knotenUserTabelle = Nothing
Set knotenAlleUser = Nothing
Set knotenEinUser = Nothing
End Sub
Viele Grüße,
Zwenn
@Zwenn That's it ! Genau um die Einträge in Spalte 4 ging es mir. Danke
@Fen
Welche MSXML.XMLHTTP verzion hasst du ?
Welchen Code has du verwendest in diesem Fall ?
Mir gelingt es nicht mit:
PHP-Code:
With CreateObject("MSXML2.XMLHTTP")
.Open "Get", "URL", False
.send
c00 = .responseText
End With
Noch ne Frage
:
kann man die IPs in Spalte 4 so rüberholen, das alle im selben Format erscheinen? Excel rückt einige IPs nach rechts ein. Wenn ich draufklicke verschwinden die Trennpunkte. Die sollen aber erhalten bleiben! (Check Zeile 7 im Anhangbeispiel)
Hat das ne Lösung?
LG
@snb:
Ich hatte die Abfrage nur mit Powershell getestet.
Nachgeprüft:
In VBA ging es weder mit
CreateObject("MSXML2.XMLHTTP")
noch mit
CreateObject("MSXML2.ServerXMLHTTP")
Ein Blick in die Header (F12, Netzwerk): Die Seite ist "HTTP/2":
Zum Vergleich:
Youtube.com (Http/2) ging mit MSXML2.ServerHttp ebenso
www.herber.de (Http/1.1)
Deine Frage ist damit noch offen.