Hoe importeer ik gegevens van een Website naar Excel?
het is bekend dat World Wide Web enorme nuttige gegevens bevat. We moeten echter de gegevens importeren in Microsoft Excel voordat we enige vorm van analyse doen. Er zijn twee methoden die u kunt gebruiken om dit soort taken te voltooien.
haal externe gegevens handmatig op van Web
stel dat u inkomsten wilt downloaden over top moneymakingfilms van deze webpagina, hier laat u zien hoe u dit gemakkelijk kunt doen.
Open Microsoft Excel en klik op het tabblad Gegevens, in de groep Externe gegevens ophalen, klik vanaf Web. Na Nieuwe Web Query dialoogvenster verschijnt, kopieer het webadres (http://www.the-numbers.com/movie/records/All-Time-Worldwide-Box-Office) in adres veld en klik op Go knop. Excel zal beginnen met het downloaden van de webpagina zoals weergegeven in Figuur 1.1. Klik gewoon op nee als u een Script Error warning box die vergelijkbaar is met die in de onderstaande figuur te krijgen. De doos zal verdwijnen en het heeft geen invloed op uw importproces.
figuur 1.1
er is een pijl in het gele vak in de rechterbovenhoek van het dialoogvenster Nieuwe webquery. Door erop te klikken, kunt u bepalen of soortgelijke pictogrammen voor tabellen te tonen of niet. Er is bijvoorbeeld geen pijlpictogram naast de tabel in het linkerpaneel van figuur 1.2. En er zal een pictogram (in het rechterpaneel) nadat u klikt op de pijl knop om pictogrammen te tonen.
figuur 1.2
klik op het pijlpictogram naast de tabellen die u wilt selecteren. De pictogrammen en tabellen zullen veranderen en vergelijkbaar met die in het linkerpaneel van figuur 1.3. Nadat u op Import; een Gegevens importeren dialoogvenster zal worden gevraagd. Vul het bereik (van kolom A tot Kolom H in ons geval) waar u de gegevens wilt plaatsen en klik op OK.
figuur 1.3
de gegevens worden geïmporteerd in Excel nadat u op Ok klikt. Als u met de rechtermuisknop op een cel in de tabel klikt en Refresh selecteert, zal Excel naar buiten gaan en de meest recente gegevens van een webpagina tevoorschijn halen.
figuur 1.4
en u kunt zelfs uw query-gegevens worden vernieuwd op elke manier die u wilt. Klik met de rechtermuisknop op een cel in de tabel, selecteer Eigenschappen van het gegevensbereik. In het dialoogvenster Eigenschappen voor extern gegevensbereik kunt u de Instellingen voor Verversingscontrole wijzigen om de stijl te wijzigen. U kunt bijvoorbeeld de query opgeven die elke 60 minuten moet worden vernieuwd of wanneer het bestand wordt geopend.
gegevens schrapen met behulp van VBA-programmering
VBA-programmering kan worden gebruikt om gegevens van een webpagina te schrapen. Het is veel nuttiger, terwijl moeilijk bij het vergelijken met de eerste benadering. Bovendien moet u begrijpen wat HTML is voordat u leert hoe u gegevens kunt schrapen met behulp van VBA-programmering. Ik raad je aan om basiskennis van HTML te leren van deze website als je niets of weinig weet over HTML. En vanaf hier kun je bijna alles leren met betrekking tot web schrapen met behulp van VBA. Dit artikel laat u slechts twee voorbeelden zien.
schraap gegevens van één webpagina
stel dat we de bedrijfsnaam, het e-mailadres en de contactnaam van deze webpagina willen extraheren. Als u deze webpagina opent, vindt u onderaan een contactblok. Figuur 2.1 toont het contactblok en de bijbehorende broncode. Informatie in rode dozen is wat we nodig hebben. En degenen met een groene onderstreping zijn precies wat we eruit moeten halen.
Figuur 2.1
met de volgende code kunt u de bovenstaande gevraagde informatie extraheren en in het eerste werkblad plaatsen.
broncode: |
Sub Retrieve_Click () ' Create InternetExplorerSet IE = CreateObject ("InternetExplorer.Toepassing") ' laten we niet zien de browser windowIE.Visible = False ' Open de webpagina.Navigeer "http://www.austrade.gov.au/SupplierDetails.aspx?ORGID=ORG8160044431&folderid=1736 "' wacht terwijl IE wordt geladen do terwijl IE.readyState <> 4 of IE.Busy = True DoEvents Loop ' ophalen bedrijfsnaam, e-mailadres & contactinformatie set contactobj = IE.document.getelementsblassname ("contact-details block dark") htext = contactobj (0).innerHTML MsgBox htext als InStr (htext, "<p>bedrijfsnaam:") dan ThisWorkbook.Werkbladen (1).Cellen (1, 1) = Split (Split (htext, " <p>bedrijfsnaam: ")(1), "<br") (0) End If If InStr (htext, " mailto:") ThisWorkbook.Werkbladen (1).Cellen (2, 1) = Split (Split (htext, " mailto:") (1), Chr(34) & ">")(0) End If If InStr (htext, "<P>Name: ") ThisWorkbook.Werkbladen (1).Cellen (3, 1) = Split(Split (htext, " <p>Naam: ")(1), "<br") (0) einde als ThisWorkbook.Werkbladen (1).Cellen (4, 1) = IE.LocationURL ThisWorkbook.Opslaan set IE = niets instellen contactobj = niets einde Sub
“IE.document.getelementsbclassname (“contact-details block dark”) ” kunt u alle elementen met de class name – contact-details block dark. Deze webpagina toont bijna alle eigenschappen en methoden die kunnen worden gebruikt op HTML-elementen. U kunt de juiste kiezen voor uw eigen probleem.
met de eigenschap innerHTML kunt u de inhoud van een HTML-element instellen of retourneren. In ons geval retourneerde het de inhoud van het element met de klassenaam “contact-details block dark” en stelde het in op een variabele htext. De inhoud (figuur 2.2) kan worden gevraagd door ‘Msgbox htext’.
figuur 2.2
u ziet dat de tekst goed gestructureerd is. Daarom kunnen we de SPLIT-functie gebruiken om te extraheren wat nodig is. Bijvoorbeeld, als we “<p>bedrijfsnaam nemen:”as a delimiter and formula” Split (htext, ” <p>Company Name:”) (1) “kan de hele tekst retourneren na”<p>Company Name:”. Voor deze nieuw geretourneerde tekst kunnen we “<br” als scheidingsteken nemen en de tekst vóór de eerste “<br” krijgen en dat is de bedrijfsnaam. Kortom, SPLIT-functie is een flexibele tool die u kunt gebruiken om bijna alles te extraheren. Andere nuttige functies zijn LEN, INSTR, links, rechts, MID en vervangen. Ik zal hier niet in detail ingaan.
nadat u op OK klikt in Figuur 2.2, de gevraagde gegevens kunnen van het web worden geïmporteerd in een Excel-werkblad. Cel A1 bevat bijvoorbeeld de bedrijfsnaam, terwijl cel A4 het adres van de webpagina van het bedrijf bevat.
figuur 2.3
door de onderstaande code toe te voegen voordat u de werkmap opslaat, kunt u een hyperlink toevoegen aan cel A4.
broncode: |
'voeg hyperlinkThisWorkbook.Werkbladen (1).Koppeling.Voeg Dit Werkboek Toe.Werkbladen (1).Cellen (4, 1), ThisWorkbook.Werkbladen (1).Cellen(4, 1)
als u op cel A4 klikt, kunt u de webpagina opnieuw bezoeken. Dit is vooral handig als je gegevens voor veel bedrijven op te halen. Omdat u op een hyperlink kunt klikken om de bijbehorende webpagina opnieuw te bezoeken en alle informatie handmatig toe te voegen of bij te werken tijdens de beoordeling later.
figuur 2.4
interactie met webpagina ‘ s
het bovenstaande voorbeeld illustreert hoe u gegevens van één statische webpagina kunt ophalen. Maar meer dan vaak, we zijn verplicht om te extraheren hebben interactie met webpagina ‘ s om een grote hoeveelheid gegevens op te halen. Kijk naar figuur 3.1. Het laat je zien hoe je naar de webpagina van het bovenstaande voorbeeld. Je kunt zien dat er veel industrieën zijn en voor elke industrie zijn er veel bedrijven. Zo zijn er 651 bedrijven in de Agribusiness industrie. Wat moeten we doen als we de contactgegevens van alle bedrijven uit alle industrieën willen halen?
Figuur 3.1
wel, het belangrijkste punt is dat hoe VBA interageren met webpagina ‘ s zoals wat we handmatig doen. Laten we S. W. I. ‘ S Advantage als voorbeeld nemen. Over het algemeen hopen we dat Excel op Agribusiness (bovenpaneel van figuur 3.1) kan klikken en zo IE kan activeren om ons naar de tweede webpagina te leiden. Op de tweede webpagina (onderste paneel van figuur 3.1), Excel kan klikken op S. W. I. S Advantage, en dan IE leidt ons naar de pagina zoals weergegeven in Figuur 2.1, zodat we contactgegevens van S. W. I. S Advantage kunnen ophalen.
na het invoeren van de volgende code in Visual Basic Editor en het indienen van de code, zult u zien dat uw IE wordt geopend. De eerste webpagina verschijnt gevolgd door de tweede webpagina. Hier leert u hoe u het vervolgkeuzelijstelement kunt krijgen, een optie kunt selecteren en een gebeurtenis kunt activeren nadat u de optie hebt geselecteerd. “m = IE.document.getElementsByTagName (“optie”).Lengte-1 ” geeft u een totaal aantal opties. Dit kan gebruikt worden voor de volgende lus.
broncode: |
Sub retrieve () ' Create InternetExplorerSet IE = CreateObject ("InternetExplorer.Toepassing") ' laten we eens kijken de browser windowIE.Visible = True ' Open de webpagina.Navigeer "http://www.austrade.gov.au/international/buy# "' wacht terwijl IE wordt geladen doe terwijl IE.Bezig Programma.Wacht Dateadd ("s", 1, Nu) Loop applicatie.Wacht (nu + TimeValue("00:00:10")) 'Deel 1 - Selecteer dropdown lijst en trigger event nadat u een optionSet selectobj = IE.document.getElementsByTagName ("select") m = IE.document.getElementsByTagName ("optie").Lengte - 1 selectobj (0).selectedIndex = 1 selectobj(0).FireEvent ("onchange") 'wacht terwijl IE is loadingDo terwijl IE.readyState <> 4 of IE.Bezig = True Toepassing.Wacht Dateadd ("s", 1, Nu) Loop applicatie.Wacht (nu + TimeValue("00:00:10")) Sub beëindigen
dit deel van de code kan u leiden naar de webpagina weergegeven in Figuur 2.1 na Excel klik op de voornaam. De namen van alle bedrijven zijn opgenomen in het element met de klassenaam “naam”. Searchobj is een verzameling en searchobj (i)kan het (i+1) th object retourneren. Bijvoorbeeld, searchobj (1).Klik kunt u de webpagina van RIDLEY CORPORATION (Melbourne) te bezoeken.
broncode: |
'deel 2 - Select company NameSet searchobj = IE.document.getelementsblassname ("Name") searchobj (0).Klik op ' Wait while IE is loadingDo While IE.readyState <> 4 of IE.Bezig = ware DoEvents-lus
tot slot, hier is de hele code die u het proces van het openen van IE kan laten zien, surfen op webpagina ‘ s, en het extraheren van gegevens. De geëxtraheerde gegevens zullen dezelfde zijn als die in Figuur 2.4.
broncode: |
Sub Retrieve () ' Create InternetExplorerSet IE = CreateObject ("InternetExplorer.Toepassing") ' laten we eens kijken de browser windowIE.Visible = True ' Open de webpagina.Navigeer "http://www.austrade.gov.au/international/buy# "' wacht terwijl IE wordt geladen doe terwijl IE.Bezig Programma.Wacht Dateadd ("s", 1, Nu) Loop applicatie.Wacht (nu + TimeValue("00:00:10")) 'Deel 1 - Selecteer dropdown lijst en trigger event nadat u een optionSet selectobj = IE.document.getElementsByTagName ("select") m = IE.document.getElementsByTagName ("optie").Lengte - 1 selectobj (0).selectedIndex = 1 selectobj(0).FireEvent ("onchange") 'wacht terwijl IE is loadingDo terwijl IE.readyState <> 4 of IE.Bezig = True Toepassing.Wacht Dateadd ("s", 1, Nu) Loop applicatie.Wacht (nu + TimeValue("00:00:10")) 'Deel 2 - Select company NameSet searchobj = IE.document.getelementsblassname ("Name") searchobj (0).Klik op ' Wait while IE is loadingDo While IE.readyState <> 4 of IE.Busy = True Doevents Loop 'deel 3-ophalen bedrijfsnaam, e-mailadres & contactinformatie set contactobj = IE.document.getelementsblassname ("contact-details block dark") htext = contactobj (0).innerHTML If InStr (htext, " <p>bedrijfsnaam:") dan ThisWorkbook.Werkbladen (1).Cellen (1, 1) = Split (Split (htext, " <p>bedrijfsnaam: ")(1), "<br") (0) End If If InStr (htext, " mailto:") ThisWorkbook.Werkbladen (1).Cellen (2, 1) = Split (Split (htext, " mailto:") (1), Chr(34) & ">")(0) End If If InStr (htext, "<P>Name: ") ThisWorkbook.Werkbladen (1).Cellen (3, 1) = Split(Split (htext, " <p>Naam: ")(1), "<br") (0) einde als ThisWorkbook.Werkbladen (1).Cellen (4, 1) = IE.LocationURL ' voeg hyperlinkThisWorkbook.Werkbladen (1).Koppeling.Voeg Dit Werkboek Toe.Werkbladen (1).Cellen (4, 1), ThisWorkbook.Werkbladen (1).Cellen (4, 1) einde Sub
In feite, wat we moeten doen is om contactgegevens voor alle bedrijven uit alle industrieën te extraheren, daarom moeten we gebruiken voor loop statement Om deze taak te voltooien. Hieronder volgt de volledige code. En u kunt de code ook vinden in contactgegevens ophalen voor alle bedrijven.xlsm die u kunt downloaden aan het einde van dit artikel.
broncode: |
Sub Retrieve () voor idex = 2 tot 18 ' maak InternetExplorerSet IE = CreateObject ("InternetExplorer.Toepassing") ' laten we eens kijken de browser windowIE.Visible = False ' Open de webpagina.Navigeer "http://www.austrade.gov.au/international/buy# "' wacht terwijl IE wordt geladen doe terwijl IE.Bezig Programma.Wacht Dateadd ("s", 1, Nu) Loop applicatie.Wacht (nu + TimeValue("00:00:10")) idexn = idex - 1 'deel 1 - Selecteer dropdownSet selectobj = IE.document.getElementsByTagName ("select") m = IE.document.getElementsByTagName ("optie").Lengte - 1 selectobj (0).selectedIndex = idexn selectobj (0).FireEvent ("onchange") 'wacht terwijl IE is loadingDo terwijl IE.readyState <> 4 of IE.Bezig = True Toepassing.Wacht Dateadd ("s", 1, Nu) Loop applicatie.Wacht (nu + TimeValue("00:00:10")) wurl = IE.LocationURL tot = IE.document.getelementsblassname ("SearchTotal") (0).innerHTML pg = int (tot / 25) + 1 Max = (tot Mod 25) - 1 ' Part 2-Select Class = "Name"a = 2 Voor j = 1 naar pg als j = 1 dan dwz.Navigeren (wurl) anders IE.Navigate (wurl & "&pg=" & j) End If Do While IE.Bezig Programma.Wacht dateadd ("s", 1, Nu) Loop als j <> pg dan voor i = 1 tot 24 instellen searchobj = IE.document.getelementsblassname ("Name") searchobj (i).Klik op ' Wait while IE is loadingDo While IE.readyState <> 4 of IE.Busy = True Doevents Loop 'deel 3-ophalen bedrijfsnaam, e-mailadres & contactinformatie set contactobj = IE.document.getelementsblassname ("contact-details block dark") htext = contactobj (0).innerHTML ThisWorkbook.Werkbladen (idex).Cellen (a, 1) = j ThisWorkbook.Werkbladen (idex).Cells(a, 2) = a - 1 If InStr (htext, "<p>bedrijfsnaam: ") ThisWorkbook.Werkbladen (idex).Cellen (a, 3) = Split (Split (htext, " <p>bedrijfsnaam: ")(1), "<br") (0) End If If InStr (htext, " mailto:") ThisWorkbook.Werkbladen (idex).Cellen (a, 4) = Split (Split (htext, " mailto:") (1), Chr(34) & ">")(0) End If If InStr (htext, "<P>Name: ") ThisWorkbook.Werkbladen (idex).Cellen (a, 5) = Split(Split (htext, "<p>Naam: ")(1), "<br") (0) einde als ThisWorkbook.Werkbladen (idex).Cellen (a, 6) = IE.LocationURL IE.GoBack doen terwijl IE.Bezig Programma.Wacht dateadd ("s", 1, nu) lus a = a + 1 Volgende I anders voor i = 0 tot Max Set searchobj = IE.document.getelementsblassname ("Name") searchobj (i).Klik op ' Wait while IE is loadingDo While IE.readyState <> 4 of IE.Busy = True Doevents Loop 'deel 3-ophalen bedrijfsnaam, e-mailadres & contactinformatie set contactobj = IE.document.getelementsblassname ("contact-details block dark") htext = contactobj (0).innerHTML ThisWorkbook.Werkbladen (idex).Cellen (a, 1) = j ThisWorkbook.Werkbladen (idex).Cells(a, 2) = a - 1 If InStr (htext, "<p>bedrijfsnaam: ") ThisWorkbook.Werkbladen (idex).Cellen (a, 3) = Split (Split (htext, " <p>bedrijfsnaam: ")(1), "<br") (0) End If If InStr (htext, " mailto:") ThisWorkbook.Werkbladen (idex).Cellen (a, 4) = Split (Split (htext, " mailto:") (1), Chr(34) & ">")(0) End If If InStr (htext, "<P>Name: ") ThisWorkbook.Werkbladen (idex).Cellen (a, 5) = Split(Split (htext, "<p>Naam: ")(1), "<br") (0) einde als ThisWorkbook.Werkbladen (idex).Cellen (a, 6) = IE.LocationURL ThisWorkbook.Werkbladen (idex).Koppeling.Voeg Dit Werkboek Toe.Werkbladen (idex).Cellen (a, 6), dit werkboek.Werkbladen (idex).Cellen (a, 6) IE.GoBack doen terwijl IE.Bezig Programma.Wacht dateadd ("s", 1, nu) lus a = a + 1 vervolgens eindig ik als ThisWorkbook.Opslaan volgende J Set IE = niets instellen contactobj = niets volgende idex einde Sub
het enige punt dat ik hoef uit te leggen is geïllustreerd in Figuur 3.2. Een web kan slechts een lijst van 25 bedrijven. Wanneer het totale aantal bedrijven groter is dan 25, zal er meer dan één pagina zijn. Figuur 3.2 laat zien dat er een regel is om het adres van pagina ‘ s na de eerste pagina te krijgen. Het is het resultaat van het samenvoegen van het adres van de eerste pagina, “&pg=” en het werkelijke paginanummer. En voor alle pagina ‘ s vóór de laatste pagina is het totale Objectnummer 25. “IE.document.getelementsblassname (“SearchTotal”) (0).innerHTML ” kan het totale aantal bedrijven binnen een industrie retourneren. In ons geval zal het 651 zijn. “Int (tot / 25) + 1” geeft u het totale aantal pagina ‘ s. En “Max = (tot Mod 25) – 1” kan het maximum aantal bedrijven op de laatste pagina retourneren. Ik zal hier stoppen en laat u om uit te zoeken hoe dit idee toe te passen op de code. Het is een veel betere aanpak voor u om code te begrijpen. U kunt een reactie achterlaten als u vragen heeft.
figuur 3.2
hier toont u een deel van de uiteindelijke excel. Contactgegevens voor alle bedrijven binnen één branche worden in één werkblad samengesteld.
figuur 3.3
- hoe gegevens van website naar Excel automatisch extraheren?
- Gegevens Importeren (Zin, Alinea ‘s, Tabellen, Opmerkingen) van Word naar Excel
- 6 Beste Excel VBA Programmeren Boeken (Voor Beginners & Geavanceerde Gebruikers)
- Leren Excel VBA Programmeren & Macro’ s (Gratis Tutorial – Stap voor Stap)
- Excel VBA Codering Tips
- Wat Je Kunt Doen met VBA
- Introductie van VBA-Macro ‘ s
Download bestand
Download het bestand van de link hieronder.
Pull-Data-from-Web-to-Excel.rar