De afgelopen jaren is de trend van een meer datagedreven wereld duidelijk zichtbaar. Binnen alle domeinen is het gebruik en daarmee ook het verzamelen en bezitten van data van steeds groter belang.
Om deze groei te faciliteren is er ook in tools voor web scraping een doorzettende trend te zien. Als er bijvoorbeeld gekeken wordt naar de aantallen dat ‘Web Scraping’ op Google als zoekterm wordt afgevuurd, dan doet zich er in het afgelopen decennium een opmerkelijke stijging voor. Deze stijging in populariteit is bijvoorbeeld ook te zien voor het veelgebruikte package ‘BeautifulSoup’ van Python, dat tot op heden als golden standard voor scraping gezien wordt.
Maar wat is web scraping? Web scraping is in feite het afhalen (‘scrapen’) van informatie van websites. Het is een techniek waarbij software wordt gebruikt om informatie te extraheren en eventueel op te slaan en te analyseren. Op het internet is heel veel data beschikbaar die interessant kan zijn, maar het handmatig in kaart brengen van al die data kost echter heel veel tijd. Daarnaast kan de informatie elke dag veranderen. Met behulp van scrapen kan data geautomatiseerd van het web verzameld worden. Een voorbeeld waarbij web scraping wordt gebruikt is online prijsvergelijkingen. Websites zetten hierbij web scraping in om een zo goedkoop mogelijk product voor je te vinden door prijzen op verschillende websites met elkaar te vergelijken. Verder zijn het verzamelen van nieuwsartikelen, monitoring van weergegevens en het verzamelen van beurskoersen voorbeelden van scrapen.
Hoe werkt het?
Een web scraper kan een simpele add-on tool binnen je web browser zijn. Echter, als we het over de geautomatiseerde manier van scrapen hebben, is het gebruikelijk om deze software zelf te programmeren. Maar hoe? Als je er conceptueel naar kijkt zijn er maar twee verschillende inputs nodig die je aan één van de vele web scraping packages moet voeren: de website waar informatie vandaan gehaald moet worden en een specificatie van welk onderdeel van de website.
Basis URL(s)
Je basis URL is de link van de website die je meegeeft om informatie uit te trekken. Als de plek van de website op het internet niet bekend is, kan er gebruik gemaakt worden van crawlers (ook wel ‘spiders’ genoemd) die links verzamelen met de gezochte inhoud. Hét voorbeeld van een web crawler is Google; gebaseerd op een zoekopdracht struint het algoritme het internet door op zoek naar passende links.
HTML input
Als de basis URL’s verzameld zijn, dan moet de scraper nog weten welk stuk van de website interessant is. In eerste instantie haalt een web scraper alle informatie van de links binnen. In principe downloadt hij de HTML-code van de websites waaruit verschillende onderdelen van de website geëxtraheerd kunnen worden, zoals bijvoorbeeld de titel van deze tekst of de tekst die je nu aan het lezen bent. Elk onderdeel van de website, ook wel ‘node’ genoemd, kan je terugvinden in de HTML-code van de site. Highlight eens het tussenkopje van deze alinea (‘HTML input’), druk op ‘ctrl’+’shift’+’I’ en inspecteer deze pagina. De informatie van de titel bevindt zich dus in de node ‘h3’.
Als je weet welke informatie er nodig is om aan te geven welk deel van een website je wilt extraheren, dan hoef je deze input alleen nog in een programmeertaal vertalen. Benieuwd hoe dat in zijn werk gaat? In onze use case van een sentimentanalyse van de GGD in NOS-nieuwsberichten laten we je stap voor stap zien hoe je scrapen in Python met BeautifulSoup kunt toepassen.
Is het legaal?
Scrapen is soms grijs gebied. Of het legaal of illegaal is, is namelijk niet altijd duidelijk en verschilt ook nog eens vaak per land. Er zijn een aantal redenen waarom je als website host niet altijd even blij zult zijn met scrapers die je informatie ophalen.
Eén reden hiervoor is dat de server, waarop de website draait, overbelast kan raken. Doordat er gebruik wordt gemaakt van automatische scripts, wordt de website soms meerdere keren per seconde bezocht. Dit is veel sneller dan een mens ooit zou kunnen klikken, waardoor de server meer requests krijgt dan hij van gewone gebruikers gewend is. Als continu hetzelfde IP adres een webserver benadert, is het niet moeilijk voor de website om dit op te sporen en als gevolg deze gebruiker te blokkeren.
Omdat een verzameling van data in enkele gevallen als eigendom gezien kan worden, kan het scrapen ervan soms ook beschouwd worden als onrechtmatig gebruik van informatie. Juridisch gezien heeft dit te maken met het zogenaamde databankenrecht dat kan rusten op een verzameling van data. Een voorwaarde voor dit recht is dat er voldoende geïnvesteerd moet zijn in de opbouw en het onderhoud van de databank. Er is hiervoor één criterium: de databank moet deel uitmaken van de core business van de websitebouwer. Funda is een voorbeeld van een website waarvoor het databankenrecht geldt. Hun huizenoverzicht is een beschermde database, omdat dit hun investering is. Een site met nieuwsberichten is een voorbeeld van een website met geen beschermde database.
Al met al blijft scrapen dus een grijs gebied. Wanneer je web scraping wilt gaan gebruiken is het altijd verstandig om van tevoren te controleren of de data die je wilt scrapen vrij te gebruiken is. Bij sommige websites staat dit beschreven onder de gebruikersvoorwaarden. Op de website van Twitter staat bijvoorbeeld beschreven dat er eerst toestemming moet worden gevraagd voordat je mag gaan scrapen. Lees daarom altijd de gebruiksvoorwaarden of vraag toestemming aan de desbetreffende website voordat je aan de slag gaat!
Benieuwd naar het verzamelen (scrapen) van data van een nieuwssite? Wij hebben een Use Case Web Scraping geschreven waarin we gebruik maken van Python en je stap voor stap uitleggen wat er in de code gebeurt.
Dit artikel is geschreven door Nele Wensauer & Sanne Beurskens.