Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhalt aus Internet in Tabelle einfügen
18.02.2018 09:48:23
Christian
Hallo,
bitte helft mir.
https://www.offiziellecharts.de/charts/single/for-date-1135930830000
Seht ihr die Möglichkeit, hieraus eine Liste zu erstellen, Spalte A Platzierung, Spalte B Interpret, Spalte C Titel.
Wenn ich es von der seite nach Excel kopiere kommt vieles in eine Zelle und ich weiß nicht wie ich es trennen soll.
Viele Grüße
Christian

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Inhalt aus Internet in Tabelle einfügen
18.02.2018 09:52:35
Hajo_Zi
Hallo Cristian,
Daten, Externe Daten abrufen, aus web, Adresse eingeben und OK.
Alles löschen was Du nicht brauchst.

Ich gebe keinen Dank für eine Rückmeldung, da ich durch solche Beiträge nicht meine Beitragszahl erhöhen muss.
Also ich schreibe keine Beiträge mit dem Betreff "Gerne u. Danke für die Rückmeldung....."
Rückmeldung ist ja in der Heutigen Zeit nicht üblich und die wenigen die eine Rückmeldung geben,
mögen mir das verzeihen, das kein Danke für eine Rückmeldung kommt.
Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
Anzeige
AW: Inhalt aus Internet in Tabelle einfügen
18.02.2018 09:59:28
Christian
Hallo Hajo,
das ist ja mein Problem, nicht kopieren und einfügen.
Mein Problem ist, dass ich wenn alles eingefügt ist ich anfangen müsste aus ca. 200000 Zeilen händig das zu löschen was ich nicht brauche, weil eben alles in einer Zelle steht.
Gruß
Christian
AW: Inhalt aus Internet in Tabelle einfügen
18.02.2018 10:02:33
Hajo_Zi
Hallo Christian,
dazu kann ich nichts schreiben was wohl daran liegt das ich nicht paar tausend Zeilen haben sondern nur 171.
Gruß Hajo
AW: Inhalt aus Internet in Tabelle einfügen
18.02.2018 10:09:40
Christian
Hallo Hajo,
hier mal 100 Zeilen, der Rest ist vom Aufbau her identisch, nur andere Texte.
https://www.herber.de/bbs/user/119886.xlsx
bin allerdings hingegangen und habs per Copy + Paste gemacht, sonst wird ja noch mehr Sachen kopiert die ich nicht brauche.
Alles was im Internet in der rechten Spalte steht, kann ich ja mit der Formel
WENNFEHLER(LINKS(D1;FINDEN(" In Charts";D1)-1);D1)
löschen aber das trennt immer noch nicht Interpret, Titel und Plattenlabel.
Verstehst du jetzt was ich meine?
Gruß
Christian
Anzeige
AW: Inhalt aus Internet in Tabelle einfügen
18.02.2018 12:54:31
Günther
Moin Christian,
wenn ich mir das ansehe sind das aber 2 komplett verschiedene Baustellen. Eine in Flensburg, die andere in Garmisch. Oder andersherum gesagt: die Muster-Datei ist vom Aufbau her grauenhaft; hier die 3 relevanten Spalten zu extrahieren ist eine ganz elende Arbeit (die sich aber durchaus beispielsweise mit VBA vielleicht aber auch mit Power Query erledigen lässt).
Ganz anders sieht es aus, wenn du die Daten direkt aus dem Internet ziehen willst. Da du Office 365 hast, kannst du die Daten direkt aus dem Netz ziehen. Kein copy/paste, keine antiquierten Methoden der Webabfrage. Beispiele findest du in meinem Blog: http://www.excel-ist-sexy.de/kategorie/power-query/web-abfragen/ - Da kannst du dann wunderschön die 3 gewünschten Spalten extrahieren/separieren und mit 3 Formeln auch noch die überflüssigen Leerstellen löschen (oder ohne die PQ-Formeln hinterher direkt in Excel erledigen lassen). Ich habe das mal für die aktuellen Daten erledigt und das Ergebnis siehst du hier: https://www.herber.de/bbs/user/119888.xlsx
Das schöne bei der Power Query Lösung: ein Klick auf Aktualisieren und du hast den neuesten Stand der Daten sofort in der erzeugten Tabelle. Diese Lösung kann ich dir für künftige Abfragen nur ans Herz legen.
Beste Grüße
Günther
Anzeige
AW: Inhalt aus Internet in Tabelle einfügen
18.02.2018 14:53:04
Christian
Hallo Günther,
die Bsp Datei hat zeigen sollen wie es zur Zeit aussieht wenn ich die Daten in die Tabelle kopiere und zeigen wo das Problem besteht, dass alles in eine Zelle geschrieben wird.
Habe jetzt folgende Schritte gemacht:
1. Neue Abfrage - Aus anderen Quellen - Aus dem Web
2. URL eingegeben als Standard
3. Im Navigator Tabelle1 ausgewählt und Bearbeiten
4. Spalte 4 nach Trennzeichen #(lf) geteilt, alle anderen Einstellungen gelassen
5. alle Spalten außer Platzierung, Interpret und Titel gelöscht
6. auf Schließen und Laden geklickt.
Dabei ist das hier herausgekommen.
https://www.herber.de/bbs/user/119890.xlsm
habe gleichzeitg ein Makro aufgezeichnet
es ist ja ziemliche Arbeit, jedesmal für jede der 2000 Seiten jede der Schritte neu ausführen zu müssen, kann man das Makro so ändern, dass ich eine Liste mit den Links erstelle, das Makro die Schritte für jeden der Links übernimmt und die Ergebnisse aller Abfragen dann untereinander auflistet?
Der Aufbau ist ja bei jedem Link identisch, außer das es mal 50, mal 75 mal 100 Songs sein können.
Ansonsten wäre das ja unendlich viel Arbeit.
Gruß
Christian
Sub Makro2()
' Makro2 Makro
ActiveWorkbook.Queries.Add Name:="Table 1", Formula:= _
"let" & Chr(13) & "" & Chr(10) & "    Quelle = Web.Page(Web.Contents(""https://www. _
offiziellecharts.de/charts/single/for-date-221145580000""))," & Chr(13) & "" & Chr(10) & "    Data1 = Quelle{1}[Data]," & Chr(13) & "" & Chr(10) & "    #""Geänderter Typ"" = Table.TransformColumnTypes(Data1,{{""Column1"", Int64.Type}, {""Column2"", Int64.Type}, {""Column3"", type text}, {""Column4"", type text}})," & Chr(13) & "" & Chr(10) & "    #""Spalte nach Trennzeichen teilen"" = Table.Spli" & _
"tColumn(#""Geänderter Typ"", ""Column4"", Splitter.SplitTextByDelimiter(""#(lf)"",  _
QuoteStyle.Csv), {""Column4.1"", ""Column4.2"", ""Column4.3"", ""Column4.4"", ""Column4.5"", ""Column4.6"", ""Column4.7"", ""Column4.8"", ""Column4.9""})," & Chr(13) & "" & Chr(10) & "    #""Geänderter Typ1"" = Table.TransformColumnTypes(#""Spalte nach Trennzeichen teilen"",{{""Column4.1"", type text}, {""Column" & _
"4.2"", type text}, {""Column4.3"", type text}, {""Column4.4"", type text}, {""Column4. _
5"", type text}, {""Column4.6"", type text}, {""Column4.7"", type text}, {""Column4.8"", type text}, {""Column4.9"", type text}})," & Chr(13) & "" & Chr(10) & "    #""Entfernte Spalten"" = Table.RemoveColumns(#""Geänderter Typ1"",{""Column4.3"", ""Column4.4"", ""Column4.5"", ""Column4.6"", ""Column4.7"", ""Co" & _
"lumn4.8"", ""Column4.9"", ""Column2"", ""Column3""})" & Chr(13) & "" & Chr(10) & "in" & _
Chr(13) & "" & Chr(10) & "    #""Entfernte Spalten"""
Sheets.Add After:=ActiveSheet
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""Table 1""; _
Extended Properties=""""" _
, Destination:=Range("$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [Table 1]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "Table_1"
.Refresh BackgroundQuery:=False
End With
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
Rows("1:1").Select
End Sub

Anzeige
AW: Inhalt aus Internet in Tabelle einfügen
18.02.2018 15:14:33
Zwenn
Hallo Christian,
Günther hat Dir eine Lösung mit Power Query aufgezeigt. Das ist auch ein echt gutes Werkzeug, für das was Du eigentlich willst aber ungeeignet, wenn ich es richtig verstanden habe. Du willst nicht nur eine Liste auslesen, sondern viele dieser Chartlisten, richtig?
Dafür würde ich ein Makro programmieren, dass direkt auf den HTML Code der Seiten zugreift (genauer auf das DOM - Document Object Model) und dort genau die Infos rausholt, die Du haben möchtest. Was anderes macht PQ nach meinem Verständnis auch nicht, kann das aber immer nur für eine Tabelle zur Zeit. In einem entsprechenden Makro kann man aber die Rahmenbedingungen selber festlegen. Z.B. kann man ganze Zeitintzervalle in einem Rutsch einlesen lassen. Man kann auch festlegen, welche Listen es sein sollen. Sigles, Alben und was die sonst noch so abbilden.
Dazu baut man einfach in einem ersten Schritt die Links auf die gewünschten Listen zusammen und klappert die dann in einem zweiten Schritt alle ab. Dabei kann man alle Chartlisten entweder in eine Tabelle oder jede Chartliste in eine eigene Tabelle einlesen.
Die große Zahl für das Datum am Ende der Links, sind die Millisekunden seit dem 01.01.1970 um 23:00 Uhr. Man kann die also sehr leicht ausrechnen.
Wieviele von den Listen brauchst Du denn und liegen sie in zusammenhängenden Zeitintervallen?
Viele Grüße,
Zwenn
Anzeige
AW: Inhalt aus Internet in Tabelle einfügen
18.02.2018 15:57:40
Christian
Hallo Zwenn,
wieviele sind es insgesamt, ca. eine pro Woche seit dem 1.1.1977
Zusammenhängende Zeitintervalle gibt es, jeden Montag vom 3.1.77 bis einschließlich 31.10.05
Und dann jeden Freitag vom 4.11.05 bis heute.
Allerdings an folgenden Montagen sind keine Charts erschienen.
31.12.84
30.12.85
29.12.86
28.12.87
2.1.89
1.1.90
31.12.90
30.12.91
28.12.92
27.12.93
26.12.94
1.1.96
30.12.96
29.12.97
4.1.99
3.1.00
1.1.01
31.12.01
30.12.02
29.12.03
Bis einsschließlich den Charts vom 31.12.79 sind es 50 Songs pro Liste, dann vom 7.1.80 bis einschließlich 7.8.89 sind es 75 Songs pro Liste, seit den Charts vom 14.8.89 bis heute sind es 100 Songs.
Hoffe das hilft weiter.
Gruß
Christian
Anzeige
AW: Inhalt aus Internet in Tabelle einfügen
18.02.2018 17:31:42
Zwenn
Hallo Christian,
du beschäftigst Dich schon länger mit dem Thema oder? Also ich wußte jedenfalls nicht, dass es bestimmte Wochen gab, in denen keine Wochencharts ausgegeben wurden.
Das ist eine wichtige Info, um doppelte Auslesungen zu vermeiden. Das kann man vermutlich so allgemein programmieren, dass es ggf. auch für die Zukunft greift. Wobei das Phänomen ja seit 2004 wohl nicht mehr auftaucht. Auf der Seite einer Liste stehen immer die Daten, von wann bis wann eine Liste Gültigkeit hat. Man vergleicht dann einfach, ob ein errechnetes Wochendatum innerhalb dieser Datumsgrenzen liegt. Wenn ja, fliegt der Ausleseauftrag aus der abzuarbeitenden Liste raus.
Wieviele Songs oder Alben es pro Liste sind spielt keine Rolle. Durch die Strukturierung des HTML Codes, der eine solche Liste abbildet und die Art und Weise, wie man darauf zugreift, werden immer genau soviele Positionen ausgelesen, wie vorhanden sind. Die Seiten liegen sehr 'auslesefreudlich' vor, soweit ich es bisher gesehen habe.
Bis wann benötigst Du denn eine Lösung? Ich bin zwar schon ein fortgeschrittenes Semester, mache aber trotzdem grade noch ein Fernstudium an der Fernuni Hagen und schreibe kommenden Samstag eine Klausur. Darüber hinaus habe ich noch ein weiteres Projekt zum Auslesen von Daten aus dem Internet am Laufen, welches ich zum Abschluss bringen will.
Viele Grüße,
Zwenn
Anzeige
AW: Inhalt aus Internet in Tabelle einfügen
18.02.2018 17:45:31
Christian
Hallo Zwenn,
also erst einmal vielen Dank dass du vorhast, dir so eine Mühe zu machen, ursprünglich dachte ich eigentlich nur an eine Lösung wie ich aus dem was ich als Beispieldatei geschickt hatte (also nachdem ich einfach diese Tabellen per copy + paste eingefügt habe), die Spalte D entsprechend meines Wunsches aufteilen kann.
Das sich das so weit automatisieren lässt ist mir neu.
Auch wenn ich von VBA fast keine Ahnung habe, du sprichst von Zeitintervallen. Kann man nicht einfach sagen ein Intervall von 3.1.77 bis 31.10.05 und das andere von 4.11.05 bis heute.
Und dann einfach sagen, wenn keine Tabelle gefunden wird, nimm automatisch das nächste Datum.
Anstatt 20 einzelne Intervalle vorzugeben?
Was ich mir wünschen würde, wenn es nicht zuviel Aufwand ist, das ich eine Mappe mit 42 Blättern vorgebe, jedes mit einer Jahreszahl von 1977-2018 benannt.
Und das Makro dann den Inhalt in die Tabelle entsprechend der Jahreszahl kopiert. Geht das auch?
Zu der Zeit, es muss natürlich nicht heut nacht um 12 fertig sein, wenn man bedenkt dass ich ja auch berufstätig bin hätte das sicher ein paar Wochen gedauert bis ich das händig erstellt hätte.
Ich sag mal so ich bin vom 12. bis 23. März auf Dienstreise wenn ichs bis dahin hab wär schön, falls nicht, kannst du dir auch Zeit lassen bis ich zurück bin.
Gruß
Christian
Anzeige
AW: Inhalt aus Internet in Tabelle einfügen
18.02.2018 17:43:50
Günther
Moin Christian,
vorab möchte ich anmerken, dass ich in Sachen Musik und insbesondere was Charts etc. angeht, praktisch eine Null bin. Manches habe ich mir zusammengereimt, den einen oder anderen Interpreten bzw. Gruppe kenne ich durch meine Kinder. ;-)
Wenn ich dich richtig verstanden habe, hast du ja bereits eine Liste mit den ganzen Werten, von denen du aber nur einen speziellen Teil (nämlich die bereits angesprochenen 3 Spalten) brauchst. Ganz einfach weil es mich gereizt hat habe ich mir das mal vorgenommen und vom Prinzip her mit Power Query gelöst. Ich räume ein, dass ich mich wahrscheinlich mit VBA etwas leichter getan hätte, aber im Moment reite ich auf der Welle PQ, weil sie (es) doch erheblich anwenderfreundlicher ist.
Ein noch rudimentäres Zwischenergebnis siehst du in der angehängten Datei. Da ich gemerkt habe, dass du die Schritte einer Abfrage durchaus lesen und interpretieren kannst, werde ich mich auf die wichtigsten Erklärungen beschränken. - Da das Pipe-Symbol (|) in keiner der Zeilen vorkommt, habe ich das als Trennzeichen für spätere Spalten festgelegt. Bei den Verlagen (Plattenlabel) war ich mir ziemlich sicher, wie die heißen; darum habe ich dort (nach besten Wissen und Gewissen) alle durch ein Pipe Symbol abgetrennt. Dann habe ich versucht mir selber eine kleine Übersicht zu verschaffen und dazu einige Hilfsspalten erstellt, die einfach nur für mich wichtig sind. Die habe ich übrigens in der Ergebnistabelle ausgeblendet.
Bleibt eigentlich noch, die Interpreten/Gruppen gleichermaßen durch ein Pipe Symbol abzutrennen. Da habe ich mir mal einige vorgenommen, wo ich mir ausgesprochen sicher war. Um mir viele Tipperei zu ersparen, bin ich in der Spalte mit dem Langtext in die entsprechende Zeile gegangen, habe unterhalb dieser tabellarischen Darstellung in die Anzeige des einzelnen Textes geklickt, den Interpreten mit anschließendem Leerzeichen markiert, Steuerung-C, Ersetzen aufgerufen und dort genauso eingefügt. Bei Ersetzen mit habe ich auch den Inhalt der Zwischenablage eingefügt, das letzte Leerzeichen gelöscht und durch | ersetzt. - Hier fehlen natürlich einige Namen, aber ich weiß es einerseits nicht ganz genau und andererseits ist es ja dein (und nicht mein) Anliegen.
Prinzipiell wäre jetzt in Power Query das splitten der Spalte nach dem | angesagt und alle restlichen Spalten löschen. Das sollte dann eigentlich auch das Ergebnis sein. - Allerdings habe ich eben gesehen, dass du wohl auch noch die Platzierung dort eingebaut hast. Eventuell hast du auch den Plattenlabel nicht mit berücksichtigt. Es sollte die aber nicht schwer fallen, nach dem gehabtem Muster ein eigenes System zu erstellen. Und über sogenannte Parametertabellen kannst du das ganze auch per Power Query erledigen lassen. 8-)
Aber vielleicht lag ich ja komplett daneben … Wer weiß? - Und noch ein Hinweis: es ist durchaus möglich, einen Bulk-Zugriff auf verschiedene WWW-Adressen zu machen. Ich habe vor einiger Zeit dazu einmal einen englischen Artikel in einem Forum gelesen und wenn ich mich richtig erinnere, gab es auch eine ganz passable Lösung dazu. Derzeit war es für mich kein Thema, weil ich genügend andere Sachen um die Ohren hatte. Vielleicht ist dir mal auf die Suche und wirst fündig.
Beste Grüße
Günther
https://www.herber.de/bbs/user/119893.xlsx
Anzeige
AW: Inhalt aus Internet in Tabelle einfügen
18.02.2018 17:51:57
Christian
Hallo Günther,
ich hatte angefangen, eine Liste bis 2004 zu erstellen, weiter bin ich noch nicht gekommen, in der Annahme, dass ein Song nicht erst bei dem einen dann später bei einem anderen Label verlegt wird. Daher war es für meine Auswertungen egal ob das Label dabeisteht oder nicht.
Da dies aber grad im Jahr 2002 häufiger der Fall war das ein Song das Label gewechselt hat, erscheinen jetzt doch Songs 2mal in den Auswertungen und damit sind die Auswertungen falsch.
Allerdings hab ich heute abend ein Badmintonspiel, werde erst morgen nach der Arbeit dazu kommen, mir deine Lösung genauer anzuschauen.
Gruß
Christian
AW: Inhalt aus Internet in Tabelle einfügen
18.02.2018 18:47:03
Zwenn
Hallo Günther,
also ich finde PQ für 'einfache' Aufgaben echt gut, weil es dann eine Menge Tipparbeit erspart. Allerdings habe ich den Eindruck, Du willst möglichst alles damit 'erschlagen'. So habe ich es in Deinem verlinkten Blog über die auszulesenden Playlists gelesen. (Übrigens mein großer Respekt für diesen Blog. Echt gut!) Klar kann man das so machen, aber mir wären es viel zu viele manuelle Schritte dabei. Das kann man wirklich sehr stark vereinfachen. AJAX Inhalte kann man auch automatisieren, wobei das immer sehr individuell ist. Ich muss allerdings auch sagen, dass ich es in der Praxis meistens mit komplexeren Sachverhalten zu tun habe, wenn es um die Datenbeschaffung aus dem I-Net geht.
In der Regel ist es bei mir mindestens zweischrittig. Zuerst werden Links festgelegt (ausgelesen), aus denen die eigentlichen Daten geholt werden müssen, dann werden sie abgearbeitet. Genau das kann PQ einfach nicht. PQ ist 'einschrittig', wenn man so will. Ich lasse mich auch gerne eines besseren belehren, denn ich hätte sehr gerne für viele Aufgabenstellungen eine einfachere Lösung.
In der Regel lese ich Online Shops aus. Das bedeutet, zuerst brauche ich die Suchergebnisse für einen bestimmten Suchterm. Dann lese ich die Links zu den Angeboten aus, die ich eigentlich haben will und klapper die dann einen nach dem anderen ab.
Zu Deinem aktuellem Beispiel. Kürzlich habe ich ebenfalls Pipes verwendet, um Daten einer Messeseite auszulesen und zu strukturieren. Gern genommes Zeichen, da in der Praxis fast nie zu sehen.
In Deiner hochgeladenen Datei kommt es allerdings in Tabelle2 bereits in Zeile 4 zu einem 'crash'. Interpret und Titel werden nicht getrennt. Dadurch wird das Label in (der falschen) Spalte 2 eingetragen. Für die weitere Verarbeitung ein absolutes No-Go. (Sorry, wenn ich es so hart formuliere.) Im weiteren 'Tabellen-Verlauf' wird Spalte 3 dann auch fast nie befüllt.
Man kann mit PQ sicher eine Menge machen. Aber sobald es daran geht, Daten aus 'mehreren Quellen' zusammenzubringen, scheitert das zwangsläufig. Mehrere Quellen sind dabei bereits mehrstufige Link-Kaskarden oder auch Daten auf einer Seite, die nicht zur gleichen Tabelle gehören.
Viele Grüße,
Zwenn
AW: Inhalt aus Internet in Tabelle einfügen
18.02.2018 18:49:22
Christian
Hallo Zwenn,
für mich ist das was du da schreibst nur Fachchinesisch.
Aber ich lese heraus dass Günthers Ansatz nicht zum Ziel führt oder?
Gruß
Christian
AW: Inhalt aus Internet in Tabelle einfügen
18.02.2018 19:22:27
Zwenn
Hallo Christian,
Günthers Ansatz führt natürlich auch zu einem Ziel. Das hast Du ja vor allem an der ersten Datei gesehen, die er hochgeladen hat. Das, was Du willst, habe ich aber auch erst nach einigen Deiner Posts verstanden. Nämlich viele Seiten auszulesen, nicht nur eine, die dann und wann aktuallisiert werden muss.
Falls möglich, hat Christian ja vielleicht auch noch einen Beitrag, der meinen bisherigen Stand des Wissens umkrempelt. PQ ist schon eine tolle Sache. Ich bin da mit Sicherheit aber nicht so ein Experte, wie Christian.
Alles in Allem läuft es auf die Standadformel raus ... 'Viele Wege führen nach Rom.'
Viele Grüße,
Zwenn
AW: Inhalt aus Internet in Tabelle einfügen
20.02.2018 18:23:01
Christian
Hallo Zwenn,
wie ich euch verstanden habe funktioniert PQ nur mit einer Abfrage und selbst mehrere dieser Art wären bei 2000 sehr zeitaufwändig.
Wann kannst du dich darum kümmern?
Gruß
Christian
AW: Inhalt aus Internet in Tabelle einfügen
20.02.2018 23:57:57
Zwenn
Hallo Christian,
da habe ich doch glatt Günthers und Deinen Namen im vorherigen Postig durcheinander gebracht. Sorry dafür.
Wie gesagt, komme ich diese Woche auf keinen Fall mehr dazu. Eigentlich war ich auch nicht traurig darüber, dass Du fast Mitte März für Deinen Bedarf ausgerufen hattest ;-)
Ich habe folgende Fragen:
  • Du willst ausschließlich Jahrestabellen oder kann es auch vorkommen, dass Du alles in einer Tabelle, in Monatstabellen oder gar vereinzelt in Wochentabellen brauchst?

  • Am Beispiel Jahrestabellen: In welches Jahr gehören für Dich dann Übergänge, wie 27.12.2004 - 02.01.2005?

  • Geht es ausschließlich um Single-Charts oder auch um andere? Ich frage, weil es unterschiedliche Starttermine für die verschiedenen Kategorien gibt.

  • Wird das für Dich eine einmalige Auslesegeschichte oder brauchst Du regelmäßig neue Chart-Daten bzw. unterschiedliche Zeitspannen, bzw. unterschiedliche der angesprochenen Tabellenformen für die gleichen Daten?

  • Da Threads in diesem Forum nach einer Woche ins Archiv wandern und man dann nicht mehr darauf antworten kann, können wir entweder zu gegebenem Zeitpunkt einen neuen Thread zu diesem Thema eröffnen (z.B. wollte Günther ja gerne das Ergebnis sehen) oder wir verlegen uns auf E-Mail.
    Die eigentliche Ausleseroutine für die Daten steht im folgenden Code. Drumrum muss halt das ganze Handling gestrickt werden. Also, automatische Errechnung der Links für größere Zeiträume, gültige Datumsgrenze(n) nach unten für die Charts, ab wann von Montag auf Freitag umgeschaltet wurde, usw.
    Einfach den ganzen Code in ein Modul kopieren und das Makro in einer leeren Tabelle starten:
    
    Option Explicit
    
    
    Sub ChartListeAuslesen()
    'Variablen für den Zugriff aufs DOM (Document Object Model)
    Dim browser As Object       'Zu verwendende Internet Explorer Instanz
    Dim knotenCharts As Object  'HTML Teilstruktur der Chart-Tabelle des DOM aufnehmen
    Dim knotenPlaetze As Object 'HTML Teilstruktur aus knotenCharts als Zeilensammlung aufnehmen
    Dim knotenPlatz As Object   'HTML Einzelplätze (Zeilen) aus knotenPlaetze aufnehmen
    Dim knoten As Object        'HTML Unterstruktur aus knotenPlatz aufnehmen (die Daten)
    'Sonstige Variablen
    Dim aktuelleZeile As Long   'Aktuelle Zeile für das Eintragen der ausgelesenen Daten
    Dim url As String           'Aufnahme der auszulesenden Internetadresse
    'Kopfzeile schreiben und Spalten Formatieren
    KopzeileUndSpaltenFormate
    'Startzeile initialisieren
    aktuelleZeile = 2
    'Als auszulesende Chart-Seite nehme ich mal die aus Deinem Ausgangsposting
    url = "https://www.offiziellecharts.de/charts/single/for-date-1135930830000"
    'Aufrufen der Chart-Seite im Internet Explorer
    Set browser = CreateObject("internetexplorer.application")  'IE als Browser setzen
    browser.Visible = False                                     'IE unsichtbar
    browser.navigate url                                        'URL aufrufen
    Do Until browser.readyState = 4: DoEvents: Loop             'Warten bis Seite ganz geladen
    'Beginn des Auslesens der benötigten Daten der im IE geladenen Chart-Seite
    'Ausschneiden der gesamten Chart-Tabelle aus dem HTML-Code
    Set knotenCharts = browser.document.getElementsByClassName("table chart-table")(0)
    'Prüfen, ob die Tabelle vorhanden ist
    If Not knotenCharts Is Nothing Then
    'Wenn ja, Tabelle in Einzelzeilen-Sammlung aufteilen
    Set knotenPlaetze = knotenCharts.getElementsByTagName("tr")
    'Alle Platzierungen (Zeilen) durchlaufen und Daten auslesen
    For Each knotenPlatz In knotenPlaetze
    'aktuelle Platzierung
    'Zielspalte 1 in Makro-Start-Tabelle mit Kopfzelle "Platz"
    Set knoten = knotenPlatz.getElementsByClassName("this-week")(0)
    If Not knoten Is Nothing Then
    Cells(aktuelleZeile, 1).Value = VBA.Trim(knoten.innertext)
    Else
    Cells(aktuelleZeile, 1).Value = "NA"
    End If
    'Platzierung der Vorwoche
    'Zielspalte 2 in Makro-Start-Tabelle mit Kopfzelle "Vorwoche"
    Set knoten = knotenPlatz.getElementsByClassName("last-week")(0)
    If Not knoten Is Nothing Then
    Cells(aktuelleZeile, 2).Value = VBA.Trim(knoten.innertext)
    End If
    'Falls Neu
    Set knoten = knotenPlatz.getElementsByClassName("trend-new")(0)
    If Not knoten Is Nothing Then
    Cells(aktuelleZeile, 2).Value = Trim(Cells(aktuelleZeile, 2).Value & " Neu")
    End If
    'Falls REE
    Set knoten = knotenPlatz.getElementsByClassName("trend-ree")(0)
    If Not knoten Is Nothing Then
    Cells(aktuelleZeile, 2).Value = Trim(Cells(aktuelleZeile, 2).Value & " Ree")
    End If
    'Interpret
    'Zielspalte 3 in Makro-Start-Tabelle mit Kopfzelle "Interpret"
    Set knoten = knotenPlatz.getElementsByClassName("info-artist")(0)
    If Not knoten Is Nothing Then
    Cells(aktuelleZeile, 3).Value = VBA.Trim(knoten.innertext)
    Else
    Cells(aktuelleZeile, 3).Value = "NA"
    End If
    'Titel
    'Zielspalte 4 in Makro-Start-Tabelle mit Kopfzelle "Titel"
    Set knoten = knotenPlatz.getElementsByClassName("info-title")(0)
    If Not knoten Is Nothing Then
    Cells(aktuelleZeile, 4).Value = VBA.Trim(knoten.innertext)
    Else
    Cells(aktuelleZeile, 4).Value = "NA"
    End If
    'Label
    'Zielspalte 5 in Makro-Start-Tabelle mit Kopfzelle "Label"
    Set knoten = knotenPlatz.getElementsByClassName("info-label")(0)
    If Not knoten Is Nothing Then
    Cells(aktuelleZeile, 5).Value = VBA.Trim(knoten.innertext)
    Else
    Cells(aktuelleZeile, 5).Value = "NA"
    End If
    'Nächste zu beschreibende Zeile festlegen
    aktuelleZeile = aktuelleZeile + 1
    Next knotenPlatz
    Else
    'Wenn nein, entsprechende Nachricht ausgeben
    MsgBox "Keine Chart-Tabelle vorhanden"
    End If
    'Aufräumen
    browser.Quit
    Set browser = Nothing
    Set knotenCharts = Nothing
    Set knotenPlaetze = Nothing
    Set knotenPlatz = Nothing
    Set knoten = Nothing
    End Sub
    
    
    Private Sub KopzeileUndSpaltenFormate()
    Cells(1, 1).Value = "Platz"
    Cells(1, 2).Value = "Vorwoche"
    Cells(1, 3).Value = "Interpret"
    Cells(1, 4).Value = "Titel"
    Cells(1, 5).Value = "Label"
    Columns("A:B").ColumnWidth = 12
    Columns("C:C").ColumnWidth = 50
    Columns("D:D").ColumnWidth = 50
    Columns("E:E").ColumnWidth = 15
    Cells.VerticalAlignment = xlCenter
    Rows("1:1").VerticalAlignment = xlBottom
    Range("A:B").HorizontalAlignment = xlCenter
    Range("A1:B1").HorizontalAlignment = xlLeft
    Range("C1:E1").HorizontalAlignment = xlCenter
    Range("A1:E1").Font.Bold = True
    Range("A1:E1").Font.ThemeColor = xlThemeColorLight1
    Range("A1:E1").Font.ThemeColor = xlThemeColorDark1
    Range("A1:E1").Interior.ThemeColor = xlThemeColorLight1
    Columns("A:B").NumberFormat = "#,##0"
    Columns("C:E").NumberFormat = "@"
    ActiveWindow.SplitColumn = 0
    ActiveWindow.SplitRow = 1
    ActiveWindow.FreezePanes = True
    Cells(1, 1).Select
    Selection.AutoFilter
    End Sub
    

    Ich verlinke mal einen meiner alten Beiträge, in dem ich mal einige Grundlagen zum DOM beschrieben habe:
    Auslesen von NBA Ergebnissen:
    https://www.herber.de/cgi-bin/callthread.pl?index=1492241#1493245
    Excel Datei mit dem Makro zum Auslesen der NBA Ergebnisse:
    (über den Ursprungs-Thread nicht mehr downloadbar)
    https://www.herber.de/bbs/user/113778.xlsm
    Viele Grüße,
    Zwenn
    AW: Inhalt aus Internet in Tabelle einfügen
    21.02.2018 19:47:26
    Christian
    Hallo Zwenn,
    also erstmal zum Termin, ich hab mit der Frage erfahren wollen ob du meinen Vorschlag für realistisch hältst, ich wollte dich nicht unter Druck setzen. Sorry wenn das falsch rübergekommen ist.
    zu deinen Fragen
    1. Ausschließlich Jahrestabellen
    2. Es soll das Datum gelten an dem die Charts erschienen sind, also in deinem Beispiel der 27.12.04
    3. Die Single Charts reichen
    4. Da bin ich mir unsicher. Hört sich ja verlockend an, das automatisiert zu machen. Das Problem mit den aktuellsten Charts ist nur, sie stehen aus rechtlichen Gründen nicht jederzeit zur Verfügung:
    Zitat FAQ der Seite
    Das Angebot ist komplett kostenfrei. Die Top 5 bekommst Du jeden Freitag um 16 Uhr, diese wird am Montag auf Top 10 erweitert. Und am Mittwoch steht die vollständige Top 100 Single- und Album-Charts zur Verfügung.
    Wenn sich das berücksichtigen lässt, kann man auch eine Automatisierung einbauen.
    Lässt sich das mit der Aktualisierung auch so machen, dass alle Charts runtergeladen werden die fehlen? also z.B. wenn ich 3 Wochen im Urlaub war und kein Laptop dabei hatte das das dann nachgeholt wird?
    Noch etwas, verlangst du etwas für diese Arbeit?
    Ich schlage vor, das auf E-mails zu verlegen. christian-zender@gmx.de
    Gruß
    Christian
    AW: Inhalt aus Internet in Tabelle einfügen
    18.02.2018 19:36:58
    Günther
    Moin Zwenn, Christian
    gerade wegen Christians Beitrag möchte ich doch etwas näher darauf eingehen, was ich in meinem vorherigen Beitrag geschrieben habe. Aber eines nach dem anderen …
    @Zwenn: Erst einmal danke für die Blumen; die Website/der Blog kostet aber auch enorm viel Zeit! - Ich hatte zu Anfang ja auch schon erwähnt, dass ich wahrscheinlich solch ein Problem auch mit VBA lösen würde bzw. andere Wege sinnvoll wären. Was Power Query angeht: Ja im Moment ist das für mich ein Bereich, wo ich "normalen" Usern einige Möglichkeiten gebe, die sie sonst nur mit einem sehr hohen Aufwand, ausgesprochen guten Kenntnissen in Excel-Funktionen oder VBA hätten. Und ich denke dass wir uns einig sind, dass dieses in der überwiegenden Anzahl der Fälle nicht gegeben ist. Dazu kommt speziell hier noch meine Fehlinterpretation, dass ich davon ausgegangen bin, dass künftig in regelmäßigen Abständen eine derartige Abfrage stattfinden soll.
    Das "rudimentäre" an der Mustertabelle bezog sich darauf, dass ich weder Zeit noch Lust hatte, alle Interpreten durch ein Pipe Symbol abzutrennen. Ich habe mich beispielhaft auf die ersten mir bekannten Interpreten beschränkt, wo ich sicher war, den Namen vom Titel korrekt abzutrennen. 8-) Wo ich das nicht getan habe (beispielsweise der Zeile 4 in der erstellten Tabelle) kommt es natürlich zum Crash. Ist der Name der Interpreten nun 'Melanie C' oder nur 'Melanie'? Wenn der Interpret fehlt, gehört natürlich vor den Song-Titel auch ein |.
    Ich würde mich aber sehr freuen, wenn ich durch dich in Sachen Datentransfer Internet->CSV oder Excel einen guten Weg kennenlernen würde, wo ich auf (nur) tabellarisch aussehende Daten zugreifen kann, die aber beispielsweise durch PHP nur in dieser Form dargestellt werden, ohne dass sie eine Tabelle im Sinne des HTML sind. Öfter einmal habe ich zwar dieses Manko bemerkt, bin aber noch nicht in die Recherche eingestiegen. Und ich freue mich jetzt schon auf deinen Beitrag wo du dich mit dem Bulk-Import von den Daten aus der hier eine Rolle spielenden Internet-Seite auseinandersetzt.
    @Christian: Grundsätzlich meine ich, dass die über den aufgezeigten Weg zum Ziel kommen kannst. Da die aber noch eine große Anzahl von Daten fehlen (das hatte ich nicht gewusst/bemerkt) wäre vielleicht ein von Zwenn aufzuzeigender Weg hilfreich. Ich selbst beschäftige mich ja mehr oder weniger "nebenbei" mit der Hilfe in Foren, denn (obwohl Rentner) muss ich mir noch ein paar Euro dazu verdienen. Und da zählt nun einmal das jeweils aktuelle Projekt. - Aber du kannst ja gerne mal folgendes tun: ersetze doch einmal in Spalte_I meiner letzten Tabelle 'Wham! ' (also mit dem angehängten Leerzeichen) durch 'Wham|' und auch entsprechend 'Shakira ' durch 'Shakira|'. Dann sollten zumindest in diesen Zeilen jeweils alle Spalten korrekt gefüllt sein und somit keine Fehlinterpretationen zustande kommen. Im Endeffekt ist das bei allen noch nicht abgetrennten Interpreten geschehen. Übrigens: genau das war auch der Grund, warum ich die Hilfs-Spalten angelegt hatte. Da kann ich sehr schön per Filter kontrollieren, wo in den ersten 20 Zeichen noch kein | vorhanden ist und ich entsprechend den Interpreten noch vom Titel trennen muss.
    So, das soll's erst einmal gewesen sein. Für mich ging es in 1. Linie um der Herausforderung, ob so etwas mit Power Query machbar ist oder nicht. Ob ich so etwas für einen Kunden gemacht hätte, kann ich einfach nicht sagen; ich würde wahrscheinlich zu viel nachfragen müssen in Sachen Musik und wann ich wo wie an die Daten komme, was ja schnell als mangelnde Kompetenz ausgelegt wird. Übrigens ist das der wichtigste Grund, warum ich weder in Foren noch für Kunden etwas in Sachen 'Sport' Mache.
    Beste Grüße
    Günther

    321 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige
    Anzeige

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige