Office: (Office 2016) Webscraping

Helfe beim Thema Webscraping in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo, folgende Frage: Ich habe in der Zelle O3 einen Link der die Google-Suche öffnet. Dieser Link bezieht sich auf Fussballmannschaften. Wenn man... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von *Levi*, 31. Dezember 2019.

  1. Webscraping


    Hallo,

    folgende Frage:

    Ich habe in der Zelle O3 einen Link der die Google-Suche öffnet.
    Dieser Link bezieht sich auf Fussballmannschaften.
    Wenn man ihn anklickt öffnet sich z.b. folgende Google-Suchseite:

    https://www.google.de/search?ei=sNAN...=1577963699167

    Ich möchte nun, dass ein VBA über Fernsteuerung den Link über den IE öffnet und die erste Seite mit der Teambegegnung öffnet und mir anschließend den Frame Teamstatistik in die Zellen P3 und folgende kopiert.

    Hier mal zu o.g. Beispiel:

    https://www.google.de/search?ei=sNAN...=1577963699170

    Meine Frage ist, ist dies überhaupt möglich?
    Das Problem ist, dass der Link nicht zu entschlüsseln ist. D.h. ich kann nicht über die Teams einen Link generieren der direkt auf die Statistiksteite führt, diese z.B. komplett kopieren und in Excel einfügen.

    Bin über jede Hilfe dankbar!

    :)
     
  2. Hi,

    Andrew Gould kann Dir zeigen wie es geht:
     
  3. Hallo Mase,

    ich habe zwar die Frage nicht gestellt, aber der Link könnte mir mal nützlich sein.
     
  4. Webscraping

    Hallo Levi,

    ich rate davon ab Google für diese Aufgabe zu verwenden. Dort wirst Du nach 10 automatisierten Zugriffen für eine gewisse Zeit gesperrt. Das heißt, bevor die Suchseite aufgerufen wird, muss ein Captcha gelöst werden. Deshalb würde ich mir eine andere Quelle suchen.

    Viele Grüße,

    Zwenn
     
  5. Vielen Dank für eure Ansätze.
    Ich komme nun bei folgendem nicht weiter.
    Ich kann die Google-Suche aktivieren und nun sehe ich sozusagen die Übersichtsseite https://www.google.de/search?ei=sNAN...=1577998870681. Wie kann ich nun so steuern, dass der Link geklickt wird?

    Anbei der Code bisher:

    Option Explicit
    Sub GetHTMLDocument()
    Dim IE As New SHDocVw.InternetExplorer
    Dim HTMLDoc As MSHTML.HTMLDocument
    Dim HTMLInput As MSHTML.IHTMLElement
    Dim HTMLButtons As MSHTML.IHTMLElementCollection
    Dim HTMLButton As MSHTML.IHTMLElementCollection

    IE.Visible = True
    IE.navigate "Google"

    Do While IE.readyState READYSTATE_COMPLETE
    Loop

    Set HTMLDoc = IE.document
    Set HTMLInput = HTMLDoc.getElementById("q")
    HTMLInput.Value = "Bayern Hoffenheim"
    Set HTMLButtons = HTMLDoc.getElementsByName("btnK")
    HTMLButtons(0).Click

    End Sub
     
    *Levi*, 2. Januar 2020
    #5
  6. Hallo Levi,

    da Du beratungsresistent bist, belasse ich es beim angehängten Bild. Kleiner Tipp dazu ... Dein anzuklickender Link ist nicht enthalten.

    Viele Grüße,

    Zwenn
     
  7. Hallo Zwenn,

    Das ist schon klar. Ich habe ja auch bei dem Code nicht mit der entsprechenden Zelle gearbeitet z.B.. Das stelle ich mir dann schon so ein. Ich verstehe auch deine Bedenken vollkommen. Möchte es aber gern erstmal umsetzen. Man kann am Ende ja jede andere Seite auch nutzen. Mich interessiert ja nur erstmal die Vorgehensweise jetzt den Link zu klicken. Und anschliessend die Statistiken auszulesen. Vielleicht verstehst du das ja und kannst mir einen Denkanstoss geben da ich vermute, dass du weisst wie man weiter kommt.
     
    *Levi*, 3. Januar 2020
    #7
  8. Webscraping

    Hallo Levi,

    was auch immer Du mit "der entsprechenden Zelle" meinst, ich habe Dir das jetzt mal ganz ohne Excel Tabellenbezug zurechtgebastelt. Ich nutze late binding, was aber keine weitere Rolle spielt. Deshalb gibt es unten die ganzen Object-Variablen statt dem HTML-Gedöns.

    Du kannst der Lösung entnehmen, wie Du an die Werte der von Dir genannten Statistikseiten von Google gelangst. Falls Du Deine Quelle änderst, kannst Du zwar die Techniken übernehmen, aber sei Dir im Klaren darüber, dass jede Seite, von der Du etwas auslesen willst, eine eigens angepasste Programmierung benötigt.

    Du solltest den Kommentaren entnehmen können, was ich wie gelöst habe:

    Obligatorisch:
    Code:
    Das zu startende Makro:
    Code:
    Die Suche auslösen:
    Code:
    Den Ergeniscontainer identifizieren und anklicken
    Code:
    Die gewünschten Werte auslesen
    Code:
    Damit solltest Du etwas anfangen können.

    Noch als Hinweis für die Zukunft:
    Bemühe Dich bitte in Deinen Angaben genau zu sein. Du hast in Deinem geposteten Codeschnipsel als Suchbegriff nur die beiden Mannschaften angegeben. Ich habe Dir den Screenshot gepostet, was dann als Suchergebnis rauskommt. In Deinem ersten Posting steht aber zusätzlich das Datum der gewünschten Begegnung drin. Das sieht man aber erst, wenn man sich die Mühe macht den Link nochmal anzuklicken.

    Viele Grüße,

    Zwenn
     
  9. Hallo Zwenn,

    das Skript ist enorm gut!!!

    Allerdings bekomme ich die Messagebox nicht in eine Tabelle gesplittet. Ich bekomme zwar die Teams in die jeweiligen Spalten, aber eben nicht die Schleife für die eigentliche Statistik.

    Wäre es zudem möglich gleich noch das Endergebnis und das Halbzeitergebnis mit abzugreifen?

    Hätte die Tabelle gern in den Spalten A bis C im aktiven Tabellenblatt.

    Zudem würde mich interessieren, wie die Schleife aussehen würde, wenn ich wie beschrieben in den Zellen O3 bis O12 die jeweiligen Begegnungen des Spieltages hätte.
     
    *Levi*, 4. Januar 2020
    #9
  10. Hallo Levi,

    das Schreiben der Werte in die richtigen Zellen hat nix mit WebScraping zu tun, sondern mit der Mechanik des Makros. Die MessageBox und die Variable ergebnis sollten in Deiner Lösung gar nicht mehr vorkommen.

    Halbzeit- und Endergebnis auslesen geht sicher auch. Habe ich mir aber nicht angesehen, weil das nicht zu Deinen Anforderungen gehörte. Mit den gezeigten Techniken solltest Du das nun eigentlich selbst hinbekommen.

    Du möchtest die ausgelesenen Werte in den Spalten A, B und C unterbringen. Gleichzeitig willst Du gerne alle Begenungen eines Spieltages auslesen. Ich weiß nicht was Du anschließend mit den Werten machen willst, aber wenn Du die für alle Spiele so untereinader schreibst, kannst Du damit nicht viel anfangen.

    Deshalb folgender Rat:
    Schreibe mal manuell alle Werte für zwei Begenungen in eine Tabelle. Dabei sollten Dir verschiedene Dinge auffallen, anhand derer Du das Tabellenlayout korrigieren kannst.

    Weiterhin hast Du die Begegnungen in den Zellen O3 bis O12 stehen. In der gleichen Tabelle? Davon rate ich dringend ab. Die Begegnungen sind die Werte, mit denen Du das Makro fütterst. Die Statistikwerte sind die Werte, die das Makro zurückliefert. Die gehören in zwei unterschiedliche Tabellen. Wenn Du es weiter durchdenkst wirst Du auch darauf kommen, dass die Begegnungen nicht in jeweils eine Zelle gehören, sondern auf drei Zellen pro Zeile aufzuteilen sind. Heimmannschaft, Gastmannschaft und Datum der Begegnung. Dann kannst Du diese Werte nämlich einfach zusätzlich für die richtige Beschriftung und den richtigen Datumsbezug in den Statistikdaten verwenden.

    Wie gesagt, erstelle eine Tabelle mit manuell eingegebenen Daten aus zwei Begegnungen. Zwei, weil Du bei Eingabe der Werte für die zweite Begegnung automatisch sehen wirst, ob Du anschließend mit allen Werten das machen kannst, was Du willst. Dazu bitte auch sonstige Tabellen und den Makrocode mit in die Datei und das Ganze dann mal hier hochladen. Außerdem wäre es gut, wenn Du mal ausformulierst, was Du eigentlich mit dem Projekt erreichen möchtest. Du musst ja irgend ein Ziel haben.

    Nix für ungut, aber Du gehörst zu den Salamitaktikern, denen immer noch das nächste einfällt oder die doch etwas anders brauchen, wenn man ihnen gezeigt hat, was sie vorher gerne wollten. Also erst denken, dann umsetzen. Für die Hilfe beim Umsetzen ist so ein Forum gedacht. Aber um Dir zielgerichtet helfen zu können, musst Du genaue Anforderungen liefern, die Du vorher erarbeitet hast. Es geht hier auch um Hilfe zur Selbsthilfe. Auch wenn ich dazu neige Lösungen zu erstellen, ist das nicht wirklich Sinn der Sache.

    Viele Grüße,

    Zwenn
     
  11. Hallo Zwenn,

    zum Teil gebe ich dir natürlich recht. Anbei einmal ein Auszug der zum Spieltag. Hieran erkennst du wie die Daten verarbeitet werden. Bisher fülle ich die Daten Links immer händisch ein (Das sind nicht nur Daten der Statistikübersicht pro Spiel von Google). Relativ mittig sind die Partien des Spieltages, diese habe ich nun schon Googlespezifisch angepasst, so dass man diese direkt für die Google-Suche verwenden kann. Anschließend soll er die Daten aus Google wie im Bild rechts daneben abbilden - für jeden Spieltag. Hier habe ich nun neben der reinen Statistik lediglich noch den Spielstand ergänzt. Diese Zellen sind die Referenz für die "Statistische Sammlung" Links. Natürlich kann man die Daten auch direkt links einfügen von Google und auf die jeweiligen Zellen verteilen, aber das war so erstmal nicht erforderlich für mich. Schließlich wird der Code sonst immer komplizierter und ich will ja auch wissen, was er macht. Anschließend werden die Daten in der "Statistischen Sammlung" übrigens weiterverarbeitet. Das ist alles aber schon fertig. Mir fehlte wie gesagt nur eine automatisierte Erfassung der Daten bisher. Mir würde es auch reichen, wenn man eine Tabelle, wie in der Abbildung im Bild (Z.B.. Werder Bremen - Schalke) erstmal hin bekommt. Ich kann mir ja dann für jede Begegnung einen eigenen Code schreiben und lass diese dann nacheinander ablaufen. Wäre zwar umständlich, aber es würde mir eben schon enorm helfen.
    Ich hoffe du verstehst es nun etwas besser, was ich möchte.
    Dennoch Danke ich dir schon für das bisher geleistete!!! Das ist schon sehr gut.
     
Thema:

Webscraping

Die Seite wird geladen...
  1. Webscraping - Similar Threads - Webscraping

  2. WebScraping-Laufzeitfehler 91: Objekvariable nicht festgelegt

    in Microsoft Excel Hilfe
    WebScraping-Laufzeitfehler 91: Objekvariable nicht festgelegt: Hi zusammen, ich erhalte die obergenannte Fehlermeldung bei meinem Code, welcher mir die Tabelle aus dem Link: https://data.snb.ch/en/topics/uvo#!/...T5,HYP,KON,UKR) ziehen soll. Ich hoffe mir...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden