Verwerk duizenden adressen efficiënt met Python, Pandas en async requests. Complete scripts voor data cleaning en geocoding.
Python is de ideale taal voor data processing. In dit artikel laten we zien hoe je met Pandas en asyncio efficiënt grote adresbestanden verwerkt en geocodeert.
Setup en dependencies
pip install pandas aiohttp python-dotenv tqdm
Async geocoding class
import asyncioimport aiohttpfrom typing import List, Dict, Optionalfrom urllib.parse import quoteimport osimport timeclass AsyncGeocoder:def __init__(self, api_key: str, concurrency: int = 10):self.api_key = api_keyself.semaphore = asyncio.Semaphore(concurrency)self.token: Optional[str] = Noneself.token_expiry: float = 0async def get_token(self, session: aiohttp.ClientSession) -> str:"""Haal een nieuw token op of gebruik cached token"""# Vernieuw token als bijna verlopen (binnen 1 minuut)if not self.token or time.time() > self.token_expiry - 60:async with session.post("https://api.georex.nl/api/token",headers={"X-API-Key": self.api_key}) as response:data = await response.json()self.token = data["token"]self.token_expiry = time.time() + data["expires_in"]return self.tokenasync def geocode_one(self, session: aiohttp.ClientSession, address: str) -> Dict:async with self.semaphore:token = await self.get_token(session)query = quote(address)async with session.get(f"https://api.georex.nl/geocode?q={query}&token={token}") as response:data = await response.json()# GeoJSON response verwerkenif data.get("features"):feature = data["features"][0]lon, lat = feature["geometry"]["coordinates"]return {"address": address,"found": True,"lat": lat,"lon": lon,**feature["properties"]}return {"address": address, "found": False}async def geocode_batch(self, addresses: List[str]) -> List[Dict]:async with aiohttp.ClientSession() as session:tasks = [self.geocode_one(session, addr)for addr in addresses]return await asyncio.gather(*tasks)# Gebruikasync def main():geocoder = AsyncGeocoder(os.getenv("GEOREX_API_KEY"))addresses = ["Damrak 1, Amsterdam", "Coolsingel 40, Rotterdam"]results = await geocoder.geocode_batch(addresses)for r in results:if r["found"]:print(f"{r['address']} -> {r['lat']}, {r['lon']}")asyncio.run(main())
Pandas integratie
Combineer met Pandas voor verwerking van CSV/Excel bestanden.
Samenvatting
Python's async capabilities en Pandas maken bulk geocoding een fluitje van een cent. Met de juiste error handling en rate limiting kun je miljoenen adressen verwerken.
Gerelateerde artikelen

Batch geocoding: duizenden adressen verwerken
Leer hoe je efficiënt grote hoeveelheden adressen geocodeert met batch processing, async patterns en optimale performance.
Lees meer
GeoRex integreren in Magento 2
Complete gids voor het integreren van GeoRex adresvalidatie in je Magento 2 webshop, inclusief module setup en checkout customization.
Lees meer
Geocoding in React/Next.js applicaties
Bouw een moderne geocoding ervaring in React met hooks, debouncing, autocomplete en MapLibre kaartintegratie.
Lees meer