Hello !
Spoiler : j’ai pas réussi (ma fierté en a pris un petit coup)
Quand je réplique la requête avec le js activé, et même un scénario js pour attendre (car le site est très lent), j’obtiens 0 résultats, alors que des résultats étaient bien présents sur navigateur…
Il doit y avoir des ID / cookies à passer de requête en requête pour garder la même session, mais je ne trouve pas d’où ils viennent !
Je te donne ma dernière version de code, si jamais ca peut t’être utile… Sinon tes données sont accessibles ici il me semble : https://annuaire.sante.fr/web/site-pro/extractions-publiques
Interessé si jamais quelqu’un y arrive !
(j’utilise The best web scraping API comme proxy, le prix d’entrée est de 2e)
import requests
import json
from urllib.parse import urlencode
API_KEY = (
"API_SCRAPING_FISH"
)
proxy_url = "https://scraping.narf.ai/api/v1/"
base_url = "https://annuaire.sante.fr/web/site-pro/recherche/recherchecarto"
params = {
"p_p_id": "rechercheportlet_INSTANCE_Op0iv2YnHPvJ",
"p_p_lifecycle": "1",
"p_p_state": "normal",
"p_p_mode": "view",
"_rechercheportlet_INSTANCE_Op0iv2YnHPvJ_javax.portlet.action": "rechercheCoordoneesAction",
"p_auth": "zY8lhC7u",
}
target_url = f"{base_url}?{urlencode(params)}"
headers = {
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"accept-language": "fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7",
"dnt": "1",
"priority": "u=0, i",
"referer": "https://www.google.com/",
"sec-ch-ua": '"Chromium";v="129", "Not=A?Brand";v="8"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"macOS"',
"sec-fetch-dest": "document",
"sec-fetch-mode": "navigate",
"sec-fetch-site": "cross-site",
"sec-fetch-user": "?1",
"upgrade-insecure-requests": "1",
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36",
}
data = {
"_rechercheportlet_INSTANCE_Op0iv2YnHPvJ_texttofind": "",
"_rechercheportlet_INSTANCE_Op0iv2YnHPvJ_cordonneesGeo": "48.09840368374199,-1.675972198742392",
"_rechercheportlet_INSTANCE_Op0iv2YnHPvJ_integralite": "active_only",
}
query_params = {
"api_key": API_KEY,
"url": target_url,
"render_js": "true",
"headers": json.dumps(headers),
"cookies": json.dumps(
[
{"name": "JSESSIONID", "value": "27813B6KE8F9C9C6CF0C04EA11B6E2FD"},
{"name": "COOKIE_SUPPORT", "value": "true"},
{"name": "GUEST_LANGUAGE_ID", "value": "fr_FR"},
{"name": "LFR_SESSION_STATE_20119", "value": "1727946283190"},
]
),
"js_scenario": json.dumps({"steps": [{"wait": 200_000}]}),
"total_timeout_ms": 210_000,
}
response = requests.post(proxy_url, params=query_params, json=data)
print(response.text)