2016-1
Geo-Info
41
het mogelijk een overzicht te krijgen van de
landen die de door Nederland ingediende
resoluties hebben gesteund?
Wat blijkt nu? De benodigde data is niet in een
kant-en-klaar bruikbaar formaat te downloa
den. Ze zijn wel te bekijken op de website van
de Verenigde Naties. Een enkele pagina is met
selecteren, kopiëren en plakken nog wel hand
matig te behandelen, maar met meer dan
4.000 door Nederland ingediende resoluties
wordt het een ander verhaal.
Dat wordt datascrapendoor automatisch de
gezochte pagina's in te lezen, het juiste deel
selecteren en dit weg te schrijven naar een
bruikbaar bestand.
In feite bestaat het datascrapen uit twee
elementen: het zoeken van de juiste verwijzin
gen op de website, en het verwerken van de
inhoud van de pagina's waarnaar verwezen
wordt in een script.
Hoe haal je het juiste stuk uit de website?
Net als een boek is een website opgedeeld in
handzame blokken. De kaft van de website is
dan de <body>, daarbinnen bevindt zich de
inhoud, netjes gerangschikt in blokken, ofwel
in een <div>. Deze blokken zijn afzonderlijk te
bekijken en op te halen, door de broncode te
bekijken. Dit kan in elke browser, meestal met
de functietoets F12.
Om het principe te illustreren heb ik in Firefox
Funda.nl geopend, waarbij ik gezocht heb
naar appartementen te huur in Wageningen.
Er zijn 7 appartementen te huur, elk resultaat
is een rij in een tabel. Met de inspectietools
die onder F12 tevoorschijn komen, is de eerste
rij geselecteerd. In het stukje code van deze
tabelrij staat de specifieke url van dit appar
tement genoemd: href="/huur/wageningen/
appartement-49400678-churchillweg-88/".
Automatiseren in een script
Dit proces kan met een script worden geau
tomatiseerd. Het bovenstaande zou dan in
lekentaal te beschrijven zijn als:
Ga naar de website Funda.nl,
Zoek Wageningen, huur, appartement
Zoek naar het stuk code waarbinnen de
lijst staat
Geef per rij de tekst achter href
Schrijf de verzamelde gegevens weg als
'huurwoningen Wageningen.CSV'
Het script waarmee de VN-resoluties zijn
verzameld in een tabel was geschreven in de
taal R, maar het kan ook met een willekeurige
andere taal, bijvoorbeeld Python.
Voor de VN-resoluties worden een aantal bestan
den aangemaakt. Voor de tabel un-member-
states geldt dat het volgende wordt uitgevoerd:
Geef een lijst van alle lidstaten
Zoek de hyperlink naar de zoekpagina voor
de draft-resolution voor elke lidstaat
Tel het aantal draft-resolutions waar elke
lidstaat aan bij heeft gedragen
Schrijf deze gegevens weg in un-member-
states.csv
De gehele code is te downloaden van github.com/
FrieseWoudloper/un-draft-resolutions.
Talen voor webvisualisatie
Online kaarten worden op een andere
manier opgemaakt dan in een desktop-
GIS, zoals bijvoorbeeld QGis of ArcGis.
Data wordt op een server gezet en daarna
met code van styling voorzien. Een aantal
mensen had wel met GeoServer en Open
Layers gewerkt, waarbij de styling plaats
vindt via SLD, Styled Layer Description. Dit is
een op XML gebaseerde taal die vrij lastig is
voor beginners. Gelukkig is Qgis inmiddels
zo ver ontwikkeld dat de opmaak daarin
gemaakt kan worden, waarna deze als SLD
kan worden geexporteerd.
De ontdekking van CartoCSS was een
eye-opener, dit is zoveel eenvoudiger en
compacter dan SLD. Voor mensen die niet
gewend zijn om code te lezen en schrijven,
is het vaak best lastig om een webkaart op
te maken met SLD. CartoCSS is veel beter
te begrijpen omdat het korte commando's
gebruikt, zoals 'Marker-Fill'.
SLD
<09c:Filtcr>
<ogcPrcpart yl sSqua Ho»
<oqcEx op ert: >ob 3 e et</ oq cra per t yNasze
<oqc :Liwïx41>K»CKFIïTS-w ogc;Litetal>
oqc-Prop*rtyl*ZqualTd>
</ogc:FilC€E>
CartoCSS
«fiatadiafatallan Jetojeet-^aaOKFISTS":
<Eloi.ac£ytabcll2fir>
<Gtaptu.O
<HêllKnowfHu»>eixele</H611K nownH au>
<Fill>
<Cja Pararaat# r ■Li^*«-llll,,>#D630i3></CafC*c*in*cax>
Fill?-
<CBsfarasK>r 1 ti ff fff Ca ic&rmtet
<CiaParanatal troka Ca «Paramat ar
</8trok*>
</Kaxk>
<Siaa>10</Sixa>
</Grdphic>
Point Syefae li iet
marker-fill: tD€301D;
rarkar-lina-celcr: Srte;
ca rk er-Line-width1;
I tt hwuf m M 1
tt ft 6
HuurwflninfM CrfMflfÜMt Vetowe t Wjawiktttn lor» met niM I AQO*i Urnen I ZMkflpfrldÜ Imtett-n
n L.Aiertj 9 Kun Vraapwlji
T9WU9T|T| verhuurd
C 7« mnd
tWklA* *WMf
1 hun h»
6796 AD WjMflVigfh
Ree 10 (AakaUars
et-w
Markt 1J
«791 Cl
r Ga
anhoopmafccUai op
hj bnahetjjis.nl
Buitenwijk Wat®
Buifcrwijk W49»
Chide Stad atana
ft
Thorback+itrut a
0 CtbiHOP Y? StatattOT
t O50BSO „nd
"7 riHvrfrk
l:cï
1 1 [i
k teer let type-"' E r«- fX/Krlpti
MlcTift Urui'ui"X'Hric!
cserfpt
i.div c 1 as3"V 1 i-i11
(tcrlptK/itHK)
k (scriptx/icrift>
•MHIIIU*
«n«*let 1 -■
Ter vergelijking staat de kaartopmaak van de
fietsdiefstallen zoals in MapBox was gemaakt hier
boven weergegeven in zowel SLD als CartoCSS.
Voor dezelfde opmaak, namelijk een rode cirkel
met een witte outline zijn in CartoCSS slechts 3
regels nodig, tegen een hele rij tekst in SLD...
Een troost voor wie kaarten wil gaan publiceren
met GeoServer en OpenLayers: er is een plug-in
voor GeoServer voor opmaak in CartoCSS.
www.mapillary.com
CartoDb kaart van Delft: bit.ly/iPjsykH
www.mapbox.com
rotterdamopendata.nl/dataset/fietsdiefstal-
rotterdam-20ii-tot-20i3
Namens MapTime Summercamp: Erik Meerburg,
Philippe Casteleyn, Willy Bakker en Jonna Bosch.