Tactieken en overwegingen bij web scraping

2024-04-18 Thijs

ReCAPTCHA: Select all images with a fire hydrant.

Om de een of andere reden ging het bij recente hobbyprojecten vaak om het automatisch verzamelen en verwerken van gegevens van websites. Dit is een activiteit die bekend staat als web scraping. Omdat de meeste eigenaren van websites waarde hechten aan de informatie die ze hebben, kom je vaak verschillende maatregelen tegen om deze extractie van het web te voorkomen. Een van de bekendste maatregelen is de (Re)CAPTCHA, waarvoor ik meer brandkranen heb moeten aanwijzen dan ik zou willen. Er kunnen lange discussies worden gevoerd over de ethische / morele en juridische implicaties van deze bezigheid. Al met al geloof ik dat het uitwisselen van informatie het doel is van het internet en dat een beetje automatisering als onderdeel van dat proces kan worden verwacht. Desalniettemin zie ik ook dat zorgvuldig samengestelde datasets op websites een belangrijk bezit kunnen zijn dat beschermd moet worden.

Omdat het omzeilen van beveiligingsmaatregelen voor web scrapers op zichzelf al een interessante uitdaging is, zal ik in deze post enkele basistechnieken delen die ik heb geleerd.

Realistische user agents

De User-Agent header wordt door je browser gebruikt om de algemene instellingen van de browser en je besturingssysteem door te geven. De agent die je browser nu gebruikt om deze pagina te bezoeken is onbekend, knap gedaan . Omdat bij het programmatisch ophalen van een webpagina meestal geen user-agent wordt meegestuurd, of één die duidelijk geen echte webbrowser beschrijft, blokkeren sommige websites op basis hiervan verzoeken. De oplossing is natuurlijk om een user agent te configureren voor je web scraper. Iemand heeft een lijst gepubliceerd op GitHub met 1000 opties om mee te beginnen.

Hou jezelf in

Als je 50 pagina’s van een website moet ophalen, wil je die natuurlijk snel hebben. Maar elke pagina tegelijkertijd opvragen is misschien niet het beste idee als je niet geblokkeerd wilt worden. Veel webservers hebben methoden om dienst te weigeren aan IP-adressen die in korte tijd te veel aanvragen versturen. Er is zelfs een HTTP-statuscode voor (429). De oplossing is om het wat rustiger aan te doen. Het ophalen van 50 pagina’s met een tempo van 0,5 pagina per seconde duurt nog steeds minder dan twee minuten. Uiteindelijk is het niet bombarderen van een website met verzoeken gewoon veel aardiger.

Een vriendelijke robot browst het internet, gegenereerd door DALL-E 3.

Proxies

Hier wordt het wat slordiger. Als al je methodes niet werken om volledig te voorkomen dat je geblokkeerd wordt, kun je overwegen om over te stappen op een geheel nieuwe internetverbinding om het toch te blijven proberen. Anonieme proxy’s zijn een manier om dit te doen. Zodra je dit punt bereikt, begeef je je wel op glad ijs. De website die je probeert te scrapen wil echt niet dat je dit doet, ervan uitgaande dat je de basismethoden hebt geprobeerd. Dat zou je aan het denken kunnen zetten. Desalniettemin zijn er tegenwoordig steeds meer proxy-diensten die je voorzien van een groot aantal IP-adressen waar je gebruik van kunt maken. Zorg er alleen voor dat je niet medeplichtig wordt aan het runnen van een botnet!