How?
After watching this video, I realized he uses a Session. Let's try this.
import requests
s = requests.Session()
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
r = s.get("http://httpbin.org/cookies")
print(r.text)
# '{"cookies": {"sessioncookie": "123456789"}}'
{ "cookies": { "sessioncookie": "123456789" } }
What if we do this with ameli?
s = requests.Session()
r = s.get('http://ameli-direct.ameli.fr')
r
<Response [200]>
Getting the interesting link:
test_string = """<div id="centresite">
<form action="/recherche-ceca2094e7dec344ca69beca17f092d2.html" method="post">
<div class="choix-ps-es">
<h2>Je recherche :</h2>"""
import re
p = re.compile('<form action="([\w\d/.-]+)" method="post">')
p.findall(test_string)
['/recherche-ceca2094e7dec344ca69beca17f092d2.html']
suburl = p.findall(r.text)[0]
suburl
u'/recherche-f37e8ccd9299ffd0512f6451db3292f5.html'
Good, we have an entry point into the system: the url we need to find.
It also looks like we have cookies!
r.cookies
<<class 'requests.cookies.RequestsCookieJar'>[Cookie(version=0, name='AmeliDirectPersist', value='359719223.20480.0000', port=None, port_specified=False, domain='ameli-direct.ameli.fr', domain_specified=False, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={}, rfc2109=False), Cookie(version=0, name='TS01b76c1f', value='0139dce0d28a9787802f747bcf08b6311fb05ccb4900b3de48d0dd0cef0edb971ad476c5f5d562a2319762d297a76ee857a78f2b93d3e5edc3568d2fa9675da7728b624e5a', port=None, port_specified=False, domain='ameli-direct.ameli.fr', domain_specified=False, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={}, rfc2109=False), Cookie(version=0, name='infosoins', value='qbm8t56jclinm2kcdduqs51dc1', port=None, port_specified=False, domain='ameli-direct.ameli.fr', domain_specified=False, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=1445287024, discard=False, comment=None, comment_url=None, rest={}, rfc2109=False)]>
Now, which request do we have to complete to finish this? We primarily need the sort of payload we want to ask the site for:
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36"}
payload = {"type":"ps",
"ps_profession":"ophtalmologiste",
"ps_localisation":"75014"}
r = s.post("http://ameli-direct.ameli.fr" + suburl, params=payload,
headers=headers)
r
<Response [200]>
r.text
u'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">\n<head>\n\t<title>Annuaire sant\xe9 d\'ameli.fr : trouver un m\xe9decin, un h\xf4pital...</title>\n\t<meta name="description" content="L\u2019annuaire sant\xe9 de l\u2019Assurance Maladie pour trouver un m\xe9decin, un kin\xe9, un h\xf4pital\u2026 Tarifs \u2013 Horaires \u2013 Sp\xe9cialit\xe9s - Localisation" />\n\t<meta http-equiv="X-UA-Compatible" content="IE=edge">\n<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />\n<meta name="robots" content="noindex, nofollow" /><link href="/resources_ver/20150826115145/css/print_new.css" media="print" rel="stylesheet" type="text/css" />\n<link href="/resources_ver/20150826115145/css/jquery.qtip.css" media="screen" rel="stylesheet" type="text/css" />\n<link href="/resources_ver/20150826115145/css/styles_new.css" media="screen" rel="stylesheet" type="text/css" />\n<link href="/resources_ver/20150826115145/css/ui-lightness/jquery-ui-1.10.3.custom.min.css" media="all" rel="stylesheet" type="text/css" />\n<link href="http://fonts.googleapis.com/css?family=Droid+Sans:700,400" media="all" rel="stylesheet" type="text/css" />\n<link href="/resources_ver/20150826115145/css/geoportail.css" media="all" rel="stylesheet" type="text/css" />\n<!--[if IE]> <link href="/resources_ver/20150826115145/css/styles_ie_new.css" media="screen" rel="stylesheet" type="text/css" /><![endif]-->\n<!--[if IE 7]> <link href="/resources_ver/20150826115145/css/styles_ie7.css" media="screen" rel="stylesheet" type="text/css" /><![endif]--><script type="text/javascript" src="/resources_ver/20150826115145/js/jquery-1.10.2.min.js"></script>\n<script type="text/javascript" src="/resources_ver/20150826115145/js/jquery-ui-1.10.3.custom.min.js"></script>\n<script type="text/javascript" src="http://api.ign.fr/geoportail/api/js/latest/GeoportalExtended.js"></script>\n<script type="text/javascript" src="/resources_ver/20150826115145/js/geoportail.utils.js"></script>\n<script type="text/javascript" src="/resources_ver/20150826115145/js/jquery.popin.40.js"></script>\n<script type="text/javascript" src="/resources_ver/20150826115145/js/selectmenu.uncompressed.js"></script>\n<script type="text/javascript" src="/resources_ver/20150826115145/js/jquery.qtip.js"></script>\n<script type="text/javascript" src="/resources_ver/20150826115145/js/BrowserDetect.js"></script>\n<script type="text/javascript" src="/resources_ver/20150826115145/js/scripts.uncompressed.js"></script></head>\n<body>\n<div id="site" >\n\t<div id="entete">\n\t<a href="/" title=""><img class="logoam" alt="L\'Assurance Maladie" src="/resources_ver/20150826115145/images/accueil/logo_am.png"/></a>\n\t<h1><img src="/resources_ver/20150826115145/images/accueil/logo_amelidirect.png" alt="Annuaire sant\xe9" class="logosite" /></h1>\n\t<img src="/resources_ver/20150826115145/images/accueil/liner.gif" alt="Je m\'informe avant de consulter" class="liner" />\n\t <div class="encart_haut_ameli">\n\t\t<div class="acces">\n\t\t\t<a target="_blank" href="https://assure.ameli.fr/" >Acc\xe9der \xe0 mon compte</a>\n\t\t\t\t</div>\n\t\t<div class="ouvrir">\n\t\t\t<a target="_blank" href="https://assure.ameli.fr/">Ouvrir mon compte</a>\n\t\t</div>\n\t</div>\n</div>\t \t<div id="site_inner" >\n \t\t<div id="filariane" class="ariane">\n \t\t\t<p><span><a href="/">Accueil</a></span> > <span><a href="/nouvelle-recherche/professionnels-de-sante.html">Professionnels de sant\xe9</a></span> > <span>R\xe9sultats de la recherche</span></p>\n \t\t</div>\n \t\t<div class="print-result impression"><a href="?print" target="_blank">Imprimer la liste de r\xe9sultats</a></div>\n<div class="clear"></div>\n<div class="recapitulatif">\n\t<div class="recapitulatif-inner">\n\t \t<div class="infos">\n <div class="boutons">\n <a href="/modifier_votre_recherche_1.html">\n \t <span><span>Modifier votre recherche</span></span>\n </a>\n <a href="/nouvelle-recherche/professionnels-de-sante.html" class="loupe">\n <span><span>Nouvelle recherche</span></span>\n </a>\n </div>\n <h1>26 r\xe9sultats correspondent \xe0 votre recherche</h1>\n <ul>\n \t<li>Profession : Ophtalmologiste</li>\n <li>Lieu : 75014</li>\n </ul>\n <div class="mention">Dans la liste ci-dessous, ne figurent que les professionnels de sant\xe9 qui exercent une activit\xe9 lib\xe9rale et les centres de sant\xe9.</div>\n </div> \n <div class="carte"><a href="/carte-1-f37e8ccd9299ffd0512f6451db3292f5.html" class="modaleCarteLink"><img src="/resources_ver/20150826115145/images/lien_carte.png" alt="Voir les r\xe9sultats sur une carte" /></a></div>\t\t<div class="clear"></div>\n\t</div>\n</div>\n<div class="liste-criteres">\n\t \t \t<div class="bloc-critere">\n \t\t<div class="bloc-haut-critere"></div>\n \t\t<a class="infos" href="/fenetre-modale-xhr/information_facette_type_honoraires.html"><img src="/resources_ver/20150826115145/images/picto_info.gif" alt="Infos" /></a>\n \t\t<h2><img alt="Affichez les professionnels de sant\xe9 selon le type d\u2019honoraires" src="/resources_ver/20150826115145/images/picto_euro.png" class="picto_facette">Affichez les professionnels de sant\xe9 selon le type d\u2019honoraires</h2>\n \t\t\t<ul>\n \t\t\t \t\t\t\t<li><a href="/recherche-facette-1-f37e8ccd9299ffd0512f6451db3292f5/type_honoraires-tarif-sans-depassement.html">Honoraires sans d\xe9passement (1)</a></li> \t\t\t \t\t\t\t<li><a href="/recherche-facette-1-f37e8ccd9299ffd0512f6451db3292f5/type_honoraires-tarif-libre.html">Honoraires libres (24)</a></li> \t\t\t \t\t\t\t<li><a href="/recherche-facette-1-f37e8ccd9299ffd0512f6451db3292f5/type_honoraires-conventionne.html">Conventionn\xe9 (1)</a></li> \t\t\t \t\t</ul>\n \t\t<div class="bloc-bas-critere"></div>\n \t</div>\n \t \t \t\n \t<div class="bloc-critere">\n \t\t<div class="bloc-haut-critere"></div>\n \t\t<h2>Affichez les professionnels de sant\xe9 indiquant leurs horaires</h2>\n \t\t<ul>\n\t \t\t\t \t\t\t\t<li>\n \t\t\t\t<a href="/recherche-facette-1-f37e8ccd9299ffd0512f6451db3292f5/horaires-1.html"><img src="/resources_ver/20150826115145/images/picto_horaires.png" alt="" /><span>Le m\xe9decin a indiqu\xe9 ses horaires (1)</span></a>\n \t\t\t</li>\n \t\t\t\t\n \t\t\t\t \t\t\t\t\n \t\t</ul>\n \t\t<div class="bloc-bas-critere"></div>\n \t</div>\n \t \t \t\n \t<div class="bloc-critere">\n \t\t<div class="bloc-haut-critere"></div>\n \t\t<h2>Affichez les professionnels de sant\xe9 acceptant la carte Vitale</h2>\n \t\t<ul>\n \t\t\t \t\t\t<li>\n \t\t\t\t<a href="/recherche-facette-1-f37e8ccd9299ffd0512f6451db3292f5/carte_vitale-1.html"><img src="/resources_ver/20150826115145/images/picto_cartevitale.png" alt="" /><span>Avec carte Vitale (17)</span></a>\n \t\t\t</li>\n \t\t\t \t\t</ul>\n \t\t<div class="bloc-bas-critere"></div>\n \t</div>\n \t \t \t\n \t<!-- facette centre des sante -->\n \t \t\n \t<div class="bloc-critere">\n \t\t<div class="bloc-haut-critere"></div>\n \t\t<h2>Affichez les centres de sant\xe9</h2>\n \t\t<ul>\n \t\t\t \t\t\t<li>\n \t\t\t\t<a href="/recherche-facette-1-f37e8ccd9299ffd0512f6451db3292f5/categorie-CENTRE_DE_SANTE.html"><img src="/resources_ver/20150826115145/images/picto_facette_centre_sante.png" alt="" /><span>Centre de sant\xe9 (1)</span></a>\n \t\t\t</li>\n \t\t\t \t\t</ul>\n \t\t<div class="bloc-bas-critere"></div>\n \t</div>\n \t \t\n \t\n </div>\n<div class="resultats">\n\t<div id="hautcadre"></div>\n\t<div id="centrecadre">\n\t\t<div class="tri">\n\t\t\t<form id="form_tri" action="">\n\t\t\t\t<label for="tri-haut">Trier par</label>\n\t\t\t\t<select id="form_tri_select" name="sorting" onchange="document.getElementById(\'form_tri\').submit()">\n\t \t<option value="aleatoire"> - </option>\t <option value="nom_asc">Nom</option>\n\t \t \t <option value="carte-vitale_desc">Carte Vitale</option>\n\t \t \t <option value="secteur_asc">Type d'honoraires</option>\n\t \t \t </select>\n\t <button type="submit" title="Trier" class="boutons"><a href="#"><span><span>Trier</span></span></a></button>\n </form>\n\t\t</div>\n\t\t<div class="pagination">\n\t<form method="post" action="/professionnels-de-sante/recherche-1/liste-resultats-page-1-par_page-20-tri-aleatoire-f37e8ccd9299ffd0512f6451db3292f5.html"> \n\t\t Page <input type="text" name="pageCible" value="1" /> sur 2<a href="/professionnels-de-sante/recherche-1/liste-resultats-page-2-par_page-20-tri-aleatoire-f37e8ccd9299ffd0512f6451db3292f5.html"><img src="/resources_ver/20150826115145/images/pagination_next.png" alt="Page suivante" /></a><a href="/professionnels-de-sante/recherche-1/liste-resultats-page-2-par_page-20-tri-aleatoire-f37e8ccd9299ffd0512f6451db3292f5.html"><img src="/resources_ver/20150826115145/images/pagination_last.png" alt=" - Aller \xe0 la derni\xe8re page" /></a>\t</form>\n</div>\n\t\t<div class="clear"></div>\n <div class="liste-professionnel">\n <div class="item-professionnel"><div class="item-professionnel-inner"><span class="num">1</span><div class="nom_pictos"><h2><a href="/professionnels-de-sante/recherche-1/fiche-detaillee-B7c1ljU3MjKz-f37e8ccd9299ffd0512f6451db3292f5.html"><strong>LE QUOY</strong> OLIVIER</a></h2><div class="pictos"></div><div class="clear"></div></div><div class="clear"></div><div class="elements"><div class="item left"></div><div class="item right type_honoraires">Honoraires libres</div><div class="clear"></div><div class="item left tel">01 43 35 31 48</div><div class="item right convention"><a href="#" class="infobulle" alt="Les m\xe9decins fixent librement leurs tarifs et peuvent donc pratiquer des d\xe9passements d\u2019honoraires avec tact et mesure. L\u2019Assurance Maladie rembourse les consultations et actes r\xe9alis\xe9s par ces m\xe9decins sur la base des tarifs fix\xe9s dans la convention (tarifs applicables au m\xe9decin de secteur 2), le montant des \xe9ventuels d\xe9passements d\u2019honoraires reste \xe0 votre charge." >Conventionn\xe9 secteur 2</a></div><div class="clear"></div><div class="item left adresse">29 RUE D ALESIA<br />75014 PARIS</div><div class="clear"></div></div><div class="clear"></div></div></div><div class="item-professionnel"><div class="item-professionnel-inner"><span class="num">2</span><div class="nom_pictos"><h2><a href="/professionnels-de-sante/recherche-1/fiche-detaillee-B7c1mjMxMzqx-f37e8ccd9299ffd0512f6451db3292f5.html"><strong>SELLAM</strong> MICKAEL</a></h2><div class="pictos"><img alt="Accepte la carte Vitale" src="/resources_ver/20150826115145/images/picto_cartevitale.png" class="infobulle"/></div><div class="clear"></div></div><div class="clear"></div><div class="elements"><div class="item left"></div><div class="item right type_honoraires">Honoraires libres</div><div class="clear"></div><div class="item left"></div><div class="item right convention"><a href="#" class="infobulle" alt="Les m\xe9decins fixent librement leurs tarifs et peuvent donc pratiquer des d\xe9passements d\u2019honoraires avec tact et mesure. L\u2019Assurance Maladie rembourse les consultations et actes r\xe9alis\xe9s par ces m\xe9decins sur la base des tarifs fix\xe9s dans la convention (tarifs applicables au m\xe9decin de secteur 2), le montant des \xe9ventuels d\xe9passements d\u2019honoraires reste \xe0 votre charge." >Conventionn\xe9 secteur 2</a></div><div class="clear"></div><div class="item left adresse">CLINIQUE STE GENEVIEVE<br />29 RUE SARRETTE<br />75014 PARIS</div><div class="clear"></div></div><div class="clear"></div></div></div><div class="item-professionnel"><div class="item-professionnel-inner"><span class="num">3</span><div class="nom_pictos"><h2><a href="/professionnels-de-sante/recherche-1/fiche-detaillee-B7c1kTYwMDuy-f37e8ccd9299ffd0512f6451db3292f5.html"><strong>BINN DEUTSCHER</strong> SYLVIE</a></h2><div class="pictos"><img alt="Accepte la carte Vitale" src="/resources_ver/20150826115145/images/picto_cartevitale.png" class="infobulle"/></div><div class="clear"></div></div><div class="clear"></div><div class="elements"><div class="item left"></div><div class="item right type_honoraires">Honoraires libres</div><div class="clear"></div><div class="item left tel">01 45 65 04 24</div><div class="item right convention"><a href="#" class="infobulle" alt="Les m\xe9decins fixent librement leurs tarifs et peuvent donc pratiquer des d\xe9passements d\u2019honoraires avec tact et mesure. L\u2019Assurance Maladie rembourse les consultations et actes r\xe9alis\xe9s par ces m\xe9decins sur la base des tarifs fix\xe9s dans la convention (tarifs applicables au m\xe9decin de secteur 2), le montant des \xe9ventuels d\xe9passements d\u2019honoraires reste \xe0 votre charge." >Conventionn\xe9 secteur 2</a></div><div class="clear"></div><div class="item left adresse">12 RUE DE LA TOMBE ISSOIRE<br />75014 PARIS</div><div class="clear"></div></div><div class="clear"></div></div></div><div class="item-professionnel"><div class="item-professionnel-inner"><span class="num">4</span><div class="nom_pictos"><h2><a href="/professionnels-de-sante/recherche-1/fiche-detaillee-B7c1ljswNTqy-f37e8ccd9299ffd0512f6451db3292f5.html"><strong>CHAMOUNI</strong> HUBERT</a></h2><div class="pictos"><img alt="Accepte la carte Vitale" src="/resources_ver/20150826115145/images/picto_cartevitale.png" class="infobulle"/></div><div class="clear"></div></div><div class="clear"></div><div class="elements"><div class="item left"></div><div class="item right type_honoraires">Honoraires libres</div><div class="clear"></div><div class="item left"></div><div class="item right convention"><a href="#" class="infobulle" alt="Les m\xe9decins fixent librement leurs tarifs et peuvent donc pratiquer des d\xe9passements d\u2019honoraires avec tact et mesure. L\u2019Assurance Maladie rembourse les consultations et actes r\xe9alis\xe9s par ces m\xe9decins sur la base des tarifs fix\xe9s dans la convention (tarifs applicables au m\xe9decin de secteur 2), le montant des \xe9ventuels d\xe9passements d\u2019honoraires reste \xe0 votre charge." >Conventionn\xe9 secteur 2</a></div><div class="clear"></div><div class="item left adresse">95 AVENUE DU GAL LECLERC<br />75014 PARIS</div><div class="clear"></div></div><div class="clear"></div></div></div><div class="item-professionnel"><div class="item-professionnel-inner"><span class="num">5</span><div class="nom_pictos"><h2><a href="/professionnels-de-sante/recherche-1/fiche-detaillee-B7c1ljI1Nzay-f37e8ccd9299ffd0512f6451db3292f5.html"><strong>CHARLOT</strong> JEAN CLAUDE</a></h2><div class="pictos"></div><div class="clear"></div></div><div class="clear"></div><div class="elements"><div class="item left"></div><div class="item right type_honoraires">Honoraires libres</div><div class="clear"></div><div class="item left tel">01 43 22 42 33</div><div class="item right convention"><a href="#" class="infobulle" alt="Les m\xe9decins fixent librement leurs tarifs et peuvent donc pratiquer des d\xe9passements d\u2019honoraires avec tact et mesure. L\u2019Assurance Maladie rembourse les consultations et actes r\xe9alis\xe9s par ces m\xe9decins sur la base des tarifs fix\xe9s dans la convention (tarifs applicables au m\xe9decin de secteur 2), le montant des \xe9ventuels d\xe9passements d\u2019honoraires reste \xe0 votre charge." >Conventionn\xe9 secteur 2</a></div><div class="clear"></div><div class="item left adresse">228 BOULEVARD RASPAIL<br />75014 PARIS</div><div class="clear"></div></div><div class="clear"></div></div></div><div class="item-professionnel"><div class="item-professionnel-inner"><span class="num">6</span><div class="nom_pictos"><h2><a href="/professionnels-de-sante/recherche-1/fiche-detaillee-B7c1lTI2Njq6-f37e8ccd9299ffd0512f6451db3292f5.html"><strong>COMMEAU</strong> DOMINIQUE</a></h2><div class="pictos"><img alt="Accepte la carte Vitale" src="/resources_ver/20150826115145/images/picto_cartevitale.png" class="infobulle"/></div><div class="clear"></div></div><div class="clear"></div><div class="elements"><div class="item left"></div><div class="item right type_honoraires">Honoraires libres</div><div class="clear"></div><div class="item left tel">01 45 41 73 63</div><div class="item right convention"><a href="#" class="infobulle" alt="Les m\xe9decins fixent librement leurs tarifs et peuvent donc pratiquer des d\xe9passements d\u2019honoraires avec tact et mesure. L\u2019Assurance Maladie rembourse les consultations et actes r\xe9alis\xe9s par ces m\xe9decins sur la base des tarifs fix\xe9s dans la convention (tarifs applicables au m\xe9decin de secteur 2), le montant des \xe9ventuels d\xe9passements d\u2019honoraires reste \xe0 votre charge." >Conventionn\xe9 secteur 2</a></div><div class="clear"></div><div class="item left adresse">22 RUE ERNEST CRESSON<br />75014 PARIS</div><div class="clear"></div></div><div class="clear"></div></div></div><div class="item-professionnel"><div class="item-professionnel-inner"><span class="num">7</span><div class="nom_pictos"><h2><a href="/professionnels-de-sante/recherche-1/fiche-detaillee-B7c1lTM1MTu1-f37e8ccd9299ffd0512f6451db3292f5.html"><strong>VAN WENT</strong> CHARLES</a></h2><div class="pictos"><img alt="Accepte la carte Vitale" src="/resources_ver/20150826115145/images/picto_cartevitale.png" class="infobulle"/></div><div class="clear"></div></div><div class="clear"></div><div class="elements"><div class="item left"></div><div class="item right type_honoraires">Honoraires libres</div><div class="clear"></div><div class="item left"></div><div class="item right convention"><a href="#" class="infobulle" alt="Les m\xe9decins fixent librement leurs tarifs et peuvent donc pratiquer des d\xe9passements d\u2019honoraires avec tact et mesure. L\u2019Assurance Maladie rembourse les consultations et actes r\xe9alis\xe9s par ces m\xe9decins sur la base des tarifs fix\xe9s dans la convention (tarifs applicables au m\xe9decin de secteur 2), le montant des \xe9ventuels d\xe9passements d\u2019honoraires reste \xe0 votre charge." >Conventionn\xe9 secteur 2</a></div><div class="clear"></div><div class="item left adresse">SELARL CHASSIGNOL VAN WENT<br />79 AVENUE DU GENERAL LECLERC<br />75014 PARIS</div><div class="clear"></div></div><div class="clear"></div></div></div><div class="item-professionnel"><div class="item-professionnel-inner"><span class="num">8</span><div class="nom_pictos"><h2><a href="/professionnels-de-sante/recherche-1/fiche-detaillee-B7c1lDE2MDaw-f37e8ccd9299ffd0512f6451db3292f5.html"><strong>THAN TRONG</strong> THONG</a></h2><div class="pictos"><img alt="Accepte la carte Vitale" src="/resources_ver/20150826115145/images/picto_cartevitale.png" class="infobulle"/></div><div class="clear"></div></div><div class="clear"></div><div class="elements"><div class="item left"></div><div class="item right type_honoraires">Honoraires libres</div><div class="clear"></div><div class="item left tel">01 43 35 41 03</div><div class="item right convention"><a href="#" class="infobulle" alt="Les m\xe9decins fixent librement leurs tarifs et peuvent donc pratiquer des d\xe9passements d\u2019honoraires avec tact et mesure. L\u2019Assurance Maladie rembourse les consultations et actes r\xe9alis\xe9s par ces m\xe9decins sur la base des tarifs fix\xe9s dans la convention (tarifs applicables au m\xe9decin de secteur 2), le montant des \xe9ventuels d\xe9passements d\u2019honoraires reste \xe0 votre charge." >Conventionn\xe9 secteur 2</a></div><div class="clear"></div><div class="item left adresse">10 RUE DAGUERRE<br />75014 PARIS</div><div class="clear"></div></div><div class="clear"></div></div></div><div class="item-professionnel"><div class="item-professionnel-inner"><span class="num">9</span><div class="nom_pictos centre-sante"><h2><a href="/professionnels-de-sante/centre-sante/recherche-1/fiche-detaillee-B7c0kjMzNjey-f37e8ccd9299ffd0512f6451db3292f5.html">CTRE SANTE MEDICAL DENTAIRE TISSERAND</a></h2><div class="clear"></div></div><div class="clear"></div><div class="pictos"><img alt="Cet \xe9tablissement est un centre de sant\xe9" src="/resources_ver/20150826115145/images/picto_categorie_centre_sante.png" class="infobulle" /></div><div class="clear"></div><div class="elements"><div class="item left adresse">CTRE SANTE MEDICAL DENTAIRE TISSERAND<br />C A S VILLE DE PARIS<br />134 RUE D ALESIA<br />75014 PARIS</div><div class="item right tel">01 45 39 49 29</div><div class="clear"></div><div class="item left type-etablissement"></div><div class="clear"></div></div><div class="clear"></div></div></div><div class="item-professionnel"><div class="item-professionnel-inner"><span class="num">10</span><div class="nom_pictos"><h2><a href="/professionnels-de-sante/recherche-1/fiche-detaillee-B7c1lzUyNDew-f37e8ccd9299ffd0512f6451db3292f5.html"><strong>BREZIN</strong> ANTOINE</a></h2><div class="pictos"></div><div class="clear"></div></div><div class="clear"></div><div class="elements"><div class="item left"></div><div class="item right type_honoraires">Honoraires libres</div><div class="clear"></div><div class="item left tel">01 58 41 22 00</div><div class="item right convention"><a href="#" class="infobulle" alt="Les m\xe9decins fixent librement leurs tarifs et peuvent donc pratiquer des d\xe9passements d\u2019honoraires avec tact et mesure. L\u2019Assurance Maladie rembourse les consultations et actes r\xe9alis\xe9s par ces m\xe9decins sur la base des tarifs fix\xe9s dans la convention (tarifs applicables au m\xe9decin de secteur 2), le montant des \xe9ventuels d\xe9passements d\u2019honoraires reste \xe0 votre charge." >Conventionn\xe9 secteur 2</a></div><div class="clear"></div><div class="item left adresse">HOPITAL COCHIN<br />27 RUE DU FBG SAINT JACQUES<br />75014 PARIS</div><div class="clear"></div></div><div class="clear"></div></div></div><div class="item-professionnel"><div class="item-professionnel-inner"><span class="num">11</span><div class="nom_pictos"><h2><a href="/professionnels-de-sante/recherche-1/fiche-detaillee-B7c1ljUxNze6-f37e8ccd9299ffd0512f6451db3292f5.html"><strong>SULMAN</strong> JEAN JACQUES</a></h2><div class="pictos"><img alt="Accepte la carte Vitale" src="/resources_ver/20150826115145/images/picto_cartevitale.png" class="infobulle"/></div><div class="clear"></div></div><div class="clear"></div><div class="elements"><div class="item left"></div><div class="item right type_honoraires">Honoraires libres</div><div class="clear"></div><div class="item left tel">01 40 47 00 00</div><div class="item right convention"><a href="#" class="infobulle" alt="Les m\xe9decins fixent librement leurs tarifs et peuvent donc pratiquer des d\xe9passements d\u2019honoraires avec tact et mesure. L\u2019Assurance Maladie rembourse les consultations et actes r\xe9alis\xe9s par ces m\xe9decins sur la base des tarifs fix\xe9s dans la convention (tarifs applicables au m\xe9decin de secteur 2), le montant des \xe9ventuels d\xe9passements d\u2019honoraires reste \xe0 votre charge." >Conventionn\xe9 secteur 2</a></div><div class="clear"></div><div class="item left adresse">90 AVENUE DU MAINE<br />75014 PARIS</div><div class="clear"></div></div><div class="clear"></div></div></div><div class="item-professionnel"><div class="item-professionnel-inner"><span class="num">12</span><div class="nom_pictos"><h2><a href="/professionnels-de-sante/recherche-1/fiche-detaillee-B7c1ljI2NTa3-f37e8ccd9299ffd0512f6451db3292f5.html"><strong>FELLER</strong> MICHEL</a></h2><div class="pictos"></div><div class="clear"></div></div><div class="clear"></div><div class="elements"><div class="item left"></div><div class="item right type_honoraires">Honoraires libres</div><div class="clear"></div><div class="item left tel">01 43 35 08 28</div><div class="item right convention"><a href="#" class="infobulle" alt="Les m\xe9decins fixent librement leurs tarifs et peuvent donc pratiquer des d\xe9passements d\u2019honoraires avec tact et mesure. L\u2019Assurance Maladie rembourse les consultations et actes r\xe9alis\xe9s par ces m\xe9decins sur la base des tarifs fix\xe9s dans la convention (tarifs applicables au m\xe9decin de secteur 2), le montant des \xe9ventuels d\xe9passements d\u2019honoraires reste \xe0 votre charge." >Conventionn\xe9 secteur 2</a></div><div class="clear"></div><div class="item left adresse">118 BOULEVARD MONTPARNASSE<br />75014 PARIS</div><div class="clear"></div></div><div class="clear"></div></div></div><div class="item-professionnel"><div class="item-professionnel-inner"><span class="num">13</span><div class="nom_pictos"><h2><a href="/professionnels-de-sante/recherche-1/fiche-detaillee-B7c1lTM1MTWz-f37e8ccd9299ffd0512f6451db3292f5.html"><strong>CHASSIGNOL</strong> ALEXIS</a></h2><div class="pictos"><img alt="Accepte la carte Vitale" src="/resources_ver/20150826115145/images/picto_cartevitale.png" class="infobulle"/><img alt="Ce professionnel de sant\xe9 a indiqu\xe9 ses horaires" src="/resources_ver/20150826115145/images/horaires_gris.png" class="infobulle"/></div><div class="clear"></div></div><div class="clear"></div><div class="elements"><div class="item left"></div><div class="item right type_honoraires">Honoraires libres</div><div class="clear"></div><div class="item left tel">01 43 27 10 69</div><div class="item right convention"><a href="#" class="infobulle" alt="Les m\xe9decins fixent librement leurs tarifs et peuvent donc pratiquer des d\xe9passements d\u2019honoraires avec tact et mesure. L\u2019Assurance Maladie rembourse les consultations et actes r\xe9alis\xe9s par ces m\xe9decins sur la base des tarifs fix\xe9s dans la convention (tarifs applicables au m\xe9decin de secteur 2), le montant des \xe9ventuels d\xe9passements d\u2019honoraires reste \xe0 votre charge." >Conventionn\xe9 secteur 2</a></div><div class="clear"></div><div class="item left adresse">SELARL CHASSIGNOL VAN WENT<br />79 AVENUE DU GENERAL LECLERC<br />75014 PARIS</div><div class="clear"></div></div><div class="clear"></div></div></div><div class="item-professionnel"><div class="item-professionnel-inner"><span class="num">14</span><div class="nom_pictos"><h2><a href="/professionnels-de-sante/recherche-1/fiche-detaillee-B7c1kDsyMDux-f37e8ccd9299ffd0512f6451db3292f5.html"><strong>MEYER</strong> MARIE CLAUDE</a></h2><div class="pictos"></div><div class="clear"></div></div><div class="clear"></div><div class="elements"><div class="item left"></div><div class="item right type_honoraires">Honoraires libres</div><div class="clear"></div><div class="item left tel">01 43 20 62 55</div><div class="item right convention"><a href="#" class="infobulle" alt="Les m\xe9decins fixent librement leurs tarifs et peuvent donc pratiquer des d\xe9passements d\u2019honoraires avec tact et mesure. L\u2019Assurance Maladie rembourse les consultations et actes r\xe9alis\xe9s par ces m\xe9decins sur la base des tarifs fix\xe9s dans la convention (tarifs applicables au m\xe9decin de secteur 2), le montant des \xe9ventuels d\xe9passements d\u2019honoraires reste \xe0 votre charge." >Conventionn\xe9 secteur 2</a></div><div class="clear"></div><div class="item left adresse">29 BOULEVARD E.QUINET<br />75014 PARIS</div><div class="clear"></div></div><div class="clear"></div></div></div><div class="item-professionnel"><div class="item-professionnel-inner"><span class="num">15</span><div class="nom_pictos"><h2><a href="/professionnels-de-sante/recherche-1/fiche-detaillee-B7c1ljUyMjS3-f37e8ccd9299ffd0512f6451db3292f5.html"><strong>KRETZ</strong> GILLES</a></h2><div class="pictos"><img alt="Accepte la carte Vitale" src="/resources_ver/20150826115145/images/picto_cartevitale.png" class="infobulle"/></div><div class="clear"></div></div><div class="clear"></div><div class="elements"><div class="item left"></div><div class="item right type_honoraires">Honoraires libres</div><div class="clear"></div><div class="item left tel">01 40 44 65 30</div><div class="item right convention"><a href="#" class="infobulle" alt="Les m\xe9decins fixent librement leurs tarifs et peuvent donc pratiquer des d\xe9passements d\u2019honoraires avec tact et mesure. L\u2019Assurance Maladie rembourse les consultations et actes r\xe9alis\xe9s par ces m\xe9decins sur la base des tarifs fix\xe9s dans la convention (tarifs applicables au m\xe9decin de secteur 2), le montant des \xe9ventuels d\xe9passements d\u2019honoraires reste \xe0 votre charge." >Conventionn\xe9 secteur 2</a></div><div class="clear"></div><div class="item left adresse">150 RUE R LOSSERAND<br />75014 PARIS</div><div class="clear"></div></div><div class="clear"></div></div></div><div class="item-professionnel"><div class="item-professionnel-inner"><span class="num">16</span><div class="nom_pictos"><h2><a href="/professionnels-de-sante/recherche-1/fiche-detaillee-B7c1lTM1OTS3-f37e8ccd9299ffd0512f6451db3292f5.html"><strong>PUECH</strong> MICHEL</a></h2><div class="pictos"><img alt="Accepte la carte Vitale" src="/resources_ver/20150826115145/images/picto_cartevitale.png" class="infobulle"/></div><div class="clear"></div></div><div class="clear"></div><div class="elements"><div class="item left"></div><div class="item right type_honoraires">Honoraires libres</div><div class="clear"></div><div class="item left"></div><div class="item right convention"><a href="#" class="infobulle" alt="Les m\xe9decins fixent librement leurs tarifs et peuvent donc pratiquer des d\xe9passements d\u2019honoraires avec tact et mesure. L\u2019Assurance Maladie rembourse les consultations et actes r\xe9alis\xe9s par ces m\xe9decins sur la base des tarifs fix\xe9s dans la convention (tarifs applicables au m\xe9decin de secteur 2), le montant des \xe9ventuels d\xe9passements d\u2019honoraires reste \xe0 votre charge." >Conventionn\xe9 secteur 2</a></div><div class="clear"></div><div class="item left adresse">SELARL DU DR MICHEL PUECH<br />7 RUE BOISSONADE<br />75014 PARIS</div><div class="clear"></div></div><div class="clear"></div></div></div><div class="item-professionnel"><div class="item-professionnel-inner"><span class="num">17</span><div class="nom_pictos"><h2><a href="/professionnels-de-sante/recherche-1/fiche-detaillee-B7c1lTIzNDu7-f37e8ccd9299ffd0512f6451db3292f5.html"><strong>WERTHEL</strong> ANDREE LUCE</a></h2><div class="pictos"><img alt="Accepte la carte Vitale" src="/resources_ver/20150826115145/images/picto_cartevitale.png" class="infobulle"/></div><div class="clear"></div></div><div class="clear"></div><div class="elements"><div class="item left"></div><div class="item right type_honoraires">Honoraires libres</div><div class="clear"></div><div class="item left tel">01 45 42 75 74</div><div class="item right convention"><a href="#" class="infobulle" alt="Les m\xe9decins fixent librement leurs tarifs et peuvent donc pratiquer des d\xe9passements d\u2019honoraires avec tact et mesure. L\u2019Assurance Maladie rembourse les consultations et actes r\xe9alis\xe9s par ces m\xe9decins sur la base des tarifs fix\xe9s dans la convention (tarifs applicables au m\xe9decin de secteur 2), le montant des \xe9ventuels d\xe9passements d\u2019honoraires reste \xe0 votre charge." >Conventionn\xe9 secteur 2</a></div><div class="clear"></div><div class="item left adresse">24 AVENUE VILLEMAIN<br />75014 PARIS</div><div class="clear"></div></div><div class="clear"></div></div></div><div class="item-professionnel"><div class="item-professionnel-inner"><span class="num">18</span><div class="nom_pictos"><h2><a href="/professionnels-de-sante/recherche-1/fiche-detaillee-B7c1mjMzMDe6-f37e8ccd9299ffd0512f6451db3292f5.html"><strong>MAGNANI</strong> MATTEO</a></h2><div class="pictos"><img alt="Accepte la carte Vitale" src="/resources_ver/20150826115145/images/picto_cartevitale.png" class="infobulle"/></div><div class="clear"></div></div><div class="clear"></div><div class="elements"><div class="item left"></div><div class="item right type_honoraires">Honoraires libres</div><div class="clear"></div><div class="item left"></div><div class="item right convention"><a href="#" class="infobulle" alt="Les m\xe9decins fixent librement leurs tarifs et peuvent donc pratiquer des d\xe9passements d\u2019honoraires avec tact et mesure. L\u2019Assurance Maladie rembourse les consultations et actes r\xe9alis\xe9s par ces m\xe9decins sur la base des tarifs fix\xe9s dans la convention (tarifs applicables au m\xe9decin de secteur 2), le montant des \xe9ventuels d\xe9passements d\u2019honoraires reste \xe0 votre charge." >Conventionn\xe9 secteur 2</a></div><div class="clear"></div><div class="item left adresse">29 RUE SARRETTE.<br />75014 PARIS</div><div class="clear"></div></div><div class="clear"></div></div></div><div class="item-professionnel"><div class="item-professionnel-inner"><span class="num">19</span><div class="nom_pictos"><h2><a href="/professionnels-de-sante/recherche-1/fiche-detaillee-B7c1mzE5MDa2-f37e8ccd9299ffd0512f6451db3292f5.html"><strong>GIRARD DECIS</strong> ANAIS</a></h2><div class="pictos"><img alt="Accepte la carte Vitale" src="/resources_ver/20150826115145/images/picto_cartevitale.png" class="infobulle"/></div><div class="clear"></div></div><div class="clear"></div><div class="elements"><div class="item left"></div><div class="item right type_honoraires">Honoraires libres</div><div class="clear"></div><div class="item left"></div><div class="item right convention"><a href="#" class="infobulle" alt="Les m\xe9decins fixent librement leurs tarifs et peuvent donc pratiquer des d\xe9passements d\u2019honoraires avec tact et mesure. L\u2019Assurance Maladie rembourse les consultations et actes r\xe9alis\xe9s par ces m\xe9decins sur la base des tarifs fix\xe9s dans la convention (tarifs applicables au m\xe9decin de secteur 2), le montant des \xe9ventuels d\xe9passements d\u2019honoraires reste \xe0 votre charge." >Conventionn\xe9 secteur 2</a></div><div class="clear"></div><div class="item left adresse">244 BOULEVARD RASPAIL<br />75014 PARIS</div><div class="clear"></div></div><div class="clear"></div></div></div><div class="item-professionnel"><div class="item-professionnel-inner"><span class="num">20</span><div class="nom_pictos"><h2><a href="/professionnels-de-sante/recherche-1/fiche-detaillee-B7c1ljc4NjG1-f37e8ccd9299ffd0512f6451db3292f5.html"><strong>KELLER</strong> PIERRE</a></h2><div class="pictos"><img alt="Accepte la carte Vitale" src="/resources_ver/20150826115145/images/picto_cartevitale.png" class="infobulle"/></div><div class="clear"></div></div><div class="clear"></div><div class="elements"><div class="item left"></div><div class="item right type_honoraires">Honoraires libres</div><div class="clear"></div><div class="item left tel">01 43 35 43 33</div><div class="item right convention"><a href="#" class="infobulle" alt="Les m\xe9decins fixent librement leurs tarifs et peuvent donc pratiquer des d\xe9passements d\u2019honoraires avec tact et mesure. L\u2019Assurance Maladie rembourse les consultations et actes r\xe9alis\xe9s par ces m\xe9decins sur la base des tarifs fix\xe9s dans la convention (tarifs applicables au m\xe9decin de secteur 2), le montant des \xe9ventuels d\xe9passements d\u2019honoraires reste \xe0 votre charge." >Conventionn\xe9 secteur 2</a></div><div class="clear"></div><div class="item left adresse">3 RUE VICTOR CONSIDERANT<br />75014 PARIS</div><div class="clear"></div></div><div class="clear"></div></div></div> </div>\n <div class="tri">\n <form id="form_tri_bas" action="">\n <label for="form_tri_select">Trier par</label>\n <select id="form_tri_select" name="sorting" onchange="document.getElementById(\'form_tri_bas\').submit()">\n \t<option value="aleatoire"> - </option> <option value="nom_asc">Nom</option>\n \t <option value="carte-vitale_desc">Carte Vitale</option>\n \t <option value="secteur_asc">Type d'honoraires</option>\n \t </select>\n </form>\n </div>\n <div class="pagination">\n\t<form method="post" action="/professionnels-de-sante/recherche-1/liste-resultats-page-1-par_page-20-tri-aleatoire-f37e8ccd9299ffd0512f6451db3292f5.html"> \n\t\t Page <input type="text" name="pageCible" value="1" /> sur 2<a href="/professionnels-de-sante/recherche-1/liste-resultats-page-2-par_page-20-tri-aleatoire-f37e8ccd9299ffd0512f6451db3292f5.html"><img src="/resources_ver/20150826115145/images/pagination_next.png" alt="Page suivante" /></a><a href="/professionnels-de-sante/recherche-1/liste-resultats-page-2-par_page-20-tri-aleatoire-f37e8ccd9299ffd0512f6451db3292f5.html"><img src="/resources_ver/20150826115145/images/pagination_last.png" alt=" - Aller \xe0 la derni\xe8re page" /></a>\t</form>\n</div>\n <div class="clear"></div>\n\t</div>\n\t<div id="bascadre"></div>\n</div>\n<div class="clear"></div> \t</div>\n \t<div id="footer">\n \t\t<div class="mention">L\'utilisation du service offert sur ce site est soumise au respect des conditions d\'utilisation. Toute reproduction int\xe9grale ou partielle des contenus, donn\xe9es et informations disponibles est illicite et peut donner lieu \xe0 des sanctions.</div>\n \t <div class="liens">\n\t\t\t\t<h2>Les autres sites de l\'Assurance Maladie</h2>\n\t\t\t\t<div class="site"><a href="http://www.ameli.fr" target="_blank" rel="nofollow" title="Ameli.fr : je m\'informe sur mes droits et mes d\xe9marches (nouvelle fen\xeatre)"><img src="/resources_ver/20150826115145/images/footer_ameli.png" alt="ameli.fr" /></a><br/>Je m\'informe sur mes droits et mes d\xe9marches</div>\n\t\t\t\t<div class="site"><a href="http://www.ameli-sante.fr" target="_blank" rel="nofollow" title="Ameli-sant\xe9.fr : Ma r\xe9f\xe9rence en information sant\xe9 (nouvelle fen\xeatre)"><img src="/resources_ver/20150826115145/images/footer_sante.png" alt="ameli-sante.fr" /></a><br/>Je m\'informe sur ma sant\xe9</div>\n\t\t\t\t<div class="site"><a href="http://www.ameli-sophia.fr" target="_blank" rel="nofollow" title="ameli-sophia (nouvelle fen\xeatre)"><img src="/resources_ver/20150826115145/images/footer_sophia.png" alt="ameli-sophia.fr" /></a><br/>Le service d\'accompagnement pour mieux vivre avec une maladie chronique</div>\n\t\t\t</div>\n\t\t\t<div class="clear"></div>\n \t\t<div class="liens-transverse"> | <a href="/fenetre-modale-xhr/dispositions_generales.html?width=700&modal=true" class="thickbox" title="Dispositions g\xe9n\xe9rales">Dispositions g\xe9n\xe9rales</a> | <a href="/fenetre-modale-xhr/mentions_legales.html?width=700&modal=true" class="thickbox" title="Mentions l\xe9gales">Mentions l\xe9gales</a></div>\n \t</div>\n </div>\n<!-- Version OW040304X -->\n<script type="text/javascript">\n<!--\nxtnv = document; //parent.document or top.document or document \nxtsd = "http://logi7";\nxtsite = "475098";\nxtn2 = "2"; // level 2 site \nxtpage = "ameli-direct-externe::liste-resultats-ps"; //page name (with the use of :: to create chapters)\nxtdi = ""; //implication degree\n//-->\n</script>\n<script type="text/javascript" src="/resources_ver/20150826115145/js/xtcore.js"></script>\n<noscript>\n<img width="1" height="1" alt="" src="http://logi7.xiti.com/hit.xiti?s=475098&s2=1&p=ameli-direct-externe::liste-resultats-ps&di=&" />\n</noscript></body>\n</html>\n'
Good, the first part of our work is done!
Let's use beautiful soup to parse the document structure. There's a great documentation here: http://www.crummy.com/software/BeautifulSoup/bs4/doc/.
import bs4
from bs4 import BeautifulSoup
soup = BeautifulSoup(r.text, 'html.parser')
BS gives us an easy access to most things from the structure.
soup.title
<title>Annuaire santé d'ameli.fr : trouver un médecin, un hôpital...</title>
We can find tags easily.
soup.findAll('strong')
[<strong>LE QUOY</strong>, <strong>SELLAM</strong>, <strong>BINN DEUTSCHER</strong>, <strong>CHAMOUNI</strong>, <strong>CHARLOT</strong>, <strong>COMMEAU</strong>, <strong>VAN WENT</strong>, <strong>THAN TRONG</strong>, <strong>BREZIN</strong>, <strong>SULMAN</strong>, <strong>FELLER</strong>, <strong>CHASSIGNOL</strong>, <strong>MEYER</strong>, <strong>KRETZ</strong>, <strong>PUECH</strong>, <strong>WERTHEL</strong>, <strong>MAGNANI</strong>, <strong>GIRARD DECIS</strong>, <strong>KELLER</strong>]
All doctors can be found like this:
doctors = soup.findAll('div', attrs={"class":"item-professionnel"})
A single doctor looks like this.
doctors[0]
<div class="item-professionnel"><div class="item-professionnel-inner"><span class="num">1</span><div class="nom_pictos"><h2><a href="/professionnels-de-sante/recherche-1/fiche-detaillee-B7c1ljU3MjKz-f37e8ccd9299ffd0512f6451db3292f5.html"><strong>LE QUOY</strong> OLIVIER</a></h2><div class="pictos"></div><div class="clear"></div></div><div class="clear"></div><div class="elements"><div class="item left"></div><div class="item right type_honoraires">Honoraires libres</div><div class="clear"></div><div class="item left tel">01 43 35 31 48</div><div class="item right convention"><a alt="Les médecins fixent librement leurs tarifs et peuvent donc pratiquer des dépassements d’honoraires avec tact et mesure. L’Assurance Maladie rembourse les consultations et actes réalisés par ces médecins sur la base des tarifs fixés dans la convention (tarifs applicables au médecin de secteur 2), le montant des éventuels dépassements d’honoraires reste à votre charge." class="infobulle" href="#">Conventionné secteur 2</a></div><div class="clear"></div><div class="item left adresse">29 RUE D ALESIA<br/>75014 PARIS</div><div class="clear"></div></div><div class="clear"></div></div></div>
len(doctors)
20
Let's write a function that allows us to extract just the things we want.
block = doctors[0]
print(block.prettify())
<div class="item-professionnel"> <div class="item-professionnel-inner"> <span class="num"> 1 </span> <div class="nom_pictos"> <h2> <a href="/professionnels-de-sante/recherche-1/fiche-detaillee-B7c1ljU3MjKz-f37e8ccd9299ffd0512f6451db3292f5.html"> <strong> LE QUOY </strong> OLIVIER </a> </h2> <div class="pictos"> </div> <div class="clear"> </div> </div> <div class="clear"> </div> <div class="elements"> <div class="item left"> </div> <div class="item right type_honoraires"> Honoraires libres </div> <div class="clear"> </div> <div class="item left tel"> 01 43 35 31 48 </div> <div class="item right convention"> <a alt="Les médecins fixent librement leurs tarifs et peuvent donc pratiquer des dépassements d’honoraires avec tact et mesure. L’Assurance Maladie rembourse les consultations et actes réalisés par ces médecins sur la base des tarifs fixés dans la convention (tarifs applicables au médecin de secteur 2), le montant des éventuels dépassements d’honoraires reste à votre charge." class="infobulle" href="#"> Conventionné secteur 2 </a> </div> <div class="clear"> </div> <div class="item left adresse"> 29 RUE D ALESIA <br/> 75014 PARIS </div> <div class="clear"> </div> </div> <div class="clear"> </div> </div> </div>
block.find('h2').text
u'LE QUOY OLIVIER'
name = block.find('h2')
[text for text in name.stripped_strings]
[u'LE QUOY', u'OLIVIER']
adr = block.find("div", attrs={'class':"item left adresse"})
[text for text in adr.stripped_strings]
[u'29 RUE D ALESIA', u'75014 PARIS']
adr.get_text()
u'29 RUE D ALESIA75014 PARIS'
adr.get_text(' ')
u'29 RUE D ALESIA 75014 PARIS'
block.find("div", attrs={'class':"item left tel"}).text
u'01\xa043\xa035\xa031\xa048'
block.find("div", attrs={'class':"item right type_honoraires"}).text
u'Honoraires libres'
block.find("div", attrs={'class':"item right convention"}).text
u'Conventionn\xe9 secteur 2'
def extract_information(block):
name = block.find('h2')
address = block.find("div", attrs={'class':"item left adresse"})
phone = block.find("div", attrs={'class':"item left tel"})
prices = block.find("div", attrs={'class':"item right type_honoraires"})
convention = block.find("div", attrs={'class':"item right convention"})
return [item.get_text(' ') for item in [name, address, phone, prices, convention] if item is not None]
for doc in doctors:
print(extract_information(doc))
[u'LE QUOY OLIVIER', u'29 RUE D ALESIA 75014 PARIS', u'01\xa043\xa035\xa031\xa048', u'Honoraires libres', u'Conventionn\xe9 secteur 2'] [u'SELLAM MICKAEL', u'CLINIQUE STE GENEVIEVE 29 RUE SARRETTE 75014 PARIS', u'Honoraires libres', u'Conventionn\xe9 secteur 2'] [u'BINN DEUTSCHER SYLVIE', u'12 RUE DE LA TOMBE ISSOIRE 75014 PARIS', u'01\xa045\xa065\xa004\xa024', u'Honoraires libres', u'Conventionn\xe9 secteur 2'] [u'CHAMOUNI HUBERT', u'95 AVENUE DU GAL LECLERC 75014 PARIS', u'Honoraires libres', u'Conventionn\xe9 secteur 2'] [u'CHARLOT JEAN CLAUDE', u'228 BOULEVARD RASPAIL 75014 PARIS', u'01\xa043\xa022\xa042\xa033', u'Honoraires libres', u'Conventionn\xe9 secteur 2'] [u'COMMEAU DOMINIQUE', u'22 RUE ERNEST CRESSON 75014 PARIS', u'01\xa045\xa041\xa073\xa063', u'Honoraires libres', u'Conventionn\xe9 secteur 2'] [u'VAN WENT CHARLES', u'SELARL CHASSIGNOL VAN WENT 79 AVENUE DU GENERAL LECLERC 75014 PARIS', u'Honoraires libres', u'Conventionn\xe9 secteur 2'] [u'THAN TRONG THONG', u'10 RUE DAGUERRE 75014 PARIS', u'01\xa043\xa035\xa041\xa003', u'Honoraires libres', u'Conventionn\xe9 secteur 2'] [u'CTRE SANTE MEDICAL DENTAIRE TISSERAND', u'CTRE SANTE MEDICAL DENTAIRE TISSERAND C A S VILLE DE PARIS 134 RUE D ALESIA 75014 PARIS'] [u'BREZIN ANTOINE', u'HOPITAL COCHIN 27 RUE DU FBG SAINT JACQUES 75014 PARIS', u'01\xa058\xa041\xa022\xa000', u'Honoraires libres', u'Conventionn\xe9 secteur 2'] [u'SULMAN JEAN JACQUES', u'90 AVENUE DU MAINE 75014 PARIS', u'01\xa040\xa047\xa000\xa000', u'Honoraires libres', u'Conventionn\xe9 secteur 2'] [u'FELLER MICHEL', u'118 BOULEVARD MONTPARNASSE 75014 PARIS', u'01\xa043\xa035\xa008\xa028', u'Honoraires libres', u'Conventionn\xe9 secteur 2'] [u'CHASSIGNOL ALEXIS', u'SELARL CHASSIGNOL VAN WENT 79 AVENUE DU GENERAL LECLERC 75014 PARIS', u'01\xa043\xa027\xa010\xa069', u'Honoraires libres', u'Conventionn\xe9 secteur 2'] [u'MEYER MARIE CLAUDE', u'29 BOULEVARD E.QUINET 75014 PARIS', u'01\xa043\xa020\xa062\xa055', u'Honoraires libres', u'Conventionn\xe9 secteur 2'] [u'KRETZ GILLES', u'150 RUE R LOSSERAND 75014 PARIS', u'01\xa040\xa044\xa065\xa030', u'Honoraires libres', u'Conventionn\xe9 secteur 2'] [u'PUECH MICHEL', u'SELARL DU DR MICHEL PUECH 7 RUE BOISSONADE 75014 PARIS', u'Honoraires libres', u'Conventionn\xe9 secteur 2'] [u'WERTHEL ANDREE LUCE', u'24 AVENUE VILLEMAIN 75014 PARIS', u'01\xa045\xa042\xa075\xa074', u'Honoraires libres', u'Conventionn\xe9 secteur 2'] [u'MAGNANI MATTEO', u'29 RUE SARRETTE. 75014 PARIS', u'Honoraires libres', u'Conventionn\xe9 secteur 2'] [u'GIRARD DECIS ANAIS', u'244 BOULEVARD RASPAIL 75014 PARIS', u'Honoraires libres', u'Conventionn\xe9 secteur 2'] [u'KELLER PIERRE', u'3 RUE VICTOR CONSIDERANT 75014 PARIS', u'01\xa043\xa035\xa043\xa033', u'Honoraires libres', u'Conventionn\xe9 secteur 2']
import pandas as pd
pd.DataFrame([extract_information(doc) for doc in doctors])
0 | 1 | 2 | 3 | 4 | |
---|---|---|---|---|---|
0 | LE QUOY OLIVIER | 29 RUE D ALESIA 75014 PARIS | 01 43 35 31 48 | Honoraires libres | Conventionné secteur 2 |
1 | SELLAM MICKAEL | CLINIQUE STE GENEVIEVE 29 RUE SARRETTE 75014 P... | Honoraires libres | Conventionné secteur 2 | None |
2 | BINN DEUTSCHER SYLVIE | 12 RUE DE LA TOMBE ISSOIRE 75014 PARIS | 01 45 65 04 24 | Honoraires libres | Conventionné secteur 2 |
3 | CHAMOUNI HUBERT | 95 AVENUE DU GAL LECLERC 75014 PARIS | Honoraires libres | Conventionné secteur 2 | None |
4 | CHARLOT JEAN CLAUDE | 228 BOULEVARD RASPAIL 75014 PARIS | 01 43 22 42 33 | Honoraires libres | Conventionné secteur 2 |
5 | COMMEAU DOMINIQUE | 22 RUE ERNEST CRESSON 75014 PARIS | 01 45 41 73 63 | Honoraires libres | Conventionné secteur 2 |
6 | VAN WENT CHARLES | SELARL CHASSIGNOL VAN WENT 79 AVENUE DU GENERA... | Honoraires libres | Conventionné secteur 2 | None |
7 | THAN TRONG THONG | 10 RUE DAGUERRE 75014 PARIS | 01 43 35 41 03 | Honoraires libres | Conventionné secteur 2 |
8 | CTRE SANTE MEDICAL DENTAIRE TISSERAND | CTRE SANTE MEDICAL DENTAIRE TISSERAND C A S VI... | None | None | None |
9 | BREZIN ANTOINE | HOPITAL COCHIN 27 RUE DU FBG SAINT JACQUES 750... | 01 58 41 22 00 | Honoraires libres | Conventionné secteur 2 |
10 | SULMAN JEAN JACQUES | 90 AVENUE DU MAINE 75014 PARIS | 01 40 47 00 00 | Honoraires libres | Conventionné secteur 2 |
11 | FELLER MICHEL | 118 BOULEVARD MONTPARNASSE 75014 PARIS | 01 43 35 08 28 | Honoraires libres | Conventionné secteur 2 |
12 | CHASSIGNOL ALEXIS | SELARL CHASSIGNOL VAN WENT 79 AVENUE DU GENERA... | 01 43 27 10 69 | Honoraires libres | Conventionné secteur 2 |
13 | MEYER MARIE CLAUDE | 29 BOULEVARD E.QUINET 75014 PARIS | 01 43 20 62 55 | Honoraires libres | Conventionné secteur 2 |
14 | KRETZ GILLES | 150 RUE R LOSSERAND 75014 PARIS | 01 40 44 65 30 | Honoraires libres | Conventionné secteur 2 |
15 | PUECH MICHEL | SELARL DU DR MICHEL PUECH 7 RUE BOISSONADE 750... | Honoraires libres | Conventionné secteur 2 | None |
16 | WERTHEL ANDREE LUCE | 24 AVENUE VILLEMAIN 75014 PARIS | 01 45 42 75 74 | Honoraires libres | Conventionné secteur 2 |
17 | MAGNANI MATTEO | 29 RUE SARRETTE. 75014 PARIS | Honoraires libres | Conventionné secteur 2 | None |
18 | GIRARD DECIS ANAIS | 244 BOULEVARD RASPAIL 75014 PARIS | Honoraires libres | Conventionné secteur 2 | None |
19 | KELLER PIERRE | 3 RUE VICTOR CONSIDERANT 75014 PARIS | 01 43 35 43 33 | Honoraires libres | Conventionné secteur 2 |
If there are more than 20 results for a given query, you only get them 20 by 20. The idea is to read this information from the first source and then perform the additional queries needed.
r.headers
{'content-encoding': 'gzip', 'transfer-encoding': 'chunked', 'expires': 'Mon, 19 Oct 2015 13:37:12 GMT', 'vary': 'Accept-Encoding', 'connection': 'close', 'pragma': 'no-cache', 'cache-control': 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0', 'date': 'Mon, 19 Oct 2015 12:37:13 GMT', 'x-powered-by': 'Zend Framework 1.12.3', 'content-type': 'text/html; charset=UTF-8'}
r.request.headers
{'Connection': 'keep-alive', 'Cookie': 'TS01b76c1f=0139dce0d28a9787802f747bcf08b6311fb05ccb4900b3de48d0dd0cef0edb971ad476c5f5d562a2319762d297a76ee857a78f2b93d3e5edc3568d2fa9675da7728b624e5a; infosoins=qbm8t56jclinm2kcdduqs51dc1; AmeliDirectPersist=359719223.20480.0000', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36'}
The URL containing the next doctors can be found in the request url.
r.url
u'http://ameli-direct.ameli.fr/professionnels-de-sante/recherche-1/liste-resultats-page-1-par_page-20-tri-aleatoire-f37e8ccd9299ffd0512f6451db3292f5.html'
We can also find the number of doctors found in the body of the previous request.
soup = BeautifulSoup(r.text)
tags = soup.find_all(name="h1")
tags
[<h1><img alt="Annuaire santé" class="logosite" src="/resources_ver/20150826115145/images/accueil/logo_amelidirect.png"/></h1>, <h1>26 résultats correspondent à votre recherche</h1>]
for tag in tags:
if tag.string is not None:
print(tag.string)
26 résultats correspondent à votre recherche
p = re.compile(u"(\d+) résultats correspondent à votre recherche")
for tag in tags:
if tag.string is not None:
print(p.findall(tag.string)[0])
26
def extract_number_of_doctors(soup):
p = re.compile(u"(\d+) résultats correspondent à votre recherche")
tags = soup.find_all(name="h1")
for tag in tags:
if tag.string is not None:
return int(p.findall(tag.string)[0])
return 0
extract_number_of_doctors(soup)
26
Now, we can automate the process of fetching pages. Here, we need to go until 26 doctors, so the number of pages to retrieve is 2.
import math
for pagenumber in range(1, int(math.ceil(extract_number_of_doctors(soup) / 20.)) + 1):
print pagenumber
1 2
r.url
u'http://ameli-direct.ameli.fr/professionnels-de-sante/recherche-1/liste-resultats-page-1-par_page-20-tri-aleatoire-f37e8ccd9299ffd0512f6451db3292f5.html'
for pagenumber in range(1, int(math.ceil(extract_number_of_doctors(soup) / 20.)) + 1):
print(r.url.replace("liste-resultats-page-1-par_page-20", "liste-resultats-page-{}-par_page-20").format(pagenumber))
http://ameli-direct.ameli.fr/professionnels-de-sante/recherche-1/liste-resultats-page-1-par_page-20-tri-aleatoire-f37e8ccd9299ffd0512f6451db3292f5.html http://ameli-direct.ameli.fr/professionnels-de-sante/recherche-1/liste-resultats-page-2-par_page-20-tri-aleatoire-f37e8ccd9299ffd0512f6451db3292f5.html
r2 = s.post(r.url.replace("liste-resultats-page-1-par_page-20", "liste-resultats-page-{}-par_page-20").format(2))
r2
<Response [200]>
r2.text
u'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">\n<head>\n\t<title>Annuaire sant\xe9 d\'ameli.fr : trouver un m\xe9decin, un h\xf4pital...</title>\n\t<meta name="description" content="L\u2019annuaire sant\xe9 de l\u2019Assurance Maladie pour trouver un m\xe9decin, un kin\xe9, un h\xf4pital\u2026 Tarifs \u2013 Horaires \u2013 Sp\xe9cialit\xe9s - Localisation" />\n\t<meta http-equiv="X-UA-Compatible" content="IE=edge">\n<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />\n<meta name="robots" content="noindex, nofollow" /><link href="/resources_ver/20150826115145/css/print_new.css" media="print" rel="stylesheet" type="text/css" />\n<link href="/resources_ver/20150826115145/css/jquery.qtip.css" media="screen" rel="stylesheet" type="text/css" />\n<link href="/resources_ver/20150826115145/css/styles_new.css" media="screen" rel="stylesheet" type="text/css" />\n<link href="/resources_ver/20150826115145/css/ui-lightness/jquery-ui-1.10.3.custom.min.css" media="all" rel="stylesheet" type="text/css" />\n<link href="http://fonts.googleapis.com/css?family=Droid+Sans:700,400" media="all" rel="stylesheet" type="text/css" />\n<link href="/resources_ver/20150826115145/css/geoportail.css" media="all" rel="stylesheet" type="text/css" />\n<!--[if IE]> <link href="/resources_ver/20150826115145/css/styles_ie_new.css" media="screen" rel="stylesheet" type="text/css" /><![endif]-->\n<!--[if IE 7]> <link href="/resources_ver/20150826115145/css/styles_ie7.css" media="screen" rel="stylesheet" type="text/css" /><![endif]--><script type="text/javascript" src="/resources_ver/20150826115145/js/jquery-1.10.2.min.js"></script>\n<script type="text/javascript" src="/resources_ver/20150826115145/js/jquery-ui-1.10.3.custom.min.js"></script>\n<script type="text/javascript" src="http://api.ign.fr/geoportail/api/js/latest/GeoportalExtended.js"></script>\n<script type="text/javascript" src="/resources_ver/20150826115145/js/geoportail.utils.js"></script>\n<script type="text/javascript" src="/resources_ver/20150826115145/js/jquery.popin.40.js"></script>\n<script type="text/javascript" src="/resources_ver/20150826115145/js/selectmenu.uncompressed.js"></script>\n<script type="text/javascript" src="/resources_ver/20150826115145/js/jquery.qtip.js"></script>\n<script type="text/javascript" src="/resources_ver/20150826115145/js/BrowserDetect.js"></script>\n<script type="text/javascript" src="/resources_ver/20150826115145/js/scripts.uncompressed.js"></script></head>\n<body>\n<div id="site" >\n\t<div id="entete">\n\t<a href="/" title=""><img class="logoam" alt="L\'Assurance Maladie" src="/resources_ver/20150826115145/images/accueil/logo_am.png"/></a>\n\t<h1><img src="/resources_ver/20150826115145/images/accueil/logo_amelidirect.png" alt="Annuaire sant\xe9" class="logosite" /></h1>\n\t<img src="/resources_ver/20150826115145/images/accueil/liner.gif" alt="Je m\'informe avant de consulter" class="liner" />\n\t <div class="encart_haut_ameli">\n\t\t<div class="acces">\n\t\t\t<a target="_blank" href="https://assure.ameli.fr/" >Acc\xe9der \xe0 mon compte</a>\n\t\t\t\t</div>\n\t\t<div class="ouvrir">\n\t\t\t<a target="_blank" href="https://assure.ameli.fr/">Ouvrir mon compte</a>\n\t\t</div>\n\t</div>\n</div>\t \t<div id="site_inner" >\n \t\t<div id="filariane" class="ariane">\n \t\t\t<p><span><a href="/">Accueil</a></span> > <span><a href="/nouvelle-recherche/professionnels-de-sante.html">Professionnels de sant\xe9</a></span> > <span>R\xe9sultats de la recherche</span></p>\n \t\t</div>\n \t\t<div class="print-result impression"><a href="?print" target="_blank">Imprimer la liste de r\xe9sultats</a></div>\n<div class="clear"></div>\n<div class="recapitulatif">\n\t<div class="recapitulatif-inner">\n\t \t<div class="infos">\n <div class="boutons">\n <a href="/modifier_votre_recherche_1.html">\n \t <span><span>Modifier votre recherche</span></span>\n </a>\n <a href="/nouvelle-recherche/professionnels-de-sante.html" class="loupe">\n <span><span>Nouvelle recherche</span></span>\n </a>\n </div>\n <h1>26 r\xe9sultats correspondent \xe0 votre recherche</h1>\n <ul>\n \t<li>Profession : Ophtalmologiste</li>\n <li>Lieu : 75014</li>\n </ul>\n <div class="mention">Dans la liste ci-dessous, ne figurent que les professionnels de sant\xe9 qui exercent une activit\xe9 lib\xe9rale et les centres de sant\xe9.</div>\n </div> \n <div class="carte"><a href="/carte-1-f37e8ccd9299ffd0512f6451db3292f5.html" class="modaleCarteLink"><img src="/resources_ver/20150826115145/images/lien_carte.png" alt="Voir les r\xe9sultats sur une carte" /></a></div>\t\t<div class="clear"></div>\n\t</div>\n</div>\n<div class="liste-criteres">\n\t \t \t<div class="bloc-critere">\n \t\t<div class="bloc-haut-critere"></div>\n \t\t<a class="infos" href="/fenetre-modale-xhr/information_facette_type_honoraires.html"><img src="/resources_ver/20150826115145/images/picto_info.gif" alt="Infos" /></a>\n \t\t<h2><img alt="Affichez les professionnels de sant\xe9 selon le type d\u2019honoraires" src="/resources_ver/20150826115145/images/picto_euro.png" class="picto_facette">Affichez les professionnels de sant\xe9 selon le type d\u2019honoraires</h2>\n \t\t\t<ul>\n \t\t\t \t\t\t\t<li><a href="/recherche-facette-1-f37e8ccd9299ffd0512f6451db3292f5/type_honoraires-tarif-sans-depassement.html">Honoraires sans d\xe9passement (1)</a></li> \t\t\t \t\t\t\t<li><a href="/recherche-facette-1-f37e8ccd9299ffd0512f6451db3292f5/type_honoraires-tarif-libre.html">Honoraires libres (24)</a></li> \t\t\t \t\t\t\t<li><a href="/recherche-facette-1-f37e8ccd9299ffd0512f6451db3292f5/type_honoraires-conventionne.html">Conventionn\xe9 (1)</a></li> \t\t\t \t\t</ul>\n \t\t<div class="bloc-bas-critere"></div>\n \t</div>\n \t \t \t\n \t<div class="bloc-critere">\n \t\t<div class="bloc-haut-critere"></div>\n \t\t<h2>Affichez les professionnels de sant\xe9 indiquant leurs horaires</h2>\n \t\t<ul>\n\t \t\t\t \t\t\t\t<li>\n \t\t\t\t<a href="/recherche-facette-1-f37e8ccd9299ffd0512f6451db3292f5/horaires-1.html"><img src="/resources_ver/20150826115145/images/picto_horaires.png" alt="" /><span>Le m\xe9decin a indiqu\xe9 ses horaires (1)</span></a>\n \t\t\t</li>\n \t\t\t\t\n \t\t\t\t \t\t\t\t\n \t\t</ul>\n \t\t<div class="bloc-bas-critere"></div>\n \t</div>\n \t \t \t\n \t<div class="bloc-critere">\n \t\t<div class="bloc-haut-critere"></div>\n \t\t<h2>Affichez les professionnels de sant\xe9 acceptant la carte Vitale</h2>\n \t\t<ul>\n \t\t\t \t\t\t<li>\n \t\t\t\t<a href="/recherche-facette-1-f37e8ccd9299ffd0512f6451db3292f5/carte_vitale-1.html"><img src="/resources_ver/20150826115145/images/picto_cartevitale.png" alt="" /><span>Avec carte Vitale (17)</span></a>\n \t\t\t</li>\n \t\t\t \t\t</ul>\n \t\t<div class="bloc-bas-critere"></div>\n \t</div>\n \t \t \t\n \t<!-- facette centre des sante -->\n \t \t\n \t<div class="bloc-critere">\n \t\t<div class="bloc-haut-critere"></div>\n \t\t<h2>Affichez les centres de sant\xe9</h2>\n \t\t<ul>\n \t\t\t \t\t\t<li>\n \t\t\t\t<a href="/recherche-facette-1-f37e8ccd9299ffd0512f6451db3292f5/categorie-CENTRE_DE_SANTE.html"><img src="/resources_ver/20150826115145/images/picto_facette_centre_sante.png" alt="" /><span>Centre de sant\xe9 (1)</span></a>\n \t\t\t</li>\n \t\t\t \t\t</ul>\n \t\t<div class="bloc-bas-critere"></div>\n \t</div>\n \t \t\n \t\n </div>\n<div class="resultats">\n\t<div id="hautcadre"></div>\n\t<div id="centrecadre">\n\t\t<div class="tri">\n\t\t\t<form id="form_tri" action="">\n\t\t\t\t<label for="tri-haut">Trier par</label>\n\t\t\t\t<select id="form_tri_select" name="sorting" onchange="document.getElementById(\'form_tri\').submit()">\n\t \t<option value="aleatoire"> - </option>\t <option value="nom_asc">Nom</option>\n\t \t \t <option value="carte-vitale_desc">Carte Vitale</option>\n\t \t \t <option value="secteur_asc">Type d'honoraires</option>\n\t \t \t </select>\n\t <button type="submit" title="Trier" class="boutons"><a href="#"><span><span>Trier</span></span></a></button>\n </form>\n\t\t</div>\n\t\t<div class="pagination">\n\t<form method="post" action="/professionnels-de-sante/recherche-1/liste-resultats-page-2-par_page-20-tri-aleatoire-f37e8ccd9299ffd0512f6451db3292f5.html"> \n\t\t<a href="/professionnels-de-sante/recherche-1/liste-resultats-page-1-par_page-20-tri-aleatoire-f37e8ccd9299ffd0512f6451db3292f5.html"><img src="/resources_ver/20150826115145/images/pagination_first.png" alt="Aller \xe0 la premi\xe8re page - " /></a><a href="/professionnels-de-sante/recherche-1/liste-resultats-page-1-par_page-20-tri-aleatoire-f37e8ccd9299ffd0512f6451db3292f5.html"><img src="/resources_ver/20150826115145/images/pagination_prec.png" alt="Page pr\xe9c\xe9dente" /></a> Page <input type="text" name="pageCible" value="2" /> sur 2\t</form>\n</div>\n\t\t<div class="clear"></div>\n <div class="liste-professionnel">\n <div class="item-professionnel"><div class="item-professionnel-inner"><span class="num">1</span><div class="nom_pictos"><h2><a href="/professionnels-de-sante/recherche-1/fiche-detaillee-B7c1kTY0MTaz-f37e8ccd9299ffd0512f6451db3292f5.html"><strong>DRYLEWICZ</strong> JOEL</a></h2><div class="pictos"><img alt="Accepte la carte Vitale" src="/resources_ver/20150826115145/images/picto_cartevitale.png" class="infobulle"/></div><div class="clear"></div></div><div class="clear"></div><div class="elements"><div class="item left"></div><div class="item right type_honoraires">Honoraires sans d\xe9passement</div><div class="clear"></div><div class="item left tel">01 45 45 32 12</div><div class="item right convention"><a href="#" class="infobulle" alt="Les m\xe9decins appliquent les tarifs fix\xe9s dans la convention nationale sans d\xe9passements d\u2019honoraires (dits tarifs conventionnels, opposables ou de secteur 1). Ces tarifs servent de base au remboursement de l\u2019Assurance Maladie. Des d\xe9passements d\u2019honoraires ne peuvent \xeatre factur\xe9s qu\u2019\xe0 titre exceptionnel, pour des motifs li\xe9s, par exemple \xe0 des exigences de temps ou de lieu du patient (DE). Ces d\xe9passements ne sont pas rembours\xe9s par l\u2019Assurance Maladie, que vous soyez dans le parcours de soins ou non." >Conventionn\xe9 secteur 1</a></div><div class="clear"></div><div class="item left adresse">87 RUE DE GERGOVIE<br />75014 PARIS</div><div class="clear"></div></div><div class="clear"></div></div></div><div class="item-professionnel"><div class="item-professionnel-inner"><span class="num">2</span><div class="nom_pictos"><h2><a href="/professionnels-de-sante/recherche-1/fiche-detaillee-B7c1mjM1NDC1-f37e8ccd9299ffd0512f6451db3292f5.html"><strong>BOUMENDIL</strong> JULIEN</a></h2><div class="pictos"><img alt="Accepte la carte Vitale" src="/resources_ver/20150826115145/images/picto_cartevitale.png" class="infobulle"/></div><div class="clear"></div></div><div class="clear"></div><div class="elements"><div class="item left"></div><div class="item right type_honoraires">Honoraires libres</div><div class="clear"></div><div class="item left tel">01 43 20 91 75</div><div class="item right convention"><a href="#" class="infobulle" alt="Les m\xe9decins fixent librement leurs tarifs et peuvent donc pratiquer des d\xe9passements d\u2019honoraires avec tact et mesure. L\u2019Assurance Maladie rembourse les consultations et actes r\xe9alis\xe9s par ces m\xe9decins sur la base des tarifs fix\xe9s dans la convention (tarifs applicables au m\xe9decin de secteur 2), le montant des \xe9ventuels d\xe9passements d\u2019honoraires reste \xe0 votre charge." >Conventionn\xe9 secteur 2</a></div><div class="clear"></div><div class="item left adresse">142 BOULEVARD DU MONTPARNASSE<br />75014 PARIS</div><div class="clear"></div></div><div class="clear"></div></div></div><div class="item-professionnel"><div class="item-professionnel-inner"><span class="num">3</span><div class="nom_pictos"><h2><a href="/professionnels-de-sante/recherche-1/fiche-detaillee-B7c1lzMyOTCy-f37e8ccd9299ffd0512f6451db3292f5.html"><strong>SARFATI</strong> ADRIEN</a></h2><div class="pictos"><img alt="Accepte la carte Vitale" src="/resources_ver/20150826115145/images/picto_cartevitale.png" class="infobulle"/></div><div class="clear"></div></div><div class="clear"></div><div class="elements"><div class="item left"></div><div class="item right type_honoraires">Honoraires libres</div><div class="clear"></div><div class="item left tel">01 43 35 41 03</div><div class="item right convention"><a href="#" class="infobulle" alt="Les m\xe9decins fixent librement leurs tarifs et peuvent donc pratiquer des d\xe9passements d\u2019honoraires avec tact et mesure. L\u2019Assurance Maladie rembourse les consultations et actes r\xe9alis\xe9s par ces m\xe9decins sur la base des tarifs fix\xe9s dans la convention (tarifs applicables au m\xe9decin de secteur 2), le montant des \xe9ventuels d\xe9passements d\u2019honoraires reste \xe0 votre charge." >Conventionn\xe9 secteur 2</a></div><div class="clear"></div><div class="item left adresse">10 RUE DAGUERRE<br />75014 PARIS</div><div class="clear"></div></div><div class="clear"></div></div></div><div class="item-professionnel"><div class="item-professionnel-inner"><span class="num">4</span><div class="nom_pictos"><h2><a href="/professionnels-de-sante/recherche-1/fiche-detaillee-B7c1lTM3NzOx-f37e8ccd9299ffd0512f6451db3292f5.html"><strong>PIETRINI</strong> DOMINIQUE</a></h2><div class="pictos"></div><div class="clear"></div></div><div class="clear"></div><div class="elements"><div class="item left"></div><div class="item right type_honoraires">Honoraires libres</div><div class="clear"></div><div class="item left tel">01 56 53 58 58</div><div class="item right convention"><a href="#" class="infobulle" alt="Les m\xe9decins fixent librement leurs tarifs et peuvent donc pratiquer des d\xe9passements d\u2019honoraires avec tact et mesure. L\u2019Assurance Maladie rembourse les consultations et actes r\xe9alis\xe9s par ces m\xe9decins sur la base des tarifs fix\xe9s dans la convention (tarifs applicables au m\xe9decin de secteur 2), le montant des \xe9ventuels d\xe9passements d\u2019honoraires reste \xe0 votre charge." >Conventionn\xe9 secteur 2</a></div><div class="clear"></div><div class="item left adresse">SARL SARRETTE<br />29 RUE SARRETTE<br />75014 PARIS</div><div class="clear"></div></div><div class="clear"></div></div></div><div class="item-professionnel"><div class="item-professionnel-inner"><span class="num">5</span><div class="nom_pictos"><h2><a href="/professionnels-de-sante/recherche-1/fiche-detaillee-B7c1lzY0MDK3-f37e8ccd9299ffd0512f6451db3292f5.html"><strong>TAZARTES</strong> MICHEL</a></h2><div class="pictos"></div><div class="clear"></div></div><div class="clear"></div><div class="elements"><div class="item left"></div><div class="item right type_honoraires">Honoraires libres</div><div class="clear"></div><div class="item left tel">01 43 20 91 75</div><div class="item right convention"><a href="#" class="infobulle" alt="Les m\xe9decins fixent librement leurs tarifs et peuvent donc pratiquer des d\xe9passements d\u2019honoraires avec tact et mesure. L\u2019Assurance Maladie rembourse les consultations et actes r\xe9alis\xe9s par ces m\xe9decins sur la base des tarifs fix\xe9s dans la convention (tarifs applicables au m\xe9decin de secteur 2), le montant des \xe9ventuels d\xe9passements d\u2019honoraires reste \xe0 votre charge." >Conventionn\xe9 secteur 2</a></div><div class="clear"></div><div class="item left adresse">142 BOULEVARD DU MONTPARNASSE<br />75014 PARIS</div><div class="clear"></div></div><div class="clear"></div></div></div><div class="item-professionnel"><div class="item-professionnel-inner"><span class="num">6</span><div class="nom_pictos"><h2><a href="/professionnels-de-sante/recherche-1/fiche-detaillee-B7c1lDUzODC3-f37e8ccd9299ffd0512f6451db3292f5.html"><strong>MONNET</strong> DOMINIQUE</a></h2><div class="pictos"></div><div class="clear"></div></div><div class="clear"></div><div class="elements"><div class="item left"></div><div class="item right type_honoraires">Honoraires libres</div><div class="clear"></div><div class="item left tel">01 58 41 21 91</div><div class="item right convention"><a href="#" class="infobulle" alt="Les m\xe9decins fixent librement leurs tarifs et peuvent donc pratiquer des d\xe9passements d\u2019honoraires avec tact et mesure. L\u2019Assurance Maladie rembourse les consultations et actes r\xe9alis\xe9s par ces m\xe9decins sur la base des tarifs fix\xe9s dans la convention (tarifs applicables au m\xe9decin de secteur 2), le montant des \xe9ventuels d\xe9passements d\u2019honoraires reste \xe0 votre charge." >Conventionn\xe9 secteur 2</a></div><div class="clear"></div><div class="item left adresse">HOPITAL COCHIN<br />27 RUE DU FBG SAINT JACQUES<br />75014 PARIS</div><div class="clear"></div></div><div class="clear"></div></div></div> </div>\n <div class="tri">\n <form id="form_tri_bas" action="">\n <label for="form_tri_select">Trier par</label>\n <select id="form_tri_select" name="sorting" onchange="document.getElementById(\'form_tri_bas\').submit()">\n \t<option value="aleatoire"> - </option> <option value="nom_asc">Nom</option>\n \t <option value="carte-vitale_desc">Carte Vitale</option>\n \t <option value="secteur_asc">Type d'honoraires</option>\n \t </select>\n </form>\n </div>\n <div class="pagination">\n\t<form method="post" action="/professionnels-de-sante/recherche-1/liste-resultats-page-2-par_page-20-tri-aleatoire-f37e8ccd9299ffd0512f6451db3292f5.html"> \n\t\t<a href="/professionnels-de-sante/recherche-1/liste-resultats-page-1-par_page-20-tri-aleatoire-f37e8ccd9299ffd0512f6451db3292f5.html"><img src="/resources_ver/20150826115145/images/pagination_first.png" alt="Aller \xe0 la premi\xe8re page - " /></a><a href="/professionnels-de-sante/recherche-1/liste-resultats-page-1-par_page-20-tri-aleatoire-f37e8ccd9299ffd0512f6451db3292f5.html"><img src="/resources_ver/20150826115145/images/pagination_prec.png" alt="Page pr\xe9c\xe9dente" /></a> Page <input type="text" name="pageCible" value="2" /> sur 2\t</form>\n</div>\n <div class="clear"></div>\n\t</div>\n\t<div id="bascadre"></div>\n</div>\n<div class="clear"></div> \t</div>\n \t<div id="footer">\n \t\t<div class="mention">L\'utilisation du service offert sur ce site est soumise au respect des conditions d\'utilisation. Toute reproduction int\xe9grale ou partielle des contenus, donn\xe9es et informations disponibles est illicite et peut donner lieu \xe0 des sanctions.</div>\n \t <div class="liens">\n\t\t\t\t<h2>Les autres sites de l\'Assurance Maladie</h2>\n\t\t\t\t<div class="site"><a href="http://www.ameli.fr" target="_blank" rel="nofollow" title="Ameli.fr : je m\'informe sur mes droits et mes d\xe9marches (nouvelle fen\xeatre)"><img src="/resources_ver/20150826115145/images/footer_ameli.png" alt="ameli.fr" /></a><br/>Je m\'informe sur mes droits et mes d\xe9marches</div>\n\t\t\t\t<div class="site"><a href="http://www.ameli-sante.fr" target="_blank" rel="nofollow" title="Ameli-sant\xe9.fr : Ma r\xe9f\xe9rence en information sant\xe9 (nouvelle fen\xeatre)"><img src="/resources_ver/20150826115145/images/footer_sante.png" alt="ameli-sante.fr" /></a><br/>Je m\'informe sur ma sant\xe9</div>\n\t\t\t\t<div class="site"><a href="http://www.ameli-sophia.fr" target="_blank" rel="nofollow" title="ameli-sophia (nouvelle fen\xeatre)"><img src="/resources_ver/20150826115145/images/footer_sophia.png" alt="ameli-sophia.fr" /></a><br/>Le service d\'accompagnement pour mieux vivre avec une maladie chronique</div>\n\t\t\t</div>\n\t\t\t<div class="clear"></div>\n \t\t<div class="liens-transverse"> | <a href="/fenetre-modale-xhr/dispositions_generales.html?width=700&modal=true" class="thickbox" title="Dispositions g\xe9n\xe9rales">Dispositions g\xe9n\xe9rales</a> | <a href="/fenetre-modale-xhr/mentions_legales.html?width=700&modal=true" class="thickbox" title="Mentions l\xe9gales">Mentions l\xe9gales</a></div>\n \t</div>\n </div>\n<!-- Version OW040304X -->\n<script type="text/javascript">\n<!--\nxtnv = document; //parent.document or top.document or document \nxtsd = "http://logi7";\nxtsite = "475098";\nxtn2 = "2"; // level 2 site \nxtpage = "ameli-direct-externe::liste-resultats-ps"; //page name (with the use of :: to create chapters)\nxtdi = ""; //implication degree\n//-->\n</script>\n<script type="text/javascript" src="/resources_ver/20150826115145/js/xtcore.js"></script>\n<noscript>\n<img width="1" height="1" alt="" src="http://logi7.xiti.com/hit.xiti?s=475098&s2=1&p=ameli-direct-externe::liste-resultats-ps&di=&" />\n</noscript></body>\n</html>\n'
soup = BeautifulSoup(r2.text, 'html.parser')
doctors = soup.findAll('div', attrs={"class":"item-professionnel"})
pd.DataFrame([extract_information(doc) for doc in doctors], columns=['Nom', u'Adresse', u"Téléphone", u"Honoraires", "Convention"])
Nom | Adresse | Téléphone | Honoraires | Convention | |
---|---|---|---|---|---|
0 | DRYLEWICZ JOEL | 87 RUE DE GERGOVIE 75014 PARIS | 01 45 45 32 12 | Honoraires sans dépassement | Conventionné secteur 1 |
1 | BOUMENDIL JULIEN | 142 BOULEVARD DU MONTPARNASSE 75014 PARIS | 01 43 20 91 75 | Honoraires libres | Conventionné secteur 2 |
2 | SARFATI ADRIEN | 10 RUE DAGUERRE 75014 PARIS | 01 43 35 41 03 | Honoraires libres | Conventionné secteur 2 |
3 | PIETRINI DOMINIQUE | SARL SARRETTE 29 RUE SARRETTE 75014 PARIS | 01 56 53 58 58 | Honoraires libres | Conventionné secteur 2 |
4 | TAZARTES MICHEL | 142 BOULEVARD DU MONTPARNASSE 75014 PARIS | 01 43 20 91 75 | Honoraires libres | Conventionné secteur 2 |
5 | MONNET DOMINIQUE | HOPITAL COCHIN 27 RUE DU FBG SAINT JACQUES 750... | 01 58 41 21 91 | Honoraires libres | Conventionné secteur 2 |
In the second frame, we only got 6 doctors, which is what we expected. This seems to work.
def make_query(specialty, location):
"""queries Ameli for a given specialty of doctors in a given location
returns a pandas dataframe or None if no doctors have been found"""
# create new session and open the connection to get cookies
s = requests.Session()
r = s.get('http://ameli-direct.ameli.fr')
# extract the page towards which we make our first request
p = re.compile('<form action="([\w\d/.-]+)" method="post">')
suburl = p.findall(r.text)[0]
# make the request
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36"}
payload = {"type":"ps",
"ps_profession":specialty,
"ps_localisation":location}
r = s.post("http://ameli-direct.ameli.fr" + suburl, params=payload,
headers=headers)
# extract information
soup = BeautifulSoup(r.text, 'html.parser')
number_of_doctors = extract_number_of_doctors(soup)
if number_of_doctors == 0:
return None
# loop over needed pages
dfs = []
for pagenumber in range(1, int(math.ceil(number_of_doctors / 20.)) + 1):
r2 = s.post(r.url.replace("liste-resultats-page-1-par_page-20",
"liste-resultats-page-{}-par_page-20").format(pagenumber))
soup = BeautifulSoup(r2.text)
doctors = soup.findAll('div', attrs={"class":"item-professionnel"})
dfs.append(pd.DataFrame([extract_information(doc) for doc in doctors],
columns=['Nom', u'Adresse', u"Téléphone", u"Honoraires", "Convention"]))
return pd.concat(dfs, ignore_index=True)
make_query("ophtalmologiste", "92120")
Nom | Adresse | Téléphone | Honoraires | Convention | |
---|---|---|---|---|---|
0 | KOHANE BERNARD | 31 AVENUE VERDIER 92120 MONTROUGE | 01 46 56 90 90 | Honoraires libres | Conventionné secteur 2 |
1 | CENTRE DE SANTE MUNICIPAL | CENTRE DE SANTE MUNICIPAL 5 RUE AMAURY DUVAL 9... | None | None | None |
2 | KHAYAT NADINE | 10 RUE V. HUGO 92120 MONTROUGE | 01 82 00 15 16 | Honoraires sans dépassement | Conventionné secteur 1 |
3 | DEBBASCH JEAN MARC | 31 AVENUE VERDIER 92120 MONTROUGE | 01 46 56 90 90 | Honoraires libres | Conventionné secteur 2 |
make_query("ophtalmologiste", "06800")
Nom | Adresse | Téléphone | Honoraires | Convention | |
---|---|---|---|---|---|
0 | BIANCHI FREDERIQUE | L ATHENA 1 AVENUE DE VERDUN 06800 CAGNES SUR MER | 04 93 20 87 08 | Honoraires libres | Conventionné secteur 2 |
1 | COTTA CLAIRE | CABINET DU DR CARL LOUBOUTIN LE ST JACQUES 7 B... | 04 93 20 59 40 | Honoraires libres | Conventionné secteur 2 |
2 | COTTA CLAIRE | SCM ABEL LE ST JACQUES 7 BOULEVARD MARECHAL JU... | Honoraires libres | Conventionné secteur 2 | None |
3 | LECCIA BOUCKAERT LAETITIA | CONSULTATION ST JEAN BT A 53 AVENUE DES ALPES ... | Honoraires libres | Conventionné secteur 2 | None |
4 | LOUBOUTIN CARL | 7 BOULEVARD MARECHAL JUIN 06800 CAGNES SUR MER | Honoraires libres | Conventionné secteur 2 | None |
5 | FERRARA LUCIE | LE SPLENDID 41 BOULEVARD MARECHAL JUIN 06800 C... | 04 93 20 19 44 | Honoraires avec dépassements maîtrisés (contra... | Conventionné secteur 2 avec contrat d'accès au... |
6 | CHEPTEA IRINA | SA POLYCLINIQUE ST JEAN POLYCLINIQUE ST JEAN 9... | 04 92 13 53 13 | Honoraires libres | Conventionné secteur 2 |
7 | CHEPTEA IRINA | SELARL CABINET DU DR CHEPTEA VILLA EMILIE - EN... | 04 93 20 66 70 | Honoraires libres | Conventionné secteur 2 |
8 | BIJAOUI SAMUEL | POLYCLINIQUE SAINT JEAN 92 AVENUE DU DR MAURIC... | 04 92 13 53 13 | Honoraires libres | Conventionné secteur 2 |
9 | BIJAOUI SAMUEL | ENTREE B VILLA EMILIE 48 BOULEVARD MARECHAL JU... | 04 93 20 66 70 | Honoraires libres | Conventionné secteur 2 |
10 | GOZAL SULTAN DOMINIQUE | LE SAINT JACQUES 7 BOULEVARD MARECHAL JUIN 068... | Honoraires libres | Conventionné secteur 2 | None |
make_query("ophtalmologiste", "75014")
Nom | Adresse | Téléphone | Honoraires | Convention | |
---|---|---|---|---|---|
0 | CHARLOT JEAN CLAUDE | 228 BOULEVARD RASPAIL 75014 PARIS | 01 43 22 42 33 | Honoraires libres | Conventionné secteur 2 |
1 | COMMEAU DOMINIQUE | 22 RUE ERNEST CRESSON 75014 PARIS | 01 45 41 73 63 | Honoraires libres | Conventionné secteur 2 |
2 | CHAMOUNI HUBERT | 95 AVENUE DU GAL LECLERC 75014 PARIS | Honoraires libres | Conventionné secteur 2 | None |
3 | VAN WENT CHARLES | SELARL CHASSIGNOL VAN WENT 79 AVENUE DU GENERA... | Honoraires libres | Conventionné secteur 2 | None |
4 | LE QUOY OLIVIER | 29 RUE D ALESIA 75014 PARIS | 01 43 35 31 48 | Honoraires libres | Conventionné secteur 2 |
5 | SELLAM MICKAEL | CLINIQUE STE GENEVIEVE 29 RUE SARRETTE 75014 P... | Honoraires libres | Conventionné secteur 2 | None |
6 | BINN DEUTSCHER SYLVIE | 12 RUE DE LA TOMBE ISSOIRE 75014 PARIS | 01 45 65 04 24 | Honoraires libres | Conventionné secteur 2 |
7 | FELLER MICHEL | 118 BOULEVARD MONTPARNASSE 75014 PARIS | 01 43 35 08 28 | Honoraires libres | Conventionné secteur 2 |
8 | BREZIN ANTOINE | HOPITAL COCHIN 27 RUE DU FBG SAINT JACQUES 750... | 01 58 41 22 00 | Honoraires libres | Conventionné secteur 2 |
9 | SULMAN JEAN JACQUES | 90 AVENUE DU MAINE 75014 PARIS | 01 40 47 00 00 | Honoraires libres | Conventionné secteur 2 |
10 | CHASSIGNOL ALEXIS | SELARL CHASSIGNOL VAN WENT 79 AVENUE DU GENERA... | 01 43 27 10 69 | Honoraires libres | Conventionné secteur 2 |
11 | CTRE SANTE MEDICAL DENTAIRE TISSERAND | CTRE SANTE MEDICAL DENTAIRE TISSERAND C A S VI... | None | None | None |
12 | THAN TRONG THONG | 10 RUE DAGUERRE 75014 PARIS | 01 43 35 41 03 | Honoraires libres | Conventionné secteur 2 |
13 | MAGNANI MATTEO | 29 RUE SARRETTE. 75014 PARIS | Honoraires libres | Conventionné secteur 2 | None |
14 | WERTHEL ANDREE LUCE | 24 AVENUE VILLEMAIN 75014 PARIS | 01 45 42 75 74 | Honoraires libres | Conventionné secteur 2 |
15 | DRYLEWICZ JOEL | 87 RUE DE GERGOVIE 75014 PARIS | 01 45 45 32 12 | Honoraires sans dépassement | Conventionné secteur 1 |
16 | BOUMENDIL JULIEN | 142 BOULEVARD DU MONTPARNASSE 75014 PARIS | 01 43 20 91 75 | Honoraires libres | Conventionné secteur 2 |
17 | SARFATI ADRIEN | 10 RUE DAGUERRE 75014 PARIS | 01 43 35 41 03 | Honoraires libres | Conventionné secteur 2 |
18 | GIRARD DECIS ANAIS | 244 BOULEVARD RASPAIL 75014 PARIS | Honoraires libres | Conventionné secteur 2 | None |
19 | KELLER PIERRE | 3 RUE VICTOR CONSIDERANT 75014 PARIS | 01 43 35 43 33 | Honoraires libres | Conventionné secteur 2 |
20 | KRETZ GILLES | 150 RUE R LOSSERAND 75014 PARIS | 01 40 44 65 30 | Honoraires libres | Conventionné secteur 2 |
21 | MEYER MARIE CLAUDE | 29 BOULEVARD E.QUINET 75014 PARIS | 01 43 20 62 55 | Honoraires libres | Conventionné secteur 2 |
22 | PUECH MICHEL | SELARL DU DR MICHEL PUECH 7 RUE BOISSONADE 750... | Honoraires libres | Conventionné secteur 2 | None |
23 | TAZARTES MICHEL | 142 BOULEVARD DU MONTPARNASSE 75014 PARIS | 01 43 20 91 75 | Honoraires libres | Conventionné secteur 2 |
24 | MONNET DOMINIQUE | HOPITAL COCHIN 27 RUE DU FBG SAINT JACQUES 750... | 01 58 41 21 91 | Honoraires libres | Conventionné secteur 2 |
25 | PIETRINI DOMINIQUE | SARL SARRETTE 29 RUE SARRETTE 75014 PARIS | 01 56 53 58 58 | Honoraires libres | Conventionné secteur 2 |
make_query("ophtalmologiste", "59100")
Nom | Adresse | Téléphone | Honoraires | Convention | |
---|---|---|---|---|---|
0 | MALBREL PIERRE HENRI | 50 AVENUE LINNE 59100 ROUBAIX | 03 20 75 82 43 | Honoraires avec dépassements maîtrisés (contra... | Conventionné secteur 1 avec contrat d'accès au... |
1 | GEVART FREDERIC | SELARL DIDIER MOUTON 72 RUE DU COQ FRANCAIS 59... | 03 20 70 59 29 | Honoraires libres | Conventionné secteur 2 |
2 | GEVART FREDERIC | CABINET DU DR OLIVIER LAFFINEUR 72 RUE DU COQ ... | Honoraires libres | Conventionné secteur 2 | None |
3 | GEVART FREDERIC | CABINET DU DR CHRISTIAN DOUCET 72 RUE DU COQ F... | Honoraires libres | Conventionné secteur 2 | None |
4 | GEVART FREDERIC | CABINE DU DR CELINE KARKOUTLY PARC DES 7 LIEUE... | Honoraires libres | Conventionné secteur 2 | None |
5 | KARKOUTLY REZVOY CELINE | CABINET DU DR CELINE KARKOUTLY PARC DES 7 LIEU... | 03 20 70 59 29 | Honoraires libres | Conventionné secteur 2 |
6 | LAFFINEUR OLIVIER | CABINET DU DR OLIVIER LAFFINEUR 72 RUE DU COQ ... | 03 20 70 59 29 | Honoraires sans dépassement | Conventionné secteur 1 |
7 | MOUTON DIDIER | SELARL DIDIER MOUTON 72 RUE DU COQ FRANCAIS 59... | 03 20 70 59 29 | Honoraires libres | Conventionné secteur 2 |
8 | CAB MEDICAL OPHTALMOLOGIQUE MUTUALISTE | CAB MEDICAL OPHTALMOLOGIQUE MUTUALISTE 30 BVD ... | None | None | None |
9 | DOUCET CHRISTIAN | CABINET DU DR CHRISTIAN DOUCET 72 RUE DU COQ F... | 03 20 70 59 29 | Honoraires libres | Conventionné secteur 2 |
10 | LENTINI FERDINANDO | CABINETDU DR FERDINANDO LENTINI ENTREE A 19 RU... | 03 20 94 80 59 | Honoraires avec dépassements maîtrisés (contra... | Conventionné secteur 2 avec contrat d'accès au... |
ophtalmologists = {}
for arrondissement in range(1, 21):
arr_string = '75' + format(arrondissement, '03')
ophtalmologists[arr_string] = make_query("ophtalmologiste", arr_string)
Let's now make some plots!
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
ophtalmologists['75001'].shape[0]
12
n = [ophtalmologists['75' + format(arrondissement, '03')].shape[0] for arrondissement in range(1, 21)]
xticks = ['75' + format(arrondissement, '03') for arrondissement in range(1, 21)]
n
[12, 7, 5, 11, 25, 33, 39, 40, 22, 6, 23, 37, 22, 26, 48, 53, 33, 11, 23, 11]
xticks
['75001', '75002', '75003', '75004', '75005', '75006', '75007', '75008', '75009', '75010', '75011', '75012', '75013', '75014', '75015', '75016', '75017', '75018', '75019', '75020']
plt.bar(np.arange(len(n)), n)
plt.xticks(np.arange(len(n)) + 0.5, xticks, rotation=90)
plt.title("number of ophtalmologists by arrondissement in Paris")
<matplotlib.text.Text at 0xece5b00>
communes = ["59910", "59166", "59560", "59170", "59510", "59250", "59510", "59390", "59115",
"59126", "59390", "59420", "59960", "59223", "59100", "59390", "59390", "59200",
"59290", "59150", "59117", "59780"]
df = pd.DataFrame([extract_information(doc) for doc in doctors], columns=['Nom', u'Adresse', u"Téléphone", u"Honoraires", "Convention"])
df['Commune'] = pd.Series(['51111'] * df.shape[0] , index=df.index)
df
Nom | Adresse | Téléphone | Honoraires | Convention | Commune | |
---|---|---|---|---|---|---|
0 | DRYLEWICZ JOEL | 87 RUE DE GERGOVIE 75014 PARIS | 01 45 45 32 12 | Honoraires sans dépassement | Conventionné secteur 1 | 51111 |
1 | BOUMENDIL JULIEN | 142 BOULEVARD DU MONTPARNASSE 75014 PARIS | 01 43 20 91 75 | Honoraires libres | Conventionné secteur 2 | 51111 |
2 | SARFATI ADRIEN | 10 RUE DAGUERRE 75014 PARIS | 01 43 35 41 03 | Honoraires libres | Conventionné secteur 2 | 51111 |
3 | PIETRINI DOMINIQUE | SARL SARRETTE 29 RUE SARRETTE 75014 PARIS | 01 56 53 58 58 | Honoraires libres | Conventionné secteur 2 | 51111 |
4 | TAZARTES MICHEL | 142 BOULEVARD DU MONTPARNASSE 75014 PARIS | 01 43 20 91 75 | Honoraires libres | Conventionné secteur 2 | 51111 |
5 | MONNET DOMINIQUE | HOPITAL COCHIN 27 RUE DU FBG SAINT JACQUES 750... | 01 58 41 21 91 | Honoraires libres | Conventionné secteur 2 | 51111 |
dfs = []
for city in communes:
df = make_query("ophtalmologiste", city)
if df is not None:
df['Commune'] = pd.Series([city] * df.shape[0] , index=df.index)
dfs.append(df)
df = pd.concat(dfs)
df = df.set_index('Commune')
df
Nom | Adresse | Téléphone | Honoraires | Convention | |
---|---|---|---|---|---|
Commune | |||||
59170 | DRUMARE BOUVET ISABELLE | CABINET DU DR ISABELLE DRUMARE BOUVET 6 RUE HE... | 03 20 98 26 14 | Honoraires avec dépassements maîtrisés (contra... | Conventionné secteur 1 avec contrat d'accès au... |
59170 | DUMORTIER DOMINIQUE | CABINET DU DR DOMINIQUE MARTIN 6 RUE HENRI GHE... | 03 20 98 26 14 | Honoraires sans dépassement | Conventionné secteur 1 |
59170 | GUILLEMOT ODILE | CABINET DU DR ODILE GUILLEMOT BOUTET 6 RUE HEN... | 03 20 98 26 14 | Honoraires sans dépassement | Conventionné secteur 1 |
59170 | KARKOUTLY REZVOY CELINE | CLINIQUE DU PARC CROIX CLINIQUE DU PARC 34 AVE... | 03 20 99 41 41 | Honoraires libres | Conventionné secteur 2 |
59100 | GEVART FREDERIC | CABINE DU DR CELINE KARKOUTLY PARC DES 7 LIEUE... | Honoraires libres | Conventionné secteur 2 | None |
59100 | GEVART FREDERIC | CABINET DU DR CHRISTIAN DOUCET 72 RUE DU COQ F... | Honoraires libres | Conventionné secteur 2 | None |
59100 | GEVART FREDERIC | CABINET DU DR OLIVIER LAFFINEUR 72 RUE DU COQ ... | Honoraires libres | Conventionné secteur 2 | None |
59100 | GEVART FREDERIC | SELARL DIDIER MOUTON 72 RUE DU COQ FRANCAIS 59... | 03 20 70 59 29 | Honoraires libres | Conventionné secteur 2 |
59100 | MOUTON DIDIER | SELARL DIDIER MOUTON 72 RUE DU COQ FRANCAIS 59... | 03 20 70 59 29 | Honoraires libres | Conventionné secteur 2 |
59100 | CAB MEDICAL OPHTALMOLOGIQUE MUTUALISTE | CAB MEDICAL OPHTALMOLOGIQUE MUTUALISTE 30 BVD ... | None | None | None |
59100 | DOUCET CHRISTIAN | CABINET DU DR CHRISTIAN DOUCET 72 RUE DU COQ F... | 03 20 70 59 29 | Honoraires libres | Conventionné secteur 2 |
59100 | LENTINI FERDINANDO | CABINETDU DR FERDINANDO LENTINI ENTREE A 19 RU... | 03 20 94 80 59 | Honoraires avec dépassements maîtrisés (contra... | Conventionné secteur 2 avec contrat d'accès au... |
59100 | LAFFINEUR OLIVIER | CABINET DU DR OLIVIER LAFFINEUR 72 RUE DU COQ ... | 03 20 70 59 29 | Honoraires sans dépassement | Conventionné secteur 1 |
59100 | KARKOUTLY REZVOY CELINE | CABINET DU DR CELINE KARKOUTLY PARC DES 7 LIEU... | 03 20 70 59 29 | Honoraires libres | Conventionné secteur 2 |
59100 | MALBREL PIERRE HENRI | 50 AVENUE LINNE 59100 ROUBAIX | 03 20 75 82 43 | Honoraires avec dépassements maîtrisés (contra... | Conventionné secteur 1 avec contrat d'accès au... |
59200 | OUKAID MOHAMED | 26 BOULEVARD GAMBETTA 59200 TOURCOING | 03 20 26 41 21 | Honoraires sans dépassement | Conventionné secteur 1 |
59200 | OUKAID MOHAMED | CLINIQUE DE LA VICTOIRE CL.DE LA VICTOIRE 1 QU... | Honoraires sans dépassement | Conventionné secteur 1 | None |
59200 | SIX ALAIN | CABINET DU DR ALAIN SIX ASSO.OPHTALMO.DU BEFFR... | 03 20 27 27 51 | Honoraires avec dépassements maîtrisés (contra... | Conventionné secteur 2 avec contrat d'accès au... |
59200 | SIX ALAIN | CLINIQUE DE LA VICTOIRE CLINIQUE DE LA VICTOIR... | Honoraires avec dépassements maîtrisés (contra... | Conventionné secteur 2 avec contrat d'accès au... | None |
59200 | BADGUERAHANIAN CHRISTOPHE | 26 BOULEVARD GAMBETTA 59200 TOURCOING | 03 20 26 41 21 | Honoraires sans dépassement | Conventionné secteur 1 |
59200 | PAYEN PHILIPPE | CABINET DU DR PHILIPPE PAYEN ASS.OPHTALMO.DU B... | 03 20 27 27 51 | Honoraires avec dépassements maîtrisés (contra... | Conventionné secteur 2 avec contrat d'accès au... |
59200 | COLLIN FLORENCE | CLINIQUE DE LA VICTOIRE 1 QUAI DU HAVRE 59200 ... | Honoraires libres | Conventionné secteur 2 | None |
59200 | COLLIN FLORENCE | CABINET DU DR FLORENCE COLLIN ASSO.OPHTALMO.DU... | 03 20 27 27 51 | Honoraires libres | Conventionné secteur 2 |
59200 | PICQUE PATRICK | CABINET DU DR PATRICK PICQUE ASS.OPTHALMO.DU B... | 03 20 27 27 51 | Honoraires avec dépassements maîtrisés (contra... | Conventionné secteur 2 avec contrat d'accès au... |
59200 | DE BEER FRANCOIS | CABINET DU DR FRANCOIS DE BEER ASSO.OPHTALMO.D... | 03 20 27 27 51 | Honoraires sans dépassement | Conventionné secteur 1 |
df.to_csv("files/ophtalmologistes_59.csv", encoding='utf-8')