Wie importiere ich Daten von einer Website nach Excel?
Es ist bekannt, dass das World Wide Web riesige nützliche Daten enthält. Wir müssen die Daten jedoch in Microsoft Excel importieren, bevor wir irgendeine Art von Analyse durchführen können. Es gibt zwei Methoden, mit denen Sie diese Art von Aufgabe ausführen können.
Externe Daten manuell aus dem Web abrufen
Angenommen, Sie möchten Einnahmen über Top-Geldverdienen-Filme von dieser Webseite herunterladen.
Öffnen Sie Microsoft Excel und klicken Sie auf die Registerkarte Daten. Nachdem das Dialogfeld Neue Webabfrage angezeigt wird, kopieren Sie die Webadresse (http://www.the-numbers.com/movie/records/All-Time-Worldwide-Box-Office) in das Adressfeld und klicken Sie auf die Schaltfläche Los. Excel beginnt mit dem Herunterladen der Webseite, wie in Abbildung 1.1 gezeigt. Klicken Sie einfach auf Nein, wenn Sie ein Skriptfehlerwarnungsfeld erhalten, das dem in der folgenden Abbildung ähnelt. Das Kästchen wird ausgeblendet und hat keine Auswirkungen auf Ihren Importvorgang.
Abbildung 1.1
Im gelben Feld in der oberen rechten Ecke des Dialogfelds Neue Webabfrage befindet sich ein Pfeil. Durch Klicken darauf können Sie festlegen, ob ähnliche Symbole vor Tabellen angezeigt werden sollen oder nicht. Beispielsweise befindet sich im linken Bereich von Abbildung 1.2 kein Pfeilsymbol neben der Tabelle. Nachdem Sie auf die Pfeilschaltfläche geklickt haben, um Symbole anzuzeigen, wird ein Symbol (im rechten Bereich) angezeigt.
Abbildung 1.2
Klicken Sie auf das Pfeilsymbol neben den Tabellen, die Sie auswählen möchten. Die Symbole und Tabellen ändern sich und ähneln denen im linken Bereich von Abbildung 1.3. Nachdem Sie auf Importieren geklickt haben; Ein Dialogfeld zum Importieren von Daten wird angezeigt. Füllen Sie den Bereich (in unserem Fall von Spalte A bis Spalte H) aus, in den Sie die Daten einfügen möchten, und klicken Sie auf OK.
Abbildung 1.3
Die Daten werden nach dem Klicken auf OK in Excel importiert. Wenn Sie mit der rechten Maustaste auf eine Zelle in der Tabelle klicken und Aktualisieren auswählen, wird Excel die neuesten Daten von einer Webseite abrufen.
Abbildung 1.4
Und Sie können sogar festlegen, dass Ihre Abfragedaten auf beliebige Weise aktualisiert werden. Klicken Sie einfach mit der rechten Maustaste auf eine beliebige Zelle in der Tabelle und wählen Sie Datenbereichseigenschaften. Im Dialogfeld Eigenschaften des externen Datenbereichs können Sie die Einstellungen für das Aktualisierungssteuerelement ändern, um den Stil zu ändern. Sie können beispielsweise angeben, dass die Abfrage alle 60 Minuten oder beim Öffnen der Datei aktualisiert werden soll.
Scrape Daten mit VBA-Programmierung
VBA-Programmierung kann verwendet werden, um Daten von einer Webseite zu kratzen. Es ist viel nützlicher, aber schwierig, wenn man es mit dem ersten Ansatz vergleicht. Darüber hinaus müssen Sie verstehen, was HTML ist, bevor Sie lernen, wie Sie Daten mithilfe der VBA-Programmierung kratzen. Ich empfehle Ihnen, grundlegende HTML-Kenntnisse von dieser Website zu lernen, wenn Sie nichts oder wenig über HTML wissen. Und von hier aus können Sie fast alles über Web Scraping mit VBA lernen. Dieser Artikel zeigt Ihnen nur zwei Beispiele.
Daten von einer Webseite kratzen
Angenommen, wir möchten den Firmennamen, die E-Mail-Adresse und den Kontaktnamen von dieser Webseite extrahieren. Wenn Sie diese Webseite öffnen, werden Sie feststellen, dass sich unten ein Kontaktblock befindet. Abbildung 2.1 zeigt den Kontaktblock und den entsprechenden Quellcode. Informationen in roten Kästchen sind das, was wir brauchen wollen. Und diejenigen mit einer grünen Unterstreichung sind genau das, was wir extrahieren müssen.
Abbildung 2.1
Der folgende Code kann Ihnen helfen, die oben angeforderten Informationen zu extrahieren und in das erste Arbeitsblatt einzufügen.
Quellcode |
Sub Retrieve_Click() 'Erstellen InternetExplorerSet DH = CreateObject("InternetExplorer.Anwendung") 'Lassen Sie uns das Browserfenster nicht sehen.Visible = False 'Öffnet die Webseite'.Navigieren Sie zu "http://www.austrade.gov.au/SupplierDetails.aspx?ORGID=ORG8160044431&folderid=1736" 'Warten Sie, während IE geladen wirdtun, während IE.readyState <> 4 Oder IE.Busy = True DoEvents Schleife 'Firmennamen abrufen, E-Mail-Adresse & kontaktinformationenset contactobj = IE.Dokument.getElementsByClassName("Kontakt-Details Block dunkel") htext = contactobj(0).innerHTML MsgBox htext If InStr(htext, "<p>Firmenname: ") Dann ThisWorkbook.Arbeitsblätter(1).Zellen(1, 1) = Split(Split(htext, "<p> Firmenname: ")(1), "< br")(0) End If If InStr(htext, "mailto:") Dann ThisWorkbook.Arbeitsblätter(1).Zellen(2, 1) = Split(Split(htext, "mailto:")(1), Chr(34) & ">")(0) End If If InStr(htext, "<p>Name: ") Dann ThisWorkbook .Arbeitsblätter(1).Zellen(3, 1) = Split(Split(htext, "<p>Name: ")(1), "< br")(0) Ende, wenn Diesarbeitsbuch.Arbeitsblätter(1).Zellen (4, 1) = DH.LocationURL ThisWorkbook.Speichern Set IE = Nichts Set contactobj = Nichts End Sub
“ DH.Dokument.getElementsByClassName(„contact-details block dark“)“ ermöglicht es Ihnen, alle Elemente mit dem Klassennamen – contact-details block dark abzurufen. Diese Webseite listet fast alle Eigenschaften und Methoden auf, die für HTML-Elemente verwendet werden können. Sie können das passende für Ihr eigenes Problem auswählen.
Mit der Eigenschaft innerHTML können Sie den Inhalt eines HTML-Elements festlegen oder zurückgeben. In unserem Fall wurde der Inhalt des Elements mit dem Klassennamen „contact-details block dark “ zurückgegeben und auf eine Variable htext . Der Inhalt (Abbildung 2.2) kann über ‚Msgbox htext‘ aufgerufen werden.
Abbildung 2.2
Sie können sehen, dass der Text gut strukturiert ist. Deshalb können wir die SPLIT-Funktion verwenden, um zu extrahieren, was benötigt wird. Zum Beispiel, wenn wir „<p> Firmenname:“ als Trennzeichen und Formel „Split(htext, „<p>Firmenname: „)(1)“ kann den gesamten Text nach „<p>Firmenname:“ zurückgeben. Für diesen neu zurückgegebenen Text können wir „<br“ als Trennzeichen verwenden und den Text vor dem ersten „<br“ abrufen. Zusammenfassend ist die SPLIT-Funktion ein flexibles Werkzeug, mit dem Sie fast alles extrahieren können. Weitere nützliche Funktionen sind LEN, INSTR, LEFT, RIGHT, MID und REPLACE. Ich werde hier nicht im Detail diskutieren.
Nachdem Sie in Abbildung 2 auf OK geklickt haben.2 können die angeforderten Daten aus dem Web in ein Excel-Arbeitsblatt importiert werden. Beispielsweise enthält Zelle A1 den Firmennamen, während Zelle A4 die Adresse der Unternehmenswebseite enthält.
Abbildung 2.3
Wenn Sie vor dem Speichern der Arbeitsmappe den folgenden Code hinzufügen, können Sie Zelle A4 einen Hyperlink hinzufügen.
Quellcode |
' Fügen Sie hyperlinkThisWorkbook hinzu.Arbeitsblätter(1).Hyperlink.Fügen Sie ThisWorkbook hinzu.Arbeitsblätter(1).Zellen(4, 1), ThisWorkbook.Arbeitsblätter(1).Zellen(4, 1)
Wenn Sie auf Zelle A4 klicken, können Sie die Webseite erneut aufrufen. Dies ist besonders nützlich, wenn Sie Daten für viele Unternehmen abrufen müssen. Da Sie auf einen beliebigen Hyperlink klicken können, um die entsprechende Webseite erneut zu besuchen und Informationen später während der Überprüfung manuell hinzuzufügen oder zu aktualisieren.
Abbildung 2.4
Interaktion mit Webseiten
Das obige Beispiel veranschaulicht nur, wie Daten von einer statischen Webseite abgerufen werden. Aber mehr als oft, Wir müssen extrahieren und mit Webseiten interagieren, um eine große Datenmenge abzurufen. Siehe Abbildung 3.1. Es zeigt Ihnen, wie Sie zur Webseite des obigen Beispiels gelangen. Sie können sehen, dass es viele Branchen gibt und für jede Branche gibt es viele Unternehmen. Zum Beispiel gibt es 651 Unternehmen in der Agrarindustrie. Was sollten wir tun, wenn wir die Kontaktinformationen aller Unternehmen aus allen Branchen extrahieren möchten?
Abbildung 3.1
Nun, der entscheidende Punkt ist, wie man VBA mit Webseiten interagieren lässt, wie wir es manuell tun. Nehmen wir S.W.I.S. als Beispiel. Im Allgemeinen hoffen wir, dass Excel auf Agribusiness klicken kann (oberes Feld von Abbildung 3.1) und damit IE auslösen, um uns auf die zweite Webseite zu leiten. Auf der zweiten Webseite (unteres Feld von Abbildung 3.1) kann Excel auf S.W.I.S Advantage klicken, und dann leitet IE uns zu der Seite, wie in Abbildung 2.1 gezeigt, so dass wir Kontaktinformationen von S.W.I.S Advantage abrufen können.
Nachdem Sie den folgenden Code in den Visual Basic-Editor eingegeben und den Code gesendet haben, sehen Sie, dass Ihr IE geöffnet ist. Die erste Webseite wird angezeigt, gefolgt von der zweiten Webseite. Hier erfahren Sie, wie Sie das Dropdown-Listenelement abrufen, eine Option auswählen und ein Ereignis auslösen, nachdem Sie die Option ausgewählt haben. „m = DH.Dokument.getElementsByTagName(„Option“).Länge – 1″ gibt Ihnen eine Gesamtzahl von Optionen. Dies kann für die nächste Schleife verwendet werden.
Quellcode |
Subject() 'Erstellen InternetExplorerSet DH = CreateObject("InternetExplorer.Anwendung") 'Sehen wir uns das Browserfenster an.Visible = True 'Öffnet die Webseite '.Navigate "http://www.austrade.gov.au/international/buy#" 'Wait while IE is loadingtun Sie, während IE.Beschäftigt Anwendung.Warten DateAdd("s", 1, Jetzt) Schleife Anwendung.Warten (Jetzt + Zeitwert("00:00:10")) ' Teil 1 - Dropdown-Liste auswählen und Ereignis auslösen, nachdem Sie eine Option ausgewählt habenset selectobj = IE.Dokument.getElementsByTagName ("auswählen") m = DH.Dokument.getElementsByTagName("Option").Länge - 1 selectobj(0).SelectedIndex = 1 selectobj(0).fireEvent ("onchange") 'Warten Sie, während IE geladen wirddo Während IE.readyState <> 4 Oder IE.Beschäftigt = Wahre Anwendung.Warten DateAdd("s", 1, Jetzt) Schleife Anwendung.Warten (Jetzt + Zeitwert("00:00:10")) Ende Sub
Dieser Teil des Codes können Sie auf die Web-Seite in Abbildung 2.1, nachdem Sie auf den Vornamen klicken gezeigt leiten. Alle Firmennamen sind im Element mit dem Klassennamen „Name“ enthalten. Searchobj ist eine Sammlung und searchobj(i) kann das (i+ 1) -te Objekt zurückgeben. Zum Beispiel searchobj(1).Klicken Sie hier, um die Webseite von RIDLEY CORPORATION (Melbourne) zu besuchen.
Quellcode |
' Teil 2 - Wählen Sie company NameSet searchobj = IE.Dokument.getElementsByClassName("Name") searchobj(0).Klicken Sie auf 'Warten, während IE geladen wirdWährend IE tun.readyState <> 4 Oder IE.Busy = True DoEvents Schleife
Schließlich ist hier der gesamte Code, der Ihnen den Prozess des Öffnens von IE, des Durchsuchens von Webseiten und des Extrahierens von Daten zeigen kann. Die extrahierten Daten sind die gleichen wie in Abbildung 2.4.
Quellcode |
Subject() 'Erstellen InternetExplorerSet DH = CreateObject("InternetExplorer.Anwendung") 'Sehen wir uns das Browserfenster an.Visible = True 'Öffnet die Webseite '.Navigate "http://www.austrade.gov.au/international/buy#" 'Wait while IE is loadingtun Sie, während IE.Beschäftigt Anwendung.Warten DateAdd("s", 1, Jetzt) Schleife Anwendung.Warten (Jetzt + Zeitwert("00:00:10")) ' Teil 1 - Dropdown-Liste auswählen und Ereignis auslösen, nachdem Sie eine Option ausgewählt habenset selectobj = IE.Dokument.getElementsByTagName ("auswählen") m = DH.Dokument.getElementsByTagName("Option").Länge - 1 selectobj(0).SelectedIndex = 1 selectobj(0).fireEvent ("onchange") 'Warten Sie, während IE geladen wirddo Während IE.readyState <> 4 Oder IE.Beschäftigt = Wahre Anwendung.Warten DateAdd("s", 1, Jetzt) Schleife Anwendung.Warten (Jetzt + Zeitwert("00:00:10")) ' Teil 2 - Wählen Sie company NameSet searchobj = IE.Dokument.getElementsByClassName("Name") searchobj(0).Klicken Sie auf 'Warten, während IE geladen wirdWährend IE tun.readyState <> 4 Oder IE.Busy = True DoEvents Loop 'Teil 3 - Firmennamen abrufen, E-Mail-Adresse & kontaktinformationenset contactobj = IE.Dokument.getElementsByClassName("Kontakt-Details Block dunkel") htext = contactobj(0).innerHTML If InStr(htext, "<p>Firmenname: ") Dann ThisWorkbook.Arbeitsblätter(1).Zellen(1, 1) = Split(Split(htext, "<p> Firmenname: ")(1), "< br")(0) End If If InStr(htext, "mailto:") Dann ThisWorkbook.Arbeitsblätter(1).Zellen(2, 1) = Split(Split(htext, "mailto:")(1), Chr(34) & ">")(0) End If If InStr(htext, "<p>Name: ") Dann ThisWorkbook .Arbeitsblätter(1).Zellen(3, 1) = Split(Split(htext, "<p>Name: ")(1), "< br")(0) Ende, wenn Diesarbeitsbuch.Arbeitsblätter(1).Zellen (4, 1) = DH.LocationURL 'hyperlinkThisWorkbook hinzufügen.Arbeitsblätter(1).Hyperlink.Fügen Sie ThisWorkbook hinzu.Arbeitsblätter(1).Zellen(4, 1), ThisWorkbook.Arbeitsblätter(1).Zellen(4, 1) Ende Sub
In der Tat, was wir tun müssen, ist, Kontaktinformationen für alle Unternehmen aus allen Branchen zu extrahieren, daher müssen wir für Loop-Anweisung verwenden, um diese Aufgabe abzuschließen. Es folgt der vollständige Code. Und Sie können auch den Code in Abrufen von Kontaktinformationen für alle Unternehmen finden.xlsm, die Sie am Ende dieses Artikels herunterladen können.
Quellcode |
Sub Abrufen() Für idex = 2 bis 18 'Create InternetExplorerSet IE = CreateObject("InternetExplorer.Anwendung") 'Sehen wir uns das Browserfenster an.Visible = False 'Öffnet die Webseite'.Navigate "http://www.austrade.gov.au/international/buy#" 'Wait while IE is loadingtun Sie, während IE.Beschäftigt Anwendung.Warten DateAdd("s", 1, Jetzt) Schleife Anwendung.Warten (Jetzt + Zeitwert("00:00:10")) idexn = idex - 1 'Teil 1 - Wählen Sie dropdownSet selectobj = IE.Dokument.getElementsByTagName ("auswählen") m = DH.Dokument.getElementsByTagName("Option").Länge - 1 selectobj(0).SelectedIndex = idexn selectobj(0).fireEvent ("onchange") 'Warten Sie, während IE geladen wirddo Während IE.readyState <> 4 Oder IE.Beschäftigt = Wahre Anwendung.Warten DateAdd("s", 1, Jetzt) Schleife Anwendung.Warten (Jetzt + Zeitwert("00:00:10")) wurl = DH.LocationURL tot = DH.Dokument.getElementsByClassName("SearchTotal")(0).innerHTML pg = Int(tot / 25) + 1 Max = (tot / 25) - 1 'Teil 2 - Select Class = "Name"a = 2 Für j = 1 Bis pg Wenn j = 1 Dann IE.Navigieren (wurl) Sonst DH.Navigate (wurl & "&pg=" & j) Ende, wenn während IE.Beschäftigt Anwendung.Wait DateAdd("s", 1, Now) Schleife Wenn j <> , Dann setze für i = 1 bis 24 searchobj = IE .Dokument.getElementsByClassName("Name") searchobj(ich).Klicken Sie auf 'Warten, während IE geladen wirdWährend IE tun.readyState <> 4 Oder IE.Busy = True DoEvents Loop 'Teil 3 - Firmennamen abrufen, E-Mail-Adresse & kontaktinformationenset contactobj = IE.Dokument.getElementsByClassName("Kontakt-Details Block dunkel") htext = contactobj(0).innerHTML ThisWorkbook.Arbeitsblätter (idex).Zellen(a, 1) = j ThisWorkbook.Arbeitsblätter (idex).Cells(a, 2) = a - 1 If InStr(htext, "<p>Firmenname: ") Dann ThisWorkbook.Arbeitsblätter (idex).Zellen (a, 3) = Split(Split(htext, "<p> Firmenname: ")(1), "< br")(0) End If If InStr(htext, "mailto:") Dann ThisWorkbook.Arbeitsblätter (idex).Zellen(a, 4) = Split(Split(htext, "mailto:")(1), Chr(34) & ">")(0) End If If InStr(htext, "<p>Name: ") Dann ThisWorkbook .Arbeitsblätter (idex).Zellen(a, 5) = Split(Split(htext, "<p>Name: ")(1), "< br")(0) Ende, wenn Diesarbeitsbuch.Arbeitsblätter (idex).Zellen (a, 6) = DH.LocationURL DH.GoBack tun, während DH.Beschäftigt Anwendung.Wait DateAdd("s", 1, Jetzt) Schleife a = a + 1 Next i Else Für i = 0 Bis Max Set searchobj = IE.Dokument.getElementsByClassName("Name") searchobj(ich).Klicken Sie auf 'Warten, während IE geladen wirdWährend IE tun.readyState <> 4 Oder IE.Busy = True DoEvents Loop 'Teil 3 - Firmennamen abrufen, E-Mail-Adresse & kontaktinformationenset contactobj = IE.Dokument.getElementsByClassName("Kontakt-Details Block dunkel") htext = contactobj(0).innerHTML ThisWorkbook.Arbeitsblätter (idex).Zellen(a, 1) = j ThisWorkbook.Arbeitsblätter (idex).Cells(a, 2) = a - 1 If InStr(htext, "<p>Firmenname: ") Dann ThisWorkbook.Arbeitsblätter (idex).Zellen (a, 3) = Split(Split(htext, "<p> Firmenname: ")(1), "< br")(0) End If If InStr(htext, "mailto:") Dann ThisWorkbook.Arbeitsblätter (idex).Zellen(a, 4) = Split(Split(htext, "mailto:")(1), Chr(34) & ">")(0) End If If InStr(htext, "<p>Name: ") Dann ThisWorkbook .Arbeitsblätter (idex).Zellen(a, 5) = Split(Split(htext, "<p>Name: ")(1), "< br")(0) Ende, wenn Diesarbeitsbuch.Arbeitsblätter (idex).Zellen (a, 6) = DH.LocationURL ThisWorkbook.Arbeitsblätter (idex).Hyperlink.Fügen Sie ThisWorkbook hinzu.Arbeitsblätter (idex).Zellen(a, 6), ThisWorkbook.Arbeitsblätter (idex).Zellen (a, 6) DH.GoBack tun, während DH.Beschäftigt Anwendung.Wait DateAdd("s", 1, Now) Schleife a = a + 1 Als nächstes beende ich, wenn ThisWorkbook.Speichern Nächstes j Set IE = Nothing Set contactobj = Nothing Nächstes idex End Sub
Der einzige Punkt, den ich erklären muss, ist in Abbildung 3.2 dargestellt. Ein Web kann nur so viele wie 25 Unternehmen auflisten. Wenn die Gesamtzahl der Unternehmen größer als 25 ist, gibt es mehr als eine Seite. Abbildung 3.2 zeigt, dass es eine Regel gibt, um die Adresse von Seiten nach der ersten Seite abzurufen. Es ist das Ergebnis der Verkettungsadresse der ersten Seite „&pg=“ und der tatsächlichen Seitenzahl. Und für alle Seiten vor der letzten Seite beträgt die Gesamtobjektnummer 25. „IE.Dokument.getElementsByClassName(„SearchTotal“)(0).innerHTML“ kann die Gesamtzahl der Unternehmen innerhalb einer Branche zurückgeben. In unserem Fall wird es 651 sein. Mit „Int (tot / 25) + 1“ erhalten Sie die Gesamtzahl der Seiten. Und „Max = (tot Mod 25) – 1“ kann die maximale Anzahl von Unternehmen auf der letzten Seite zurückgeben. Ich werde hier aufhören und Sie herausfinden lassen, wie Sie diese Idee auf den Code anwenden können. Es ist ein viel besserer Ansatz für Sie, Code zu verstehen. Sie können einen Kommentar hinterlassen, wenn Sie Fragen haben.
Abbildung 3.2
Hier zeigt Ihnen einen Teil des endgültigen Excel. Kontaktinformationen für alle Unternehmen innerhalb einer Branche werden in einem Arbeitsblatt zusammengefasst.
Abbildung 3.3
- Wie extrahiere ich Daten automatisch von der Website nach Excel?
- Importieren von Daten (Satz, Absätze, Tabellen, Kommentare) von Word nach Excel
- 6 beste Excel VBA–Programmierbücher (für Anfänger & Fortgeschrittene Benutzer)
- Lernen Sie die Excel VBA-Programmierung & Makros (kostenloses Tutorial – Schritt für Schritt)
- Excel VBA-Codierungstipps
- Was Sie mit Excel VBA VBA
- Einführung in VBA-Makros
Arbeitsdatei herunterladen
Laden Sie die Arbeitsdatei über den folgenden Link herunter.
Ziehen Sie Daten aus dem Web nach Excel.rar