Een eigen data-scraper bouwen voor financiële nieuwswebsites
Een eigen data-scraper bouwen voor financiële nieuwswebsites Je staat voor je scherm, de markten bewegen razendsnel en je weet dat één nieuwsbericht over de ECB of een onverwachte olie-voorraadrapportage je algoritmische bot kan maken of breken. Je wilt die data niet handmatig checken. Je wilt een eigen data-scraper die die nieuwswebsites afspeurt, de relevante items vangt en netjes in je database deponeert. Zo’n scraper is jouw eigen krantenzetter die 24/7 werkt, zonder koffiepauzes. Een data-scraper is een stukje code dat webpagina’s bezoekt, de tekst en metadata uitleest en opslaat. In de context van algoritmische trading betekent dit: nieuwsartikelen over aandelen, indices, valuta, crypto en commodities automatisch ophalen en verrijken met symbols, tijdstempels en sentiment. Waarom handmatig kijken als je bot voor jou scant? Je bespaart tijd, verkleint emotie en bouwt een eigen dataset die je koppelt aan backtests en risicomanagement.Wat is een data-scraper voor financieel nieuws?
Een data-scraper is een stukje Python-code dat webpagina’s bezoekt, de tekst en metadata uitleest en opslaat. In de context van algoritmische trading betekent dit: nieuwsartikelen over aandelen, indices, valuta, crypto en commodities automatisch ophalen en verrijken met symbols, tijdstempels en sentiment. Je scraper is een soort lopende band voor nieuws. Hij haalt een pagina op, filtert de hoofdtekst, herkent tickers als AAPL of BTC, en legt alles vast in een gestructureerde tabel. Zo bouw je een eigen nieuwsdataset die je kunt koppelen aan prijsdata van je broker of data-provider. De kern is simpel: verzamelen, ontdubbelen, opslaan. De kunst zit in de details: herkennen wanneer een artikel relevant is, voorkomen dat je dubbel scoopt, en netjes omgaan met de website.Waarom bouw je dit voor algoritmische trading?
Snelle, betrouwbare nieuwsdata is een randvoorwaarde voor serieuze bots. Zonder goede data worden backtests mooi verhaal, geen bewijs. Met een eigen scraper bepaal je welke bronnen tellen, welke filters je gebruikt en hoe je metadata eruitziet. Je kunt nieuws koppelen aan gebeurtenissen in je backtest. Denk aan earnings-dagen, FOMC-bijeenkomsten of een persbericht van Shell over dividend. Je bot kan dan patronen leren: reageert een aandeel anders op een positief olie-rapport dan op een negatief bericht over governance? Een ander voordeel is risicomanagement. Een scraper kan waarschuwingen triggeren bij ongebruikelijke nieuwsactiviteit, zodat je bot tijdelijk de exposure verlaagt. Je voorkomt dat je long zit tijdens een onverwacht persbericht over een onderzoek door de ACM of de SEC.Hoe bouw je een stabiele scraper: kern en werking
Begin met een duidelijke scope. Kies 5 tot 10 bronnen die relevant zijn voor jouw handelsstijl. Voor een Europese aandelenbot kies je misschien IEX, RTL Z en MarketUpdate. Voor crypto kies je CoinDesk of CoinTelegraph. Houd het aantal bronnen beheersbaar, zodat je kwaliteit kunt bewaken. Bouw je pipeline in vijf stappen:- URLs verzamelen: maak een lijst met categorie-pagina’s en zoekpagina’s, bijvoorbeeld een overzicht van tech-aandelen of de crypto-sectie.
- Content ophalen: gebruik Python met requests en een user-agent. Sla timeouts en fouten netjes op.
- Content extraheren: lees titel, samenvatting, publicatiedatum, auteur, categorie en de volledige tekst. Gebruik selectors of een parser zoals BeautifulSoup.
- Normaliseren: zet datums in UTC, strip HTML, ontdubbel artikelen op url of titel-hash, en voeg ticker-herkenning toe.
- Opslaan en verrijken: schrijf naar SQLite of PostgreSQL, voeg een sentiment-label toe en koppel eventueel aan prijsdata.
import requests, time, hashlib from bs4 import BeautifulSoup def fetch(url): headers = {'User-Agent': 'TradingBotScraper/1.0'} r = requests.get(url, headers=headers, timeout=10) r.raise_for_status() return r.text def extract(html, source): soup = BeautifulSoup(html, 'html.parser') item = { 'title': soup.select_one('h1') and soup.select_one('h1').get_text(strip=True), 'summary': soup.select_one('.summary') and soup.select_one('.summary').get_text(strip=True), 'body': soup.select_one('.article-body') and soup.select_one('.article-body').get_text(strip=True), 'published_at': soup.select_one('time') and soup.select_one('time')['datetime'], 'source': source, 'url': url } item['hash'] = hashlib.sha256((item['title'] or '').encode()).hexdigest() return item def save(item): # pseudo-code: insert into news table if hash not exists pass
Voor herkenning van tickers kun je een lijstje van 50 à 200 tickers bijhouden en daarop matchen. Voor Europese aandelen voeg je ISIN’s toe. Voor crypto voeg je symbolen als BTC, ETH en SOL toe. Je kunt ook een lookup-table aanleggen per bron, want sommige sites noemen een bedrijf anders dan je tickerlijst. Om ontdubbeling te doen, vergelijk je de hash van de titel, of de combinatie van titel + eerste zin. Artikelen met dezelfde hash worden overgeslagen. Zorg voor een veld ‘first_seen_at’ om de volgorde te bewaren.Praktische valkuilen en hoe je ze oplost
Veel financiële sites bieden geen open API voor hun nieuws. Dat betekent dat je moet scrapen, maar wel respectvol. Overweeg een betaalde API als je professioneel gaat, zoals Alpha Vantage News (vaak vanaf €29/maand) of een datafeed via je broker. Als je scrape, houd je aan limieten en vermijd je overbelasting. Technische valkuilen:- JavaScript-rendering: sommige sites laden content dynamisch in. Gebruik dan Playwright of Selenium, maar liever eerst een eenvoudige HTTP-call als dat kan.
- Wijzigende HTML-structuur: selectors breken snel. Bouw tests die controleren of je nog steeds titel en datum vindt.
- Datums en tijdzones: sla altijd UTC op, met een veld voor bron-tijdzone. Dat voorkomt mismatch met je prijsdata.
- Rechtmatigheid: lees de voorwaarden, robots.txt en auteursrechten. Gebruik data alleen voor eigen analyse, niet voor publicatie.
Varianten en prijsindicaties voor data
Er zijn drie hoofdvarianten:- Zelf scrape: gratis, maar je onderhoudt de code. Geschikt voor individuele traders met een beperkte set bronnen. Kosten: vooral tijd, plus een VPS van €5–€15 per maand.
- Commerciële nieuws-API: stabiel en gestructureerd, vaak met historiek. Voorbeelden: Alpha Vantage News, NewsAPI, of een data-abonnement via je broker. Prijzen liggen rond €20–€100 per maand, afhankelijk van volume.
- Hybride: een eigen scraper voor specifieke bronnen, plus een API voor aanvulling. Dit combineert lage kosten met bredere dekking.
Praktische tips voor een soepele start
- Begin klein: pak eerst één bron en één categorie. Zorg dat je pipeline stabiel loopt voordat je uitbreidt.
- Bouw tests: een testset van 50 artikelen die je scraper moet herkennen. Draai deze regelmatig om regressies te vangen.
- Log en monitor: sla fouten op, meet snelheid, en stel eenvoudige waarschuwingen in via e-mail of Slack.
- Beperk request-rate: max 1 verzoek per 2–5 seconden per bron. Gebruik random pauzes om natuurlijk gedrag te tonen.
- Gebruik een VPS: een kleine cloud-VM draait je scraper stabiel en onafhankelijk van je laptop. Kies 1–2 cores en 2–4 GB RAM, voldoende voor lichte scraping.
- Sla gestructureerd op: SQLite voor start, PostgreSQL voor groei. Maak indices op ‘published_at’ en ‘ticker’ voor snelle queries.
- Denk aan privacy: bewaar alleen wat je nodig hebt, en anonymiseer eventuele gebruikersdata.
- Plan onderhoud: reserveer wekelijks tijd voor broncontrole en selector-updates.
