
    i                         d Z ddlZddlZddlmZ dZdZddiZ ej        d          Z	d	e
d
efdZde
de
d
efdZde
d
e
dz  fdZde
de
d
e
dz  fdZd
efdZde
d
e
fdZdS )uV   
Scraper du site officiel de Bessèges.
Cherche associations, PV, actualités, élus.
    N)BeautifulSouphttps://www.besseges.fr   z
User-Agentz7Mozilla/5.0 (compatible; ICAC/1.0; mairie-besseges-bot)zicac.scraper_bessegesnamereturnc           	        K   d| ddddd}t            dt            dt            dt            d	|                     d
d           g}t          j        t          t
          d          4 d{V 	 }|D ]}	 |                    |           d{V }|j        dk    r+t          |j	        d          }|
                    d
d          }|                                 }||                                vrd|d<   ||d<   |                    g d          D ]c}	||	
                                                                v r9|	
                    d
d          }
t          |
          dk    r|
dd         |d<    ndt          ||          }|r||d<   t          ||t                     }|rBt!          |||           d{V }|d         r|d         |d<   |d         r|d         |d<   ||d<    n8# t"          $ r+}t$                              d| d|            Y d}~d}~ww xY wddd          d{V  n# 1 d{V swxY w Y   |S )uf   
    Recherche une association sur besseges.fr.
    Retourne : texte, url, photo_url si trouvée.
    F Nzbesseges.fr)foundr   texturl	photo_urlsource/associations//vie-associative//associations-et-loisirs/z/?s= +Theaderstimeoutfollow_redirects   html.parserstripr
   r   )pdivarticlesection2   i  r   r   zErreur scraping : )BASE_URLreplacehttpxAsyncClientHEADERSTIMEOUTgetstatus_coder   r   get_textlowerfind_alllen_find_photo_near_text_find_association_link_fetch_detail_page	Exceptionloggerwarning)r   resulturls_to_scanclientr   respsouptext_content
name_lowertagr   photo	asso_linkdetailes                  //var/www/icac/agents_python/scraper_besseges.pysearch_associationrA      s      " F ###&&&...11c3//11	L     9 9 9 9 9 9 9 9 
 3	 3	C2#ZZ__,,,,,,#s**$TY>>  $}}S}==!ZZ\\
\%7%7%9%999 #'w #u  ==666  " "C "S\\^^%9%9%;%;;;"||Ct|<<t99r>>-1%4%[F6N!E .dJ?? 0*/F;' 3*h 	  .#5	:$ $      F f~ 8)/vk* B.4[.A{+$-F5M   <#<<<<===o9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9v MsV   0H77&G-H7AG-4H75C6G-+H7-
H"7 HH7H""H77
IIr   r:   c                 j  K   dd d}	 |                      |           d {V }|j        dk    r|S t          |j        d          }|                    dd          d d         |d	<   t          ||          |d
<   n7# t          $ r*}t                              d| d|            Y d }~nd }~ww xY w|S )Nr	   )r   r   r   r   r   Tr   i  r   r   u   Erreur page détail r!   )	r(   r)   r   r   r*   r.   r1   r2   r3   )r6   r   r:   r4   r7   r8   r?   s          r@   r0   r0   j   s       t,,F
:ZZ__$$$$$$s""MTY66s$77>v3*
 
{  : : :8c88Q8899999999:Ms   'A< A
A< <
B0 B++B0c                    |                      g d          D ]C}||                                                                vr,|j        p|}|                     d          D ]}|                    dd          }|s|                                t          fddD                       rK|                    dd          }|                    d	d          }	 t          |          d
k     st          |          d
k     rn# t          t          f$ r Y nw xY w|	                    d          r|c c S |	                    d          r	d| c c S d| c c S EdS )u   
    Cherche une image dans le voisinage du texte contenant le nom.
    Stratégie : img dans le même article/section/div parent.
    )r   r   r   r   liimgsrcr	   c              3       K   | ]}|v V  	d S )N ).0x	src_lowers     r@   	<genexpr>z(_find_photo_near_text.<locals>.<genexpr>   s7        a1	>          )logoiconspritearrowbtnbullet	separator1x1width0heightr    http/r   zhttps://www.besseges.fr/N)
r,   r*   r+   parentr(   anyint
ValueError	TypeError
startswith)	r8   r:   r;   r[   rE   rF   rV   rX   rK   s	           @r@   r.   r.   |   s   
 }}000  !8 !8 S\\^^113333 "s??5)) 	8 	8C''%$$C 		I     ,       GGGS))EWWXs++Fu::??c&kkB&6&6 '7	*    ~~f%% 8




$$ 8666666667#77777773	84 4s   &DDDbase_urlc                 B   |                      dd          D ]}|                                                                }|d         }||v s|                                d         |v r6|                    d          r|c S |                    d          r| | c S dS )	uA   
    Cherche un lien vers la page dédiée de l'association.
    aThrefre   r   rY   rZ   N)r,   r*   r+   splitr`   )r8   r:   ra   rc   	link_textre   s         r@   r/   r/      s     ]]3T]** + +JJLL&&((	y""a I--v&& +%% +"*D*****4rM   c            	        K   g } t            dt            dt            dg}t          j        t          t          d          4 d{V 	 }|D ]}	 |                    |           d{V }|j        dk    r*t          |j        d          }|	                    d	d
          D ]\}|
                    d          }t          |          dk    r1t          |          dk     r|                     ||d         d           ]# t          $ r*}t                              d| d|            Y d}~d}~ww xY w	 ddd          d{V  n# 1 d{V swxY w Y   | S )z8
    Liste toutes les associations sur besseges.fr.
    r   r   r   Tr   Nr   r   rc   rd   r      P   re   )nomr   zlist_associations r!   )r"   r$   r%   r&   r'   r(   r)   r   r   r,   r*   r-   appendr1   r2   r3   )	resultsr5   r6   r   r7   r8   rc   r   r?   s	            r@   list_associationsrn      so      G###&&&...L
     @ @ @ @ @ @ @ @ 
 	@ 	@C@#ZZ__,,,,,,#s**$TY>>s66  A::D:11D4yy1}}TR#'#$V9( (     @ @ @>C>>1>>????????@	@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @( NsI   
E&D6E7B	D E
D5 D0+E0D55E
EEc                 8  K   	 t          j        t          t          d          4 d{V 	 }|                    |            d{V }|j        dk    r	 ddd          d{V  dS t          |j        d          } |g d          D ]}|                                 |	                    dd	          dd
         cddd          d{V  S # 1 d{V swxY w Y   dS # t          $ r+}t                              d|  d|            Y d}~dS d}~ww xY w)u]   
    Scrape générique d'une URL besseges.fr.
    Retourne le texte principal nettoyé.
    Tr   Nr   r	   r   )navheaderfooterscriptstyleasider   r   i  zscrape_page r!   )r$   r%   r&   r'   r(   r)   r   r   	decomposer*   r1   r2   error)r   r6   r7   r8   r;   r?   s         r@   scrape_pagerx      s"     
$!
 
 
 	9 	9 	9 	9 	9 	9 	9 	9 C((((((D3&&	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 !M::Dt- - -      ==D=11%4%8	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9     .C..1..///rrrrrsG   'C$ (CC$ 'AC>C$ 
CC$ CC$ $
D. DD)__doc__r$   loggingbs4r   r"   r'   r&   	getLoggerr2   strdictrA   r0   r.   r/   listrn   rx   rH   rM   r@   <module>r      sW   
        $
	 
	2	3	3Q3 Q4 Q Q Q Qh"%	   $'C 'C$J ' ' ' 'T%(4Z   $    B3 3      rM   