Afgelopen weekend heb ik een hele pot koffie leeggedronken terwijl ik de Amazon Best Sellers-pagina op vier verschillende manieren probeerde te scrapen. Twee methodes werkten prima, één methode zette mijn IP bijna op de zwarte lijst, en één had letterlijk maar één klik nodig. Dit is alles wat ik heb geleerd.
Amazon is een enorm marktplaats-ecosysteem — 600 miljoen productvermeldingen, 310+ miljoen actieve klantaccounts, en een Best Sellers Rank (BSR)-systeem dat elk uur wordt bijgewerkt. Doe je aan FBA-productonderzoek, concurrentieanalyse op prijs of probeer je trends te spotten vóór je concurrenten dat doen? Dan is Best Seller-data pure goudwaarde.
Maar die data uit Amazon halen en in een spreadsheet krijgen? Daar wordt het interessant. Ik heb requests + BeautifulSoup, Selenium, een scraping-API en Thunderbit (onze no-code AI webscraper) getest om te zien welke aanpak echt resultaat levert — en welke je vooral naar een CAPTCHA-pagina sturen.
Wat zijn Amazon Best Sellers eigenlijk, en waarom zou je je erin verdiepen?
Amazon Best Sellers Rank (BSR) is Amazons realtime ranglijst van producten op basis van verkoopaantallen binnen elke categorie. Zie het als een populariteitswedstrijd die elk uur wordt bijgewerkt op basis van zowel recente als historische verkoopdata. Amazon zelf legt het zo uit:
"The Amazon Best Sellers calculation is based on Amazon sales and is updated hourly to reflect recent and historical sales of every item sold on Amazon." — Amazon Seller Central
De Best Sellers-pagina toont de top 100 producten per categorie, verdeeld over twee pagina’s van elk 50 producten. Pagina 1 bevat rang #1–50, pagina 2 rang #51–100. Amazon heeft bevestigd dat pageviews en klantreviews géén invloed hebben op BSR — het draait puur om verkoop.
Wie heeft er iets aan deze data? E-commerceverkopers die producten zoeken voor FBA, salesteams die concurrentie-inzichten opbouwen, operations-teams die prijstrends monitoren en marktonderzoekers die categoriegroei volgen. In mijn ervaring heeft uiteindelijk iedereen die op Amazon verkoopt of ermee concurreert deze data nodig in een spreadsheet.
Waarom Amazon Best Sellers scrapen met Python?
Handmatig productonderzoek kost enorm veel tijd. Een McKinsey-onderzoek liet zien dat werknemers 9,3 uur per week kwijt zijn aan het zoeken en verzamelen van informatie. Voor e-commerceteams betekent dat urenlang door Amazon-pagina’s klikken, productnamen en prijzen kopiëren en die in spreadsheets plakken — om het de week erna gewoon opnieuw te doen.
Hier is een snelle blik op de use cases waarvoor het scrapen van Best Sellers de moeite waard is:
| Use case | Wat je krijgt | Wie profiteert |
|---|---|---|
| FBA-productonderzoek | Vind producten met hoge vraag en lage concurrentie op basis van BSR en aantal reviews | Amazon-verkopers, dropshippers |
| Concurrentie op prijs | Volg prijswijzigingen van de best presterende producten in jouw categorie | E-commerce teams, prijsanalisten |
| Monitoring van markttrends | Signaleer opkomende categorieën en seizoensverschuivingen | Productmanagers, marktonderzoekers |
| Leadgeneratie | Bouw lijsten van bestverkopende merken en hun productlijnen | Salesteams, B2B-outreach |
| Concurrentieanalyse | Vergelijk jouw producten met de koplopers in de categorie | Brand managers, strategieteams |
De ROI is echt: een Salesforce-enquête onder 2.700 commerce-professionals liet zien dat AI-tools e-commerceprofessionals gemiddeld 6,4 uur per week besparen. En verkopers die geautomatiseerde prijsmonitoring gebruiken, winnen de Buy Box 67% van de tijd versus 42% bij handmatige trackers — goed voor een omzetstijging van 37% door sneller te reageren op prijswijzigingen.
4 manieren om Amazon Best Sellers met Python te scrapen: een snelle vergelijking
Voordat we in de stap-voor-stap handleidingen duiken, hier de vergelijking naast elkaar die ik zelf had willen hebben vóór ik begon te testen. Deze tabel helpt je de juiste methode te kiezen voor jouw situatie:
| Criteria | requests + BS4 | Selenium | Scraping API (bijv. Scrape.do) | Thunderbit (No-Code) |
|---|---|---|---|---|
| Moeilijkheidsgraad instellen | Gemiddeld | Hoog (driver, browser) | Laag (API-sleutel) | Zeer laag (Chrome-extensie) |
| Kan omgaan met lazy loading | Nee | Ja (scroll-simulatie) | Ja (gerenderde HTML) | Ja (AI behandelt rendering) |
| Bestendigheid tegen anti-bot | Laag (IP-blokkades) | Middelmatig (detecteerbaar) | Hoog (roterende proxies) | Hoog (cloud- en browsermodus) |
| Onderhoudsdruk | Hoog (selectors breken) | Hoog (driver-updates + selectors) | Laag | Zeer laag (AI past zich aan lay-outwijzigingen aan) |
| Kosten | Gratis | Gratis | Betaald (per request) | Gratis tier + betaalde plannen |
| Het meest geschikt voor | Eenmalige scrapes, leren | JS-zware pagina’s, login vereist | Op schaal / productie | Niet-technische gebruikers, snel onderzoek, terugkerende monitoring |
Wil je de basis van Python scraping leren? Begin dan met methode 1 of 2. Heb je productiereliabiliteit op schaal nodig? Kies methode 3. Wil je met één klik resultaat zonder code te schrijven? Ga dan direct naar methode 4.
Voordat je begint
- Moeilijkheidsgraad: Beginner tot gemiddeld (afhankelijk van de methode)
- Benodigde tijd: ~15 minuten voor Thunderbit, ~45 minuten voor Python-methodes
- Wat je nodig hebt: Python 3.8+ (voor methodes 1–3), Chrome-browser, Thunderbit Chrome Extension (voor methode 4), en een Amazon Best Sellers-categorie-URL
Methode 1: Amazon Best Sellers scrapen met requests + BeautifulSoup
Dit is de lichte, beginner-vriendelijke aanpak — geen browserautomatisering, alleen HTTP-verzoeken en HTML-parsing. Ik leerde er ook het meest van over Amazons anti-scraping verdediging.
Stap 1: Zet je omgeving klaar
Installeer de benodigde packages:
pip install requests beautifulsoup4 pandas
Stel daarna je imports in:
import requests
from bs4 import BeautifulSoup
import pandas as pd
import random
import time
Stap 2: Verstuur een request met realistische headers
Amazon blokkeert verzoeken die op bots lijken. De meest basisverdediging is een User-Agent header die een echte browser nabootst. Hier is een snippet met een set actuele, realistische User-Agent strings (afkomstig van Geekflare, maart 2026):
USER_AGENTS = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 15.7; rv:149.0) Gecko/20100101 Firefox/149.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 15_7_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Safari/605.1.15",
]
headers = {"User-Agent": random.choice(USER_AGENTS)}
url = "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/"
response = requests.get(url, headers=headers)
print(response.status_code) # Should be 200
Zie je een statuscode 200, dan zit je goed. Zie je 503 of word je doorgestuurd naar een CAPTCHA-pagina, dan heeft Amazon je verzoek gemarkeerd.
Stap 3: Parse productdata met BeautifulSoup
Inspecteer de HTML van de Amazon-pagina met de DevTools van je browser (rechtsklik → Inspecteren). De productcontainers gebruiken de ID gridItemRoot. Binnen elke container vind je de productnaam, prijs, beoordeling en URL.
soup = BeautifulSoup(response.text, "html.parser")
products = []
for item in soup.find_all("div", id="gridItemRoot"):
title_tag = item.find("div", class_="_cDEzb_p13n-sc-css-line-clamp-3_g3dy1")
price_tag = item.find("span", class_="_cDEzb_p13n-sc-price_3mJ9Z")
link_tag = item.find("a", class_="a-link-normal")
title = title_tag.get_text(strip=True) if title_tag else "N/A"
price = price_tag.get_text(strip=True) if price_tag else "N/A"
url = "https://www.amazon.com" + link_tag["href"] if link_tag else "N/A"
products.append({"Title": title, "Price": price, "URL": url})
Waarschuwing: De classnamen met het
_cDEzb_-prefix zijn CSS-modulehashes die Amazon periodiek opnieuw genereert. DegridItemRoot-ID en dea-link-normal-class zijn stabieler, maar controleer je selectors altijd eerst met DevTools voordat je scraper draait.
Stap 4: Exporteren naar CSV
df = pd.DataFrame(products)
df.to_csv("amazon_best_sellers.csv", index=False)
print(f"Scraped {len(products)} products")
Wat je kunt verwachten — en wat er misgaat
In mijn test leverde deze methode ongeveer 30 producten op in plaats van 50. Dat is geen bug in de code — het is Amazons lazy loading. Slechts ongeveer 30 producten worden direct bij het laden van de pagina gerenderd; de rest verschijnt pas na scrollen, en daarvoor is JavaScript nodig dat requests niet kan uitvoeren.
Andere beperkingen:
- IP-blokkades treden snel op zonder proxy-rotatie (ik werd geblokkeerd na ongeveer 15 verzoeken kort achter elkaar)
- CSS-selectors breken zodra Amazon de paginalay-out aanpast — en dat doen ze regelmatig
- Geen ingebouwde pagination-afhandeling
Voor het leren van Python scraping is deze aanpak prima. Voor productiegebruik is het fragiel.
Methode 2: Amazon Best Sellers scrapen met Selenium
Selenium lost het lazy-loadingprobleem op door een echte browser te gebruiken — zwaarder om op te zetten, maar je vangt wel alle 50 producten per pagina.
Stap 1: Installeer Selenium
pip install selenium pandas
Goed nieuws: vanaf Selenium 4.6+ heb je webdriver-manager niet meer nodig. Selenium Manager regelt het downloaden van drivers automatisch.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
import pandas as pd
options = Options()
options.add_argument("--headless=new")
options.add_argument("--window-size=1920,1080")
options.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Chrome(options=options)
De --headless=new-flag (geĂŻntroduceerd in Chrome 109+) gebruikt dezelfde renderpipeline als gewone Chrome, waardoor Amazon je moeilijker kan detecteren.
Stap 2: Scroll voorbij de lazy loading
Dit is de stap die Selenium de extra moeite waard maakt. Amazon Best Sellers laadt eerst ongeveer 30 producten; de rest verschijnt na scrollen.
def scroll_page(driver, scrolls=5, delay=2):
for _ in range(scrolls):
driver.find_element(By.TAG_NAME, "body").send_keys(Keys.PAGE_DOWN)
time.sleep(delay)
driver.get("https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/")
time.sleep(3)
scroll_page(driver)
Na het scrollen zouden alle 50 producten in de DOM moeten staan. Ik merkte dat 5 keer Page Down met een vertraging van 2 seconden voldoende was, maar afhankelijk van je internetsnelheid moet je dat misschien aanpassen.
Stap 3: Productdata ophalen
items = driver.find_elements(By.ID, "gridItemRoot")
products = []
for item in items:
try:
title = item.find_element(By.CSS_SELECTOR, "div._cDEzb_p13n-sc-css-line-clamp-3_g3dy1").text
except:
title = "N/A"
try:
price = item.find_element(By.CSS_SELECTOR, "span._cDEzb_p13n-sc-price_3mJ9Z").text
except:
price = "N/A"
try:
url = item.find_element(By.CSS_SELECTOR, "a.a-link-normal").get_attribute("href")
except:
url = "N/A"
products.append({"Title": title, "Price": price, "URL": url})
Het is belangrijk om elke extractie in try/except te zetten — sommige producten zijn mogelijk niet op voorraad of missen velden, en je wilt niet dat één fout element je hele scrape laat crashen.
Stap 4: Pagination afhandelen
Amazon splitst 100 Best Sellers over twee pagina’s met verschillende URL-structuren:
urls = [
"https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/",
"https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/ref=zg_bs_pg_2_electronics?_encoding=UTF8&pg=2"
]
all_products = []
for url in urls:
driver.get(url)
time.sleep(3)
scroll_page(driver)
# ... extract products as above ...
all_products.extend(products)
driver.quit()
Wat je kunt verwachten
In mijn test pakte Selenium alle 50 producten per pagina — duidelijk beter dan requests + BS4. Het nadeel: het duurde ongeveer 45 seconden per pagina (inclusief scrollvertragingen), en ik werd alsnog gemarkeerd nadat ik het te vaak zonder proxyrotatie had uitgevoerd. Selenium is ook detecteerbaar voor Amazons bot-detectie, zelfs met de anti-detection flags — voor serieuze schaal heb je extra maatregelen nodig (zie de Anti-Ban Playbook hieronder).
Andere pijnpunten:
- WebDriver-versieverschillen komen nog steeds af en toe voor, al is dat door Selenium Manager veel minder geworden
- CSS-selectors moeten worden bijgewerkt zodra Amazon zijn DOM aanpast
- Het geheugengebruik is hoog — elke browserinstantie slurpt 200–400 MB RAM
Methode 3: Amazon Best Sellers scrapen met een scraping-API
Scraping-API’s zijn de aanpak van "laat iemand anders de lastige delen regelen". Diensten zoals Scrape.do, Oxylabs en ScrapingBee beheren proxy-rotatie, JavaScript-rendering en anti-botmaatregelen — jij stuurt alleen een URL en krijgt HTML of JSON terug.
Hoe het werkt
Je stuurt je doel-URL naar het API-eindpunt. De API rendert de pagina met een echte browser op hun infrastructuur, roteert proxies, handelt CAPTCHA’s af en levert schone HTML terug. Daarna parse je die HTML gewoon weer met BeautifulSoup.
Stap 1: Verzoek via de API versturen
Hier is een voorbeeld met Scrape.do (prijzen beginnen bij $29/maand voor 150.000 credits, 1 credit = 1 request, ongeacht rendering):
import requests
from bs4 import BeautifulSoup
api_token = "YOUR_API_TOKEN"
target_url = "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/"
api_url = f"https://api.scrape.do?token={api_token}&url={target_url}&render=true&geoCode=us"
response = requests.get(api_url)
soup = BeautifulSoup(response.text, "html.parser")
Vanaf hier is het parsen identiek aan methode 1 — dezelfde selectors, dezelfde extractielogica.
Prijsvergelijking in de praktijk
Dit is wat de grote API’s rekenen per 1.000 Amazon-verzoeken tegen hun beste beschikbare tarief:
| Provider | Kosten per 1.000 requests | Opmerkingen |
|---|---|---|
| Scrape.do | ~$0,19 | Vast tarief, geen creditvermenigvuldigers |
| Oxylabs | ~$1,80 | 5x vermenigvuldiger voor JS-rendering |
| ScrapingBee | ~$4,90 | 5–25x vermenigvuldigers voor premium features |
| Bright Data | ~$5,00+ | Meest uitgebreide data (686 velden/product) maar traagst (~66 sec/request) |
Voor- en nadelen
Voordelen: hoge betrouwbaarheid (~99% succespercentage op Amazon voor de beste providers), geen driver-onderhoud, anti-bot wordt automatisch afgehandeld, goed schaalbaar.
Nadelen: betalen per request (kosten lopen op bij schaal), je moet nog steeds parsing-code schrijven, en CSS-selectorwijzigingen blijven een risico. Voor 100.000 pagina’s per maand is de totale kostenvergelijking flink: zelf bouwen kost ruwweg $1,98 miljoen over drie jaar versus $332.000 met een API-provider — een besparing van 71%.
Het omslagpunt ligt meestal rond 500K–1M requests per maand. Daaronder wegen de tijdbesparingen van een API meestal ruimschoots op tegen de kosten.
Methode 4: Amazon Best Sellers scrapen met Thunderbit (geen Python nodig)
Volledige transparantie: ik werk bij Thunderbit, dus neem dit onderdeel met die context in gedachten. Dat gezegd hebbende: ik heb alle vier de methodes echt achter elkaar getest, en het verschil in time-to-data was opvallend.
Thunderbit is een AI-webscraper die draait als Chrome-extensie. Het basisidee: in plaats van CSS-selectors of Python-code te schrijven, leest de AI de pagina en bepaalt zelf welke data moet worden geëxtraheerd. Voor Amazon Best Sellers zijn er kant-en-klare templates die met één klik werken.
Stap 1: Installeer de Thunderbit Chrome-extensie
Ga naar de Chrome Web Store en klik op "Add to Chrome". Maak een gratis account aan — met de gratis tier heb je genoeg credits om dit uit te proberen.
Stap 2: Open de Amazon Best Sellers-pagina
Open een willekeurige Amazon Best Sellers-categoriepagina in Chrome. Bijvoorbeeld:
https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/
Stap 3: Klik op "One Click Extract"
Open de Thunderbit-sidebar en klik op "One Click Extract". De AI analyseert de paginastuctuur en bepaalt de kolommen: Productnaam, Prijs, Beoordeling, Afbeeldings-URL, Verkoper, Product-URL en Rang. In mijn test herkende het alle relevante velden binnen ongeveer 3 seconden correct.

Je kunt kolommen hernoemen, verwijderen of toevoegen. Je kunt zelfs per veld eigen AI-prompts toevoegen — bijvoorbeeld "categoriseer als Electronics/Apparel/Home" om elk product een categorie-label te geven.
Stap 4: Klik op "Scrape"
Druk op de knop "Scrape". Thunderbit vult een gestructureerde tabel met alle productdata van de pagina. In cloudmodus verwerkt het tot 50 pagina’s tegelijk parallel, en handelt het lazy loading en pagination automatisch af.
Stap 5: Gratis exporteren
Klik op "Export" en kies je bestemming: Excel, Google Sheets, Airtable of Notion. Alle exports zijn gratis op elk plan — geen verborgen kosten.

Het hele proces duurde bij mij ongeveer 90 seconden vanaf het openen van de pagina tot een complete spreadsheet. Ter vergelijking: methode 1 kostte ongeveer 20 minuten (inclusief het oplossen van het lazy-loadingprobleem), methode 2 ongeveer 35 minuten (inclusief Selenium-instellingen), en methode 3 ongeveer 15 minuten (inclusief het aanmaken van een API-account).
Waarom Thunderbit goed met Amazon overweg kan
Omdat de AI elke keer de pagina opnieuw leest, past het zich automatisch aan lay-outwijzigingen aan — geen CSS-selectors om te onderhouden. Dit pakt direct de meest gehoorde klacht in scraping-forums aan: "Een basic web scraper is niet genoeg, je moet zoveel vangnetten bouwen voor elementwijzigingen." Als Amazon zijn DOM verandert (en dat gebeurt regelmatig), hoef je niets aan te passen.
Cloud scraping handelt proxy-rotatie, rendering en anti-botmaatregelen volledig transparant af. Voor gebruikers die een oplossing willen die gewoon werkt, haalt dit de hele anti-ban-stress weg.
Bespaar jezelf het onderhoud van selectors Als Amazon zijn markup wijzigt, breken je BeautifulSoup-selectors. Thunderbit’s AI leest de pagina bij elke run opnieuw en bepaalt de velden opnieuw. Get Started Free
Anti-ban playbook: hoe je voorkomt dat Amazon je blokkeert
Amazons bot-detectie is agressief. Tijdens mijn tests werd mijn IP tijdelijk geblokkeerd, en forumgebruikers melden hetzelfde: "errors everywhere, amazon even started redirecting me to the homepage." Als je de Python-route kiest (methodes 1–3), is dit stuk essentieel.
Hier is een gelaagde strategie, van basis naar gevorderd:
1. Wissel User-Agent strings af
Steeds dezelfde User-Agent sturen is verdacht. Gebruik de set van 5+ strings uit het codevoorbeeld van methode 1 en kies per request willekeurig één ervan:
headers = {"User-Agent": random.choice(USER_AGENTS)}
2. Voeg willekeurige vertragingen toe tussen requests
Vaste vertragingen zijn herkenbaar (patronen). Willekeurige zijn veiliger:
time.sleep(random.uniform(2, 5))
Ik merkte dat 2–5 seconden tussen requests me voor kleine batches (onder 50 requests) onder de radar hield. Voor grotere runs kun je beter 3–7 seconden aanhouden.
3. Gebruik proxy-rotatie
Dit is de grote stap. Proxyway-benchmarks laten zien dat residential proxies gemiddeld ongeveer 94% succes halen op Amazon versus ongeveer 59% voor datacenter proxies — een verschil van 35 procentpunt. Amazons detectiestack gebruikt TLS-fingerprinting, gedragsanalyse en rate limiting per IP, dus standaard datacenter-IP’s worden vaak binnen seconden gemarkeerd.
Residential proxies zijn duurder ($2–$12 per GB, afhankelijk van de provider), maar veel betrouwbaarder. Voor een codevoorbeeld:
proxies = {
"http": "http://user:pass@residential-proxy.example.com:8080",
"https": "http://user:pass@residential-proxy.example.com:8080"
}
response = requests.get(url, headers=headers, proxies=proxies)
4. Versterk je browserfingerprint (Selenium)
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
# Na het initialiseren van de driver: verwijder de navigator.webdriver-vlag
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {
'source': "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
})
5. Beheer sessies en cookies
Cookies bewaren tussen requests laat je scraper meer op een echte gebruikerssessie lijken:
session = requests.Session()
# Bezoek eerst de homepage om realistische cookies op te halen
session.get("https://www.amazon.com", headers=headers)
time.sleep(2)
# Scrape daarna je doelpagina
response = session.get(target_url, headers=headers)
6. Wanneer je het gedoe beter helemaal overslaat
Voor gebruikers die niets hiervan willen beheren, handelt Thunderbit’s cloud scraping proxy-rotatie, rendering en anti-botmaatregelen transparant af. Scraping-API’s lossen ook het meeste hiervan standaard op. In mijn ervaring kost het debuggen van anti-banproblemen vaak meer tijd dan het schrijven van de scrapingcode zelf — dus de "het werkt gewoon"-aanpak heeft echte ROI.
Subpage enrichment: productdetailpagina’s scrapen voor rijkere data
De Best Sellers-lijstpagina toont alleen basisinformatie — titel, prijs, beoordeling, rank. Maar de echte waarde voor FBA-onderzoek zit op de individuele productdetailpagina’s. Dit mis je als je alleen de lijstpagina scrapt:
| Veld | Lijstpagina | Productdetailpagina |
|---|---|---|
| Productnaam | âś… | âś… |
| Prijs | âś… | âś… |
| Beoordeling | âś… | âś… |
| BSR-rank | âś… | âś… (met subcategorie-ranks) |
| Merk | ❌ | ✅ |
| ASIN | ❌ | ✅ |
| Datum eerste beschikbaarheid | ❌ | ✅ |
| Afmetingen/gewicht | ❌ | ✅ |
| Aantal verkopers | ❌ | ✅ |
| Bulletpoint-functies | ❌ | ✅ |
| Buy Box-eigenaar | ❌ | ✅ |
Dat veld "Date First Available" is bijzonder waardevol — het vertelt je hoe lang een product al op de markt is, een belangrijke indicator voor concurrentieanalyse. En het aantal verkopers plus de Buy Box-eigenaar helpt je inschatten of een productniche de moeite waard is om in te stappen (als Amazon zelf meer dan 30% Buy Box-aandeel heeft, is concurreren extreem lastig).
Python-aanpak: door product-URL’s loopen
Nadat je product-URL’s van de lijstpagina hebt verzameld, loop je met een vertraging door elke URL:
for product in products:
time.sleep(random.uniform(3, 6))
detail_response = session.get(product["URL"], headers={"User-Agent": random.choice(USER_AGENTS)})
detail_soup = BeautifulSoup(detail_response.text, "html.parser")
# Merk ophalen
brand_tag = detail_soup.find("a", id="bylineInfo")
product["Brand"] = brand_tag.get_text(strip=True) if brand_tag else "N/A"
# ASIN ophalen uit de paginabron of URL
# Date First Available ophalen uit de productdetails-tabel
# ... extra velden ...
Let op: 100 individuele productpagina’s benaderen vergroot je ban-risico aanzienlijk. Reken op proxy-rotatie en langere vertragingen.
Thunderbit-aanpak: subpages met één klik scrapen
Nadat je de lijstpagina in een tabel hebt gescrapet, klik je in Thunderbit op "Scrape Subpages". De AI bezoekt elke product-URL en verrijkt de tabel automatisch met extra kolommen — merk, ASIN, specificaties, kenmerken. Geen extra code, selectors of setup nodig. Vooral handig voor e-commerceteams die het volledige plaatje nodig hebben voor sourcing-beslissingen, maar geen detailpage-parser willen bouwen en onderhouden.
Terugkerende scrapes automatiseren: Best Sellers in de tijd monitoren
Een eenmalige scrape is nuttig, maar doorlopend monitoren is waar het echte concurrentievoordeel zit. Volgen welke producten stijgen en dalen, trends vroeg oppikken en prijsverschuivingen over weken of maanden monitoren — dat is wat casual onderzoek onderscheidt van datagedreven besluitvorming.
Python-aanpak: plannen met cron
Op Linux/Mac kun je je Python-script inplannen met cron. Hier is de crontab-regel voor een dagelijkse scrape om 8:00 uur:
0 8 * * * /usr/bin/python3 /home/user/amazon_scraper.py >> /home/user/logs/scrape.log 2>&1
Voor een wekelijkse scrape op maandag om 9:00 uur:
0 9 * * 1 /usr/bin/python3 /home/user/amazon_scraper.py >> /home/user/logs/scrape.log 2>&1
Op Windows gebruik je Task Scheduler voor hetzelfde resultaat. Voor altijd-aan planning zonder je laptop aan te laten staan, kun je deployen op een VPS of AWS Lambda — al brengt dat extra infrastructuurcomplexiteit met zich mee.
Voeg logging en foutmeldingen toe om mislukte runs op te vangen. Er is niets vervelender dan ontdekken dat je scraper twee weken geleden stilletjes stuk is gegaan.
Thunderbit-aanpak: Scheduled Scraper in gewone taal
Thunderbit’s Scheduled Scraper laat je het interval in natuurlijke taal beschrijven — typ "elke maandag om 9 uur" of "elke dag om 8 uur" en de AI interpreteert het schema. Scrapes draaien op Thunderbit’s cloudservers (er hoeft geen browser of computer aan te staan), en data exporteert automatisch naar Google Sheets of Airtable. Zo bouw je een live monitoringsdashboard zonder serverbeheer — ideaal voor operations-teams die continu inzicht willen zonder DevOps-overhead.
Juridische en ethische aandachtspunten bij het scrapen van Amazon
Ik ben geen advocaat, en dit is geen juridisch advies. Maar de juridische context negeren in een scrapinggids zou onverantwoord zijn — forumgebruikers brengen ToS-zorgen expliciet ter sprake, en terecht.
Amazon’s robots.txt: Vanaf 2026 bevat Amazons robots.txt meer dan 80 specifieke Disallow-paden, maar /gp/bestsellers/ is NIET expliciet geblokkeerd voor standaard user agents. Wel krijgen 35+ AI-specifieke user agents (zoals ClaudeBot, GPTBot, Scrapy, etc.) een algemene Disallow: /. Het ontbreken van een specifieke blokkade betekent niet dat Amazon scrapen goedkeurt.
Amazon’s Terms of Service: Amazon’s Conditions of Use (bijgewerkt in mei 2025) verbieden expliciet "using any automated process or technology to access, acquire, copy, or monitor any part of the Amazon Website" zonder schriftelijke toestemming. Dit is niet theoretisch — Amazon klaagde Perplexity AI in november 2025 aan wegens ongeautoriseerde geautomatiseerde toegang en won een voorlopige voorziening.
Het hiQ v. LinkedIn-precedent: In hiQ Labs v. LinkedIn (Ninth Circuit, 2022) oordeelde de rechtbank dat het scrapen van publiek beschikbare data waarschijnlijk niet in strijd is met de Computer Fraud and Abuse Act. Maar hiQ schikte uiteindelijk en sprak af te stoppen met scrapen — winnen op CFAA-basis beschermt je niet tegen contractbreukclaims.
Praktische richtlijnen:
- Scrape alleen publiek beschikbare data (prijzen, BSR, producttitels — niet PII)
- Respecteer rate limits en overbelast servers niet
- Gebruik de data voor legitieme concurrentie-inzichten
- Raadpleeg je eigen juridisch adviseur vóór scraping op schaal
- Wees je ervan bewust dat 20+ Amerikaanse staten inmiddels uitgebreide privacywetgeving hebben
Thunderbit’s cloud scraping gebruikt standaard browserachtige requestpatronen, maar je moet altijd zelf met juridisch advies controleren of je compliant bent.
Hier heb je geen Python voor nodig Als het einddoel een spreadsheet is in plaats van een pipeline, brengt één klik je er al. Exporteer direct naar Excel, Google Sheets, Airtable of Notion. Get Started Free
Welke methode moet je kiezen? Een snelle beslisgids
De korte versie:
- "Ik leer Python en wil een weekendproject." → Methode 1 (requests + BeautifulSoup). Je leert enorm veel over HTTP-verzoeken, HTML-parsing en Amazons anti-botverdediging.
- "Ik moet JS-zware pagina’s of ingelogde sessies scrapen." → Methode 2 (Selenium). Zwaarder, maar het kan dynamische content aan.
- "Ik draai productiescrapes op schaal." → Methode 3 (Scraping API). Laat iemand anders de proxies en rendering beheren. De total cost of ownership valt onder 500K requests per maand vaak in het voordeel van API’s uit.
- "Ik ben geen developer en wil binnen 2 minuten data." → Methode 4 (Thunderbit). Geen code, geen selectors, geen onderhoud.
- "Ik wil doorlopende monitoring zonder serverbeheer." → Thunderbit Scheduled Scraper. Instellen en vergeten.
Probeer Thunderbit voor Amazon Best Sellers Get Started Free
Conclusie en belangrijkste lessen
Na een weekend testen, dit is wat echt bleef hangen:
requests + BeautifulSoup is geweldig om te leren, maar de lazy-loadingbeperking (slechts ongeveer 30 van de 50 producten) en fragiele CSS-selectors maken het onpraktisch voor productiegebruik.
Selenium lost het lazy-loadingprobleem op en pakt alle 50 producten per pagina, maar is traag, geheugenintensief en nog steeds detecteerbaar voor Amazons botverdediging.
Scraping-API’s bieden de beste betrouwbaarheid voor scraping op productieschaal — ~99% succespercentages op Amazon — maar de kosten lopen op en je moet nog steeds parsing-code schrijven.
Thunderbit leverde veruit de snelste time-to-data. De AI handelt lay-outwijzigingen, lazy loading, pagination en anti-botmaatregelen af zonder configuratie. Voor niet-technische gebruikers of teams die terugkerende data nodig hebben zonder DevOps-overhead, is dit de meest praktische optie.
De belangrijkste les? Amazons anti-botverdediging en frequente lay-outwijzigingen zorgen ervoor dat onderhoudsvrije oplossingen op de lange termijn de meeste tijd besparen. Elk uur dat je besteedt aan het debuggen van kapotte selectors en het roteren van proxies, is een uur dat je niet besteedt aan échte analyse.
Wil je de no-code aanpak proberen? Thunderbit’s gratis tier geeft je genoeg credits om een paar Best Sellers-categorieën te scrapen en zelf het resultaat te zien. Liever de Python-route? De codevoorbeelden hierboven brengen je op gang. Hoe dan ook: je hebt Amazon Best Seller-data in een spreadsheet in plaats van naar een browsertab te staren.
Voor meer over webscraping-aanpakken kun je onze gidsen bekijken over Amazon-producten en reviews scrapen, data uit websites naar Excel halen en de beste AI-webscrapers. Je kunt ook stapsgewijze walkthroughs bekijken op het Thunderbit YouTube-kanaal.
Meer leren


