Web scraping met PHP

Afgelopen jaar heb ik Websitescanner.nl gebouwd een service waar mensen gratis feedback kunnen krijgen op On-site SEO van de opgegeven URL.

De gebruikte programmeer taal hiervoor was PHP met behulp van PHP Simple HTML DOM Parser, een open-source script gespecialiseerd in het vinden van bepaalde elementen op een pagina.

Wat is web scraping en waar moet je op letten

Web scraping is een computer software techniek voor het ophalen van (specifieke) informatie van websites. Web scraping technieken worden soms door bijvoorbeeld prijsvergelijkingswebsites gebruikt om up-to-date te blijven met de prijs informatie maar ook door makelaars kantoren om een compleet overzicht te kunnen bieden van huizen in de buurt die te koop zijn.

Bij het scrapen van content moet je goed op letten of dit wel mag. Het kan zijn dat een site in de copyrights heeft gezet dat content van een site niet gekopieerd mag worden. Daarnaast moet je scrapen met maten. Telkens als je weer een pagina scant is dit voor de site die wordt gescand alsof er een pagina voor een bezoeker moet worden geladen. Het kost dataverkeer en bij 100.000+ bezoeken kan het wel eens zo zijn dat jouw IP adres wordt geblokkeerd voor overmatig gebruik.

Google zal in dit geval bijvoorbeeld een Captcha code laten zien om te checken of je geen robot bent.

PHP Simple HTML DOM parser

PHP Simple HTML DOM Parser is een PHP script die het mogelijk maakt om HTML scripts te manipuleren op een eenvoudige wijze. Het vinden HTML tags kan met selectors die ongeveer hetzelfde werkt als dat je het zou doen met jQuery. Hierbij kun je denken aan de titels van producten met daarbij product informatie maar ook de top 10 resultaten van Google op een bepaald zoekwoord.

PHP Simple HTML DOM Parser ondersteunt onjuiste HTML dus ook als een webpagina niet helemaal goed is zal deze alsnog correct worden gelezen door het script. Voor het script is ook een redelijke online documentatie met voorbeelden hoe je HTML scripts kunt uitlezen of kunt manipuleren.

Web scraping stap voor stap

Stap 1 – Broncode opslaan in een variabele

<?php

include 'simple_html_dom.php';

// DOM opslaan in variabele
$html = file_get_html('https://www.google.nl/');

?>

Het is onnodig om voor elk elementje dat je nodig hebt op een webpagina de webpagina nogmaals op te halen daarvoor wordt in dit geval de broncode in zijn geheel als DOM structuur opgeslagen in de variabele om later hieruit elementen te selecteren.
Let er hierbij op dat je het bestand simple_html_dom.php hebt gedownload en in de zelfde map hebt geplaatst als het bestand waar je in aan het werken bent.

Stap 2 – Selecteren van een element

Om te starten begin ik met het selecteren van het title tag element om later te te printen naar het scherm door middel van een echo.

<?php

include 'simple_html_dom.php';

// DOM opslaan in variabele
$html = file_get_html('https://www.google.nl/');

if(!empty($html)){
    $titletag = $html->find("title", 0);
        if ($titletag) {
            $titletag = htmlentities(preg_replace('/\s+/', ' ', $titletag->plaintext));
            echo $titletag;
        }
}

?>

Bij dit code voorbeeld ben ik misschien wat extreem al het het resultaat te verwerken maar het is wel een goed voorbeeld. Met de if(!empty($html)) check ik of de pagina wel daadwerkelijk is opgeslagen in de variabele. Het kan wel eens gebeuren dat een webpagina niet geladen kan worden omdat een website niet bestaat of tijdelijk offline is.

Meer stappen zullen op korte termijn nog door mij geschreven worden. Wil je al direct verder met PHP web scraping? Ga dan verder aan de hand van de online documentatie van PHP Simple HTML DOM Parser.

Python als alternatief van PHP

Als je bekend bent met Python dan raad ik je aan om Python te gebruiken met de packages Requests en BeautifullSoup (4) in plaats van PHP, let er dan wel op dat Python niet zomaar naar de front-end geschreven kan worden. Vooral als het gaat om Big Data applicaties kan het gebruikt worden voor betere fout afhandeling en snellere werking. De nieuwe versie van Websitescanner: Websitescanner.io is ook gebouwd op basis van Python.

Een developer nodig met kennis van webscraping met PHP en/of Python? Neem dan contact met mij op via de contact pagina.

Add Comment