Parseur d’appels d’offresDéveloppement et personnalisation

Un parseur Python pour les avis d’appels d’offres et de marchés publics : acheteur, objet, prix et date limite dans un tableau

Généralement prêt en 15 minutesRetouches inclusesContrôle qualité
Formules
Paiement protégéEn savoir plus
  • Les retouches prévues par la formule sont gratuites.
  • Sans réponse de votre part dans les 3 jours suivant la livraison, le travail est validé automatiquement.

L’argent est réservé au paiement et versé uniquement une fois le travail validé.

Un parseur Python pour les avis d’appels d’offres et de marchés publics : acheteur, objet, prix et date limite dans un tableau

Exemple de résultat

Exemple pour la formule Standard

Parseur du catalogue d’un fournisseur d’outils de jardin vers Excel

À quoi ressemble le résultat

RéférenceNomPrixEn stockPoidsPhoto
GT-1042Sécateur, 20 mm18,90Oui0,24 kg…/gt-1042.jpg
GT-1187Scie pliante, 210 mm24,50Oui0,31 kg…/gt-1187.jpg
GT-2210Cisaille à haies, lame ondulée39,00Non1,10 kg…/gt-2210.jpg
GT-3305Transplantoir, inox9,80Oui0,18 kg…/gt-3305.jpg
GT-4120Tuyau d’arrosage 25 m, 1/2"42,00Oui2,90 kg…/gt-4120.jpg

Le fichier de l’exemple contient 1 236 produits issus de 52 pages de liste.

Un extrait du code

def product_links(list_url: str) -> Iterator[str]:
    """Liens des fiches produits de chaque page de la liste, en suivant « Suivant »."""
    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:
    """Une page publique, à un rythme raisonnable : une pause entre les requêtes et quelques essais en cas d’erreur."""
    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 a répondu %s, essai %d sur 3", url, response.status_code, attempt + 1)
    raise ScraperError(f"{url} ne s’est pas ouverte après 3 essais")

Fichiers : une archive ZIP avec scraper.py, settings.ini (la page de départ, la pause entre les requêtes, le nom du fichier), requirements.txt et un README sur l’installation et le lancement. Il ne lit que des pages publiques, une toutes les 2 secondes, et consulte d’abord le robots.txt du site. Le client le lance sur son propre ordinateur.

Client : une jardinerie en ligne qui revend les outils d’un fournisseur ; celui-ci a un catalogue public sur son site, mais aucun fichier de tarifs. Tâche : parcourir les pages de liste du catalogue, ouvrir chaque fiche produit et enregistrer dans Excel la référence, le nom, le prix, le stock, le poids et le lien de la photo principale, pour comparer les prix une fois par semaine.

Le client et tous les détails sont fictifs.

À propos de ce service

Les fournisseurs qui répondent à des marchés utilisent ce parseur pour voir les avis publics dans un seul tableau : numéro de l’avis, objet, organisme acheteur, région, type de procédure, prix de départ et devise, date de publication, date limite, statut et lien. Lancez une recherche sur la plateforme de marchés publics avec vos mots-clés ou codes, puis envoyez ce lien, une page d’avis et une ou deux pages enregistrées depuis votre navigateur. Vous recevez un code Python, un fichier de paramètres et un README et le lancez sur votre ordinateur chaque matin ou selon vos besoins. Les personnes à contacter sont exclues : ni noms, ni e-mails, ni téléphones. Il ne se connecte pas, ne télécharge pas les documents réservés à un compte, ne contourne ni captcha ni protection et ne dépose pas d’offres, et il garde un rythme raisonnable. C’est à vous de juger si les conditions de la plateforme le permettent ; un changement ultérieur de sa mise en page demande une mise à jour.

Ce qui est inclus

  • Ce que vous recevezUne archive ZIP avec le code Python, un fichier de paramètres et un README avec des instructions pas à pas ; le code est aussi affiché sur la page de la commande.
  • Des dates limites triablesDates dans un même format, prêtes à trier par date limite
  • Prix de départ en nombreAvec la devise dans sa propre colonne
  • Vos mots-clésPart de la recherche que vous configurez sur la plateforme
  • Sans personnes à contacterSeulement l’organisme acheteur, ni noms ni téléphones
  • Rythme raisonnableUne pause entre les pages, réglée dans les paramètres

Comment ça marche

  1. 1
    RechercheVous configurez la recherche et envoyez son lien et un avis enregistré
  2. 2
    ParseurNous écrivons le code et le guide pour le lancer
  3. 3
    LancementVous le lancez et comparez les avis du jour avec la plateforme
  4. 4
    RetouchesVous demandez des retouches selon votre formule et envoyez les éventuels messages d’erreur

Ce dont nous avons besoin

La plateforme de marchés publics et un lien vers une recherche avec vos mots-clés, codes ou régions, une page d’avis et le nombre approximatif d’avis affichés par la recherche. Les champs dans l’ordre de votre tableau, ex. : numéro, objet, acheteur, région, prix de départ, devise, publication, date limite, lien. Une ou deux de ces pages enregistrées depuis votre navigateur (Fichier > Enregistrer la page sous) ou des captures d’écran. CSV ou Excel.

Nous vous demanderons :

  • Quelle plateforme et quelle recherche ?
  • Mots-clés, codes ou régions
  • Les champs voulus
  • À quelle fréquence allez-vous le lancer ?

Comparer les formules

FormulesEssentielAvis depuis vos liens19 €StandardVotre recherche, tous les avis38 €PremiumJusqu’à 3 plateformes67 €
Délai1 jour2 jours3 jours
Retouches123
Sites11jusqu’à 3
Types de pages12 (résultats de recherche et avis)jusqu’à 3
Champsjusqu’à 10jusqu’à 25jusqu’à 25 sur chacun
Parcourt les pages d’une listeNonOuiOui
Fichier de résultatsCSVExcel ou CSVExcel, CSV ou JSON
Doublons retirés, reprise là où il s’est arrêtéNonNonOui
Commander EssentielCommander StandardCommander Premium

Paiement protégé

Vous payez à la commande, mais l’argent n’est versé que pour un travail validé.

  • Prix fixeLe prix de la formule ne change pas après le paiement.
  • L’argent est réservéAu paiement, le montant est seulement réservé. Il n’est versé à Dleex qu’une fois le travail validé.
  • Vérifié avant livraisonChaque résultat passe un contrôle qualité avant de vous parvenir, et vous le voyez sur la page de la commande avant de le valider.
  • Retouches gratuitesDemandez des retouches dans le cadre de votre brief autant de fois que la formule le permet.
  • Validation au bout de 3 joursSi, dans les 3 jours suivant la livraison, vous n’avez ni validé le travail ni demandé de retouches, il est validé automatiquement. Si vous écrivez dans le chat de la commande après la livraison, la commande est mise en attente ; après notre réponse, nous pourrons relancer le délai de 3 jours et vous le signalerons dans le chat.
  • Travail refait ou remboursement intégralSi le résultat ne correspond pas à votre brief et que les retouches n’y ont rien changé, ou si le travail prend plus du double du délai prévu, écrivez dans le chat de la commande : nous referons le travail ou vous rembourserons intégralement.
Comment ça marche →

Questions et réponses

Peut-il déposer des offres ou télécharger les dossiers de consultation ?

Non. Il lit seulement les pages publiques et enregistre le lien de chaque avis. Les documents réservés à un compte, la signature et les offres restent de votre ressort.

La plateforme a-t-elle un export officiel ?

Beaucoup de plateformes de marchés publics publient des données ouvertes ou des exports. Si c’est le cas de la vôtre, cela peut mieux vous convenir, et nous vous le dirons en examinant vos pages.

Trouvera-t-il tous les appels d’offres pour moi ?

Il collecte ce que votre recherche sur la plateforme affiche. De meilleurs mots-clés donnent une liste plus complète ; nous ne promettons ni une liste exhaustive ni un marché remporté.

Peut-il lire des plateformes protégées par une connexion ou un captcha ?

Non. Il ne se connecte jamais et ne contourne ni captcha ni protection. Il ne lit pas non plus Google, Amazon, LinkedIn ni les réseaux sociaux. Pour les autres plateformes, c’est à vous de juger si leurs conditions le permettent.

Vous n’avez pas trouvé la réponse ?

Formules