Parser voor aanbestedingenOntwikkeling & maatwerk

Een Python-parser voor openbare aanbestedingen: aanbestedende dienst, onderwerp, prijs en deadline in een tabel

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 Python-parser voor openbare aanbestedingen: aanbestedende dienst, onderwerp, prijs en deadline in een tabel

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

Leveranciers die op opdrachten inschrijven gebruiken deze parser om openbare aankondigingen in één tabel te zien: kenmerk, onderwerp, aanbestedende organisatie, regio, soort procedure, startprijs en valuta, publicatiedatum, deadline, status en link. Voer op het aanbestedingsplatform een zoekopdracht uit met je trefwoorden of codes en stuur dan die link, een aankondigingspagina en een of twee pagina's opgeslagen vanuit je browser. Je krijgt Python-code, een instellingenbestand en een README en draait hem elke ochtend of wanneer nodig op je computer. Contactpersonen blijven erbuiten: geen namen, e-mailadressen of telefoonnummers. Hij logt niet in, downloadt geen documenten achter een account, omzeilt geen captcha's of beveiliging, dient geen inschrijvingen in en houdt een rustig tempo aan. Jij bepaalt of de voorwaarden van het platform het toestaan; 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.
  • Deadlines om op te sorterenData in één notatie, klaar om op deadline te sorteren
  • Startprijs als getalMet de valuta in een eigen kolom
  • Jouw trefwoordenBegint bij de zoekopdracht die je op het platform instelt
  • Geen contactpersonenAlleen de aanbestedende organisatie, geen namen of telefoonnummers
  • Rustig tempoEen pauze tussen pagina's, in te stellen in de instellingen

Hoe het werkt

  1. 1
    ZoekopdrachtJe stelt de zoekopdracht in en stuurt de link en een opgeslagen aankondiging
  2. 2
    ParserWij schrijven de code en de handleiding om hem uit te voeren
  3. 3
    StartenJe start hem en controleert de aankondigingen van vandaag tegen het platform
  4. 4
    WijzigingenJe vraagt binnen je pakket om wijzigingen en stuurt een eventuele foutmelding mee

Wat we van je nodig hebben

Het aanbestedingsplatform en een link naar een zoekopdracht met je trefwoorden, codes of regio's, één aankondigingspagina en ongeveer hoeveel aankondigingen de zoekopdracht toont. De velden in de volgorde van je tabel, bijv. kenmerk, onderwerp, aanbestedende dienst, regio, startprijs, valuta, gepubliceerd, deadline, link. Een of twee van die pagina's opgeslagen vanuit je browser (Bestand > Pagina opslaan als) of screenshots. CSV of Excel.

We vragen je:

  • Welk platform en welke zoekopdracht?
  • Trefwoorden, codes of regio's
  • De velden die je nodig hebt
  • Hoe vaak ga je hem starten?

Pakketten vergelijken

PakkettenBasisAankondigingen uit je links€ 19StandaardJouw zoekopdracht, elke aankondiging€ 38PremiumTot 3 platforms€ 67
Levertijd1 dag2 dagen3 dagen
Revisies123
Sites11tot 3
Soorten pagina's12 (zoekresultaten en aankondiging)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

Kan hij inschrijvingen indienen of de aanbestedingsdocumenten downloaden?

Nee. Hij leest alleen openbare pagina's en slaat de link naar elke aankondiging op. Documenten achter een account, ondertekenen en inschrijven blijven bij jou.

Heeft het platform een officiële export?

Veel openbare aanbestedingsplatforms publiceren open data of exports. Als dat bij het jouwe zo is, past dat misschien beter, en dat zeggen we wanneer we naar je pagina's kijken.

Vindt hij elke aanbesteding voor me?

Hij verzamelt wat je zoekopdracht op het platform toont. Betere trefwoorden geven een vollediger lijst; we beloven geen volledige lijst en geen gewonnen opdracht.

Kan hij platforms achter een login of een captcha lezen?

Nee. Hij logt nooit in en omzeilt geen captcha's of beveiliging. Hij leest ook geen Google, Amazon, LinkedIn of sociale netwerken. Voor andere platforms bepaal jij of hun voorwaarden het toestaan.

Staat je antwoord er niet bij?

Pakketten