WebsiteparserOntwikkeling & maatwerk

Een websiteparser in Python die openbare gegevens van pagina's verzamelt in CSV of Excel: prijzen, catalogi, advertenties

Meestal klaar in 15 minutenRevisies inbegrepenKwaliteitscontrole
Pakketten
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.

Een websiteparser in Python die openbare gegevens van pagina's verzamelt in CSV of Excel: prijzen, catalogi, advertenties

Voorbeeldresultaat

Voorbeeld voor het pakket Standaard

Parser of a garden tools supplier's catalog into Excel

What the result looks like

ArticleNamePriceIn stockWeightPhoto
GT-1042Pruning shears, 20 mm18.90Yes0.24 kg…/gt-1042.jpg
GT-1187Folding saw, 210 mm24.50Yes0.31 kg…/gt-1187.jpg
GT-2210Hedge shears, wavy blade39.00No1.10 kg…/gt-2210.jpg
GT-3305Hand trowel, stainless9.80Yes0.18 kg…/gt-3305.jpg
GT-4120Garden hose 25 m, 1/2"42.00Yes2.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

Een parser verzamelt gegevens die je op openbare webpagina's kunt zien en slaat ze op als tabel: prijzen en voorraad van producten, de catalogus van een leverancier voor je webshop, advertenties, vacatures, evenementen of artikelen. Vertel ons de site en de pagina's, noem de velden die je nodig hebt (naam, prijs, link, afbeelding enzovoort) en stuur een of twee van die pagina's, opgeslagen vanuit je browser (Bestand > Pagina opslaan als), of screenshots ervan. Wij schrijven de parser in Python op basis van de echte opbouw van die pagina's, en hij slaat de resultaten op als CSV, Excel of JSON. Je krijgt een archief met de code, een instellingenbestand met de adressen en de pauze tussen pagina's, en een README die uitlegt hoe je Python installeert en de parser start. Je draait de parser op je eigen computer, dus de gegevens komen rechtstreeks bij jou; wij verzamelen ze niet voor je en bewaren ze niet. Hij leest alleen openbare pagina's, in een rustig tempo, en logt nooit in, omzeilt geen captcha's of andere beveiliging en verzamelt geen persoonsgegevens zoals namen, e-mailadressen of telefoonnummers. Als een site zijn opmaak verandert, kan de parser een update nodig hebben. Of je de gegevens van een site volgens de voorwaarden mag verzamelen en gebruiken, is jouw verantwoordelijkheid.

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.
  • Jouw velden, jouw tabelKolommen in de volgorde die je nodig hebt
  • Gebouwd op de echte pagina'sGeschreven volgens de opbouw van de pagina's die je stuurt
  • Rustig tempoEen pauze tussen pagina's, in te stellen in de instellingen
  • Draait op je eigen computerWindows, macOS of Linux, met Python
  • Een heldere handleidingWat je installeert en hoe je het uitvoert, stap voor stap

Hoe het werkt

  1. 1
    Pagina'sJe geeft de site, de velden en een of twee opgeslagen pagina's
  2. 2
    ParserWij schrijven de code en de handleiding om hem uit te voeren
  3. 3
    StartenJe start hem en controleert de eerste rijen van de tabel
  4. 4
    WijzigingenJe vraagt binnen je pakket om wijzigingen en stuurt een eventuele foutmelding mee

Wat we van je nodig hebben

De site en de precieze pagina's: een link naar een overzicht en naar een itempagina, en ongeveer hoeveel pagina's het zijn. De velden die je nodig hebt, in de volgorde van je tabel, met een voorbeeld van elk. Een of twee van die pagina's, vanuit je browser opgeslagen als HTML (Bestand > Pagina opslaan als), of screenshots, zodat de parser hun echte opbouw volgt. Het resultaatbestand dat je nodig hebt (CSV, Excel of JSON) en waar je de parser gaat draaien.

We vragen je:

  • Welke site en welke pagina's?
  • De velden die je nodig hebt
  • Ongeveer hoeveel pagina's?
  • Het resultaatbestand
  • Wat moet hij nog meer doen?

Pakketten vergelijken

PakkettenBasisParser voor één soort pagina€ 23StandaardOverzichts- en itempagina's€ 44PremiumMeerdere sites of paginasoorten€ 79
Levertijd1 dag2 dagen3 dagen
Revisies123
Sites11tot 3
Soorten pagina's12 (overzicht en item)tot 3
Veldentot 10tot 25tot 25 per stuk
Loopt de pagina's van een overzicht doorNeeJaJa
ResultaatbestandCSVExcel of CSVExcel, CSV of JSON
Dubbele rijen verwijderd, gaat verder waar hij stopteNeeNeeJa
Bestellen BasisBestellen StandaardBestellen 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.
Hoe het werkt →

Vragen en antwoorden

Mag ik een site zomaar parsen?

Openbare gegevens verzamelen is in veel gevallen toegestaan, maar de gebruiksvoorwaarden van sites en de privacywetgeving verschillen per land, dus jij bepaalt of je de gegevens mag verzamelen en gebruiken. De parser logt nooit in, omzeilt geen beveiliging en verzamelt geen persoonsgegevens, en zo blijft hij aan de veilige kant.

Verzamelen jullie de gegevens voor mij?

Nee. Je krijgt de parser en draait hem zelf, dus de resultaten komen rechtstreeks bij jou en je kunt hem opnieuw starten wanneer je verse gegevens nodig hebt.

Wat als de site verandert of de parser blokkeert?

De parser werkt met de pagina's zoals ze nu zijn. Verandert de site later zijn opmaak, dan heeft de parser een update nodig, en dat is een nieuwe bestelling. Hij leest in een rustig tempo, maar een site kan bezoeken toch beperken; zulke limieten omzeilt hij niet.

Kan hij Amazon, Google of sociale netwerken parsen?

Nee. Hun voorwaarden verbieden het om hun gegevens zo te verzamelen, veel van hun pagina's vragen om in te loggen en ze bevatten persoonsgegevens. Gebruik voor zulke gegevens de officiële API of export van de dienst.

Moet ik kunnen programmeren?

Nee. De README legt uit hoe je Python eenmalig installeert, met één opdracht installeert wat de parser nodig heeft, en hem start. Voor pagina's die hun inhoud met JavaScript opbouwen, gebruikt de parser een browserbibliotheek (Playwright), en ook die behandelt de README.

Staat je antwoord er niet bij?

Pakketten