Effectivement, stratégie de limite d’affichage classique — utilisé ici, sur Linkedin (max. 2500 profils), sur leboncoin (max. 3500 annonces) etc.
Il faut dans ces cas là segmenter ta recherche
par département
par profession
e.g. d’abord les dentistes du 75001, puis les dentistes du 75002 etc.
Attention, du côté technique, sur https://annuaire.sante.fr/ les données sont chargées dynamiquement
Il y a 2 requêtes
updateSearchCriteria
— tu mets à jour tes critères de recherche
curl 'https://annuaire.sante.fr/web/site-pro/recherche/resultats?p_p_id=rechercheportlet_INSTANCE_ctPdpHA24ctE&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&_rechercheportlet_INSTANCE_ctPdpHA24ctE_javax.portlet.action=rechercheAction&p_auth=9umZqncQ' \
-H 'Accept: */*' \
-H 'Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7' \
-H 'Connection: keep-alive' \
-H 'Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryjmz8Gcga1OntmjAC' \
-H 'Cookie: JSESSIONID=747347A854773B23C9E316C38BC3D3FE; COOKIE_SUPPORT=true; GUEST_LANGUAGE_ID=fr_FR; LFR_SESSION_STATE_20119=1696332052434' \
-H 'Origin: https://annuaire.sante.fr' \
-H 'Referer: https://annuaire.sante.fr/web/site-pro/recherche/resultats' \
-H 'Sec-Fetch-Dest: empty' \
-H 'Sec-Fetch-Mode: cors' \
-H 'Sec-Fetch-Site: same-origin' \
-H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36' \
-H 'X-PJAX: true' \
-H 'X-Requested-With: XMLHttpRequest' \
-H 'sec-ch-ua: "Google Chrome";v="117", "Not;A=Brand";v="8", "Chromium";v="117"' \
-H 'sec-ch-ua-mobile: ?0' \
-H 'sec-ch-ua-platform: "macOS"' \
--data-raw $'------WebKitFormBoundaryjmz8Gcga1OntmjAC\r\nContent-Disposition: form-data; name="_rechercheportlet_INSTANCE_ctPdpHA24ctE_texttofind"\r\n\r\ndentiste\r\n------WebKitFormBoundaryjmz8Gcga1OntmjAC\r\nContent-Disposition: form-data; name="_rechercheportlet_INSTANCE_ctPdpHA24ctE_adresse"\r\n\r\n75002\r\n------WebKitFormBoundaryjmz8Gcga1OntmjAC\r\nContent-Disposition: form-data; name="_rechercheportlet_INSTANCE_ctPdpHA24ctE_cordonneesGeo"\r\n\r\n\r\n------WebKitFormBoundaryjmz8Gcga1OntmjAC\r\nContent-Disposition: form-data; name="_rechercheportlet_INSTANCE_ctPdpHA24ctE_integralite"\r\n\r\nactive_only\r\n------WebKitFormBoundaryjmz8Gcga1OntmjAC\r\nContent-Disposition: form-data; name="_rechercheportlet_INSTANCE_ctPdpHA24ctE_typeRecherche"\r\n\r\ntextLibre\r\n------WebKitFormBoundaryjmz8Gcga1OntmjAC--\r\n' \
--compressed
Et displayResults
— tu affiches tes résultats de recherche
curl 'https://annuaire.sante.fr/web/site-pro/recherche/resultats' \
-H 'Accept: */*' \
-H 'Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7' \
-H 'Connection: keep-alive' \
-H 'Cookie: JSESSIONID=747347A854773B23C9E316C38BC3D3FE; COOKIE_SUPPORT=true; GUEST_LANGUAGE_ID=fr_FR; LFR_SESSION_STATE_20119=1696332052434' \
-H 'Referer: https://annuaire.sante.fr/web/site-pro/recherche/resultats' \
-H 'Sec-Fetch-Dest: empty' \
-H 'Sec-Fetch-Mode: cors' \
-H 'Sec-Fetch-Site: same-origin' \
-H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36' \
-H 'X-PJAX: true' \
-H 'X-Requested-With: XMLHttpRequest' \
-H 'sec-ch-ua: "Google Chrome";v="117", "Not;A=Brand";v="8", "Chromium";v="117"' \
-H 'sec-ch-ua-mobile: ?0' \
-H 'sec-ch-ua-platform: "macOS"' \
--compressed
C’est assez complexe — et sauf erreur de ma part, impossible à faire avec un click-to-scrape add-on.
Voilà ce qu’on récupère en continu sur le site:
Sheet1
ID,TASK_ID,URL,NOM_COMPLET,NOM,PRENOM,PROFESSION,MARQUER_MSSANTE,ETAT_ETABLISSEMENT,IDENTIFIANT_RPPS,TELEPHONE,TELEPHONE_AUTRE,COURRIEL,ADRESSE_MSSANTE,ENSEIGNE_COMMERCIALE,ADRESSE_COMPLET,CODE_POSTAL,VILLE,SCRAPING_TIME
1,1,
Tu peux me contacter par MP.
NB: attention, j’ai anonymisé les données de contact pour des raisons évidentes de respect des données personnelles