BetaalbeschermingDetails
- Revisies binnen het pakket zijn gratis.
- Reageer je niet binnen 3 dagen na levering, dan wordt het werk automatisch goedgekeurd.
Het geld wordt bij betaling gereserveerd en pas vrijgegeven als je het werk goedkeurt.

Voorbeeldresultaat
Parser of a garden tools supplier's catalog into Excel
What the result looks like
| Article | Name | Price | In stock | Weight | Photo |
|---|---|---|---|---|---|
| GT-1042 | Pruning shears, 20 mm | 18.90 | Yes | 0.24 kg | …/gt-1042.jpg |
| GT-1187 | Folding saw, 210 mm | 24.50 | Yes | 0.31 kg | …/gt-1187.jpg |
| GT-2210 | Hedge shears, wavy blade | 39.00 | No | 1.10 kg | …/gt-2210.jpg |
| GT-3305 | Hand trowel, stainless | 9.80 | Yes | 0.18 kg | …/gt-3305.jpg |
| GT-4120 | Garden hose 25 m, 1/2" | 42.00 | Yes | 2.90 kg | …/gt-4120.jpg |
The file in the example has 1,236 products from 52 list pages.
A part of the code
def product_links(list_url: str) -> Iterator[str]:
"""Product page links from every page of the list, following 'Next'."""
url: str | None = list_url
while url:
page = fetch(url)
for card in page.select("div.product-card a.title"):
yield urljoin(url, card["href"])
next_link = page.select_one("a.pagination-next")
url = urljoin(url, next_link["href"]) if next_link else None
def fetch(url: str) -> BeautifulSoup:
"""One open page, at a polite pace: a pause between requests and a few tries on errors."""
for attempt in range(3):
time.sleep(settings.delay_seconds)
response = session.get(url, timeout=30)
if response.status_code == 200:
return BeautifulSoup(response.text, "html.parser")
log.warning("%s answered %s, try %d of 3", url, response.status_code, attempt + 1)
raise ScraperError(f"{url} did not open after 3 tries")
Files: a ZIP archive with scraper.py, settings.ini (the start page, the pause between requests, the file name), requirements.txt and a README on installing and running it. It reads only open pages, one every 2 seconds, and checks the site's robots.txt first. The client runs it on their own computer.
Client: an online garden shop that resells a supplier's tools; the supplier has an open catalog on its website but no price list file. Task: go through the catalog's list pages, open every product page and save the article number, name, price, stock, weight and main photo link to Excel, to compare prices once a week.
De klant en alle details zijn verzonnen.
Over deze dienst
Deze parser leest de openbare productpagina's van een concurrent en zet hun prijzen in een tabel die je naast je eigen prijzen kunt leggen: productnaam, productcode, prijs, oude prijs, korting, op voorraad en link, met de datum van de controle. Geef ons de site, links naar een categorie en naar een productpagina, de velden in de volgorde van je tabel en een of twee van die pagina's, opgeslagen vanuit je browser. Wij schrijven de code in Python volgens hun echte opbouw, met een instellingenbestand en een README. Je draait hem op je computer wanneer je verse prijzen wilt, en de tabel komt rechtstreeks bij jou. Hij leest alleen openbare pagina's in een rustig tempo en logt nooit in, omzeilt geen captcha's of beveiliging en verzamelt geen persoonsgegevens. Jij bepaalt of de voorwaarden van de site het toestaan, en een latere wijziging van de opmaak vraagt om een update.
Wat is inbegrepen
- Wat je krijgtEen ZIP-archief met de Python-code, een instellingenbestand en een README met stapsgewijze instructies; de code staat ook op de bestelpagina.
- PrijskolommenPrijs, oude prijs en korting als aparte getallen
- Codes om te koppelenDe code of barcode van de concurrent, als de pagina die toont
- Datum van elke controleElke rij draagt de datum waarop hij is verzameld
- Rustig tempoEen pauze tussen pagina's die jij instelt
- Draait op je eigen computerWindows, macOS of Linux; start hem opnieuw voor verse prijzen
Hoe het werkt
- 1Pagina'sJe geeft de site van de concurrent, een categorie en een opgeslagen productpagina
- 2ParserWij schrijven de code volgens die pagina's en de handleiding om hem te starten
- 3StartenJe start hem en vergelijkt de eerste rijen met de site
- 4WijzigingenJe vraagt binnen je pakket om wijzigingen en stuurt een eventuele foutmelding mee
Wat we van je nodig hebben
De site van de concurrent en de precieze pagina's: een link naar een categorie en naar een productpagina, en ongeveer hoeveel producten het zijn. De velden die je nodig hebt in de volgorde van je tabel, bijv. naam, code, prijs, oude prijs, op voorraad, link. Een of twee van die pagina's, vanuit je browser opgeslagen als HTML (Bestand > Pagina opslaan als), of screenshots. CSV of Excel, en waar je hem gaat draaien.
We vragen je:
- Welke site van de concurrent en welke pagina's?
- De velden die je nodig hebt
- Ongeveer hoeveel producten?
- Hoe vaak ga je hem starten?
Pakketten vergelijken
| Pakketten | BasisPrijzen van productpagina's€ 19 | StandaardEen hele categorie€ 38 | PremiumTot 3 concurrenten€ 67 |
|---|---|---|---|
| Levertijd | 1 dag | 2 dagen | 3 dagen |
| Revisies | 1 | 2 | 3 |
| Sites | 1 | 1 | tot 3 |
| Soorten pagina's | 1 | 2 (categorie en product) | tot 3 |
| Velden | tot 10 | tot 25 | tot 25 per stuk |
| Loopt de pagina's van een overzicht door | Nee | Ja | Ja |
| Resultaatbestand | CSV | Excel of CSV | Excel, CSV of JSON |
| Dubbele rijen verwijderd, gaat verder waar hij stopte | Nee | Nee | Ja |
| Bestellen Basis | Bestellen Standaard | Bestellen Premium |
Betaalbescherming
Je betaalt bij het bestellen, maar het geld wordt alleen vrijgegeven voor goedgekeurd werk.
- Vaste prijsDe prijs van het pakket verandert niet meer nadat je hebt betaald.
- Het geld wordt gereserveerdBij betaling wordt het bedrag alleen gereserveerd. Het gaat pas naar de dienst als je het werk goedkeurt.
- Gecontroleerd vóór leveringElk resultaat doorloopt een kwaliteitscontrole voordat het bij jou komt, en je ziet het op de bestelpagina voordat je het goedkeurt.
- Gratis revisiesVraag wijzigingen binnen je briefing aan, zo vaak als het pakket toestaat.
- Goedkeuring na 3 dagenKeur je het werk binnen 3 dagen na levering niet goed en vraag je ook geen wijzigingen, dan wordt het automatisch goedgekeurd. Schrijf je na levering in de chat van de bestelling, dan wacht de bestelling; zodra we hebben geantwoord, kunnen we de 3 dagen opnieuw laten ingaan en melden we dat in de chat.
- Opnieuw doen of volledige terugbetalingPast het resultaat niet bij je briefing en hebben de revisies dat niet opgelost, of duurt het werk meer dan twee keer zo lang als de levertijd, schrijf dan in de chat van de bestelling: we doen het werk opnieuw of betalen het volledige bedrag terug.
Vragen en antwoorden
Koppelt hij de producten van de concurrent aan de mijne?
Hij slaat de code, barcode en naam van de concurrent op zoals de pagina ze toont, zodat je ze in Excel aan je eigen lijst kunt koppelen. Wijken de codes af van de jouwe, dan doe je het koppelen zelf: we raden niet welke producten hetzelfde zijn.
Kan hij prijzen zien voor ingelogde of zakelijke kopers?
Nee. Hij leest de prijzen die een openbare pagina aan elke bezoeker toont. Prijzen achter een account, een zakelijke login of een captcha blijven buiten bereik.
Mag je de prijzen van een concurrent verzamelen?
Openbare prijzen verzamelen is in veel gevallen toegestaan, maar de voorwaarden van sites en de privacywetgeving verschillen per land, dus jij bepaalt of je ze mag verzamelen en gebruiken. De parser logt nooit in, omzeilt geen beveiliging en verzamelt geen persoonsgegevens.
Kan hij prijzen verzamelen van Amazon, Google of winkels binnen sociale netwerken?
Nee. Hun voorwaarden verbieden het, en dat geldt ook voor LinkedIn en andere sociale netwerken. Gebruik voor zulke gegevens de officiële export of API van de dienst.
Wat als de concurrent zijn site verandert?
De parser volgt de pagina's zoals ze nu zijn. Na een wijziging van de opmaak heeft hij een update nodig, en dat is een nieuwe bestelling. Beperkt de site het aantal bezoeken, dan omzeilt de parser dat niet.
Staat je antwoord er niet bij?