#Techtips: Data van een website scrapen voor beginners
Wekelijks delen wij tips die jou helpen om het gebruik van Tableau, Alteryx, Snowflake, Matillion en DataRobot nog makkelijker te maken. Deze tips zijn afkomstig van onze gecertificeerde consultants die dagelijks met deze tools werken. Heb jij een handige tip voor iedereen? Laat het ons van vooral weten.
Deze week is het de beurt aan onze collega Jeroen Jacobs: Soms heb je een vraagstuk waarvoor je data wil gebruiken van het internet, maar deze data is niet altijd beschikbaar als dataset. In sommige gevallen kun je de data die op een website staat met een paar simpele handelingen ophalen in een formaat waar je snel mee aan de slag kunt.
Website data
Voor dit voorbeeld willen we nieuwsdata verzamelen van nieuwswebsite nu.nl, maar het is toepasbaar op bijna alle websites die ‘data ophalen’.
Als je deze pagina ‘opslaat’, krijg je geen werkbare dataset. Ook alles selecteren en kopiëren/plakken levert zeker niet het gewenste resultaat.
Een website is eigenlijk een schil die wordt gevuld met data. De schil bevat de opmaak van de pagina, maar die is voor onze wens niet relevant. In de schil zit de data en die hebben we nodig.
Om te begrijpen waar de data vandaan komt moeten we naar de ‘achterkant’ van de website kijken. Dit klinkt moeilijk, maar dat valt reuze mee.
Scrapen
Let op: het (geautomatiseerd) scrapen van websites en gebruik van data van derden is niet altijd toegestaan. Kijk hiervoor altijd in de voorwaarden van een webpagina.
Wanneer je in je browser (Chrome in dit voorbeeld) op rechtermuisknop → Inspecteren klikt, opent zich een venster met een aantal tabbladen. Ga naar het tabblad ‘Netwerk’ en laad de pagina opnieuw.
Vervolgens klik je op het filter ‘Fetch/XHR’ (1), hierin staan alle opdrachten die de website geeft om data op te halen.
We zien hier een lijst met opdrachten, waarvan er eentje begint met ‘articlelist’ (2). Dat klinkt als iets wat we nodig hebben, dus daar klikken we op, waarna we de url zien die die opdracht aanroept (3).
In deze url zitten ook een aantal filters verwerkt: https://www.nu.nl/block/lean_json/articlelist?limit=20&offset=0&source=latest&filter=site
Zo zien we ‘limit=20’, dit betekent dat er maximaal 20 artikelen per keer worden opgehaald. Als we deze url kopiëren en in een nieuw tabblad kijken wat hier achter zit, zien we de ruwe data.
Ophalen & parsen
In Alteryx gebruiken we bovengenoemde URL met een tekst input tool als start van onze workflow. Deze URL halen we op met de Download tool en parsen we vervolgens met de JSON tool. Daarna hebben we 2 kolommen waar we een mooi datamodel mee kunnen bouwen; JSON_Name en JSON_ValueString. De JSON_Name moeten we eerst nog opknippen in een aantal kolommen, zodat we nette kolomnamen krijgen en een ‘groepeerveld’ (het getal dat aangeeft dat regels bij elkaar horen). Tot slot gebruiken we de Cross Tab tool om een nette tabel te maken en deselecteren we de kolommen die we niet nodig hebben.
Zoals je kunt zien hebben we met een eenvoudige workflow een mooie dataset gemaakt van de website.
Met deze URL kunnen 20 resultaten per keer worden opgehaald, maar in de dataset komt ook meteen de URL voor de 20 volgende records mee (en in die 20 zit dan weer de link voor de volgende). Hier zouden we een iteratieve Macro voor kunnen bouwen, zodat je een grotere dataset kunt bouwen. Hoe dit werkt? Dat is een onderwerp voor een toekomstige #TechTip!
Wil je hulp bij het bouwen van een dergelijke oplossing? Neem dan contact met ons op.