Ë
    ôSïi  ã                  óÊ   — d Z ddlmZ ddlZddlZddlmZ ddlmZ ddl	m
Z
 ddlmZ dd	lmZmZ d
dlmZmZ  ej&                  e«      ZdZe› d�ZdgZ G d„ de«      Zdd„Zy)u  Scraper Krajowego Rejestru AdwokatÃ³w (rejestradwokatow.pl).

Strona oficjalnego rejestru adwokatury (KRAIA) â€” udostÄ™pnia formularz POST
z filtrami po nazwisku/mieÅ›cie/izbie. Nie ma filtra "specjalizacja",
wiÄ™c filtrowanie po prawie rodzinnym musi nastÄ…piÄ‡ dalej w pipeline.
é    )ÚannotationsN)ÚIterator)Úurljoin)ÚBeautifulSoupé   )Úconfig)Úis_billing_errorÚnotify_billing_erroré   )ÚLeadÚScraperSourcezhttps://rejestradwokatow.plz/adwokat/wyszukajÚ2c                  ó>   ‡ — e Zd ZdZddˆ fd„Zdd„Zd	d„Zd
d„Zˆ xZS )Ú
OraScraperÚorac                óX   •— t         ‰| �  |¬«       |xs t        j                  | _        y )N)Úlimit)ÚsuperÚ__init__r   ÚCITIESÚcities)Úselfr   r   Ú	__class__s      €ú</var/www/html/scraper-prawny.klono.ai/scraper/sources/ora.pyr   zOraScraper.__init__!   s#   ø€ Ü‰Ñ˜uÐÔ%ØÒ-¤§¡ˆ�ó    c                óD  — t         j                  d|«       	 | j                  j                  t        dddd|dt
        ddœt        j                  ¬«      }|j                  d	k7  rot         j                  d
|j                  |«       t        |j                  |j                  «      r,t        dd|j                  › d|›d|j                  dd › �«       g S t        |j                  d«      }g }|j                  d«      }|s|S |j!                  d«      dd D ]:  }|j                  dd¬«      }|sŒ|j#                  t%        t&        |d   «      «       Œ< t         j                  d|t)        |«      «       |S # t        $ r#}t         j                  d||«       g cY d}~S d}~ww xY w)u7   Zwraca listÄ™ URL-i profili adwokatÃ³w z danego miasta.z[ora] searching city: %sÚ Ú0ÚWyszukaj)ÚnazwiskoÚimieÚimie2ÚulicaÚmiastoÚid_jzstatus[]Úbtn_wyszukaj)ÚdataÚtimeoutz[ora] search failed for %s: %sNéÈ   z[ora] search HTTP %d for %sr   zHTTP z
 dla city=z: i,  ÚlxmlÚtableÚtrr   ÚaT)Úhrefr.   u   [ora] %s â†’ %d profiles)ÚlogÚinfoÚsessionÚpostÚ
SEARCH_URLÚSEARCH_STATUSESr   ÚREQUEST_TIMEOUTÚ	ExceptionÚwarningÚstatus_coder	   Útextr
   r   ÚfindÚfind_allÚappendr   ÚBASEÚlen)	r   ÚcityÚrÚeÚsoupÚurlsr+   Úrowr-   s	            r   Ú_search_cityzOraScraper._search_city&   s  € ä�‰Ð+¨TÔ2ð	Ø—‘×!Ñ!Üà "ØØØØ"ØÜ /Ø$.ñ	ô ×.Ñ.ð "ó ˆAð" �=‰=˜CÒÜ�K‰KÐ5°q·}±}ÀdÔKÜ §¡¨¯©Ô6Ü$ØØ˜AŸM™M˜?¨*°T°H¸B¸q¿v¹vÀdÀs¸|¸nÐMôð ˆIä˜QŸV™V VÓ,ˆØˆØ—	‘	˜'Ó"ˆÙØˆKØ—>‘> $Ó'¨¨Ð+ò 	6ˆCØ—‘˜ 4�Ó(ˆAÚØ—‘œG¤D¨!¨F©)Ó4Õ5ð	6ô 	�‰Ð+¨T´3°t³9Ô=Øˆøô- ò 	Ü�K‰KÐ8¸$ÀÔBØ�Iûð	ús   ˜=E3 Å3	FÅ<FÆFÆFc                óœ  — | j                  |«      }|€y t        |j                  d«      }d }|j                  d«      D ]/  }|j	                  dd¬«      }|sŒd|vsŒt        |«      dk  sŒ-|} n d }|j                  dd	¬
«      D ]k  }|j                  d«      xs dj                  «       }	|j                  d«      xs dj                  «       }
|	sŒL|
sŒO|	› d|
› �}d|
j                  «       vsŒi|} n d }d }d }d }d }d }|j                  d«      D ]L  }d|j	                  dd¬«      j                  «       v sŒ'|j                  d¬
«      xs |j                  d«      } n |�r|j                  d«      }|�r
t        |«      }dj                  |«      }|s| j                  |«      }| j                  |«      }|D �cg c]  }|sŒ|dk7  sŒ|‘Œ }}t        |«      D ]¤  \  }}t!        j"                  d|«      }|sŒ|j%                  d«      }|j%                  d«      j                  «       }|dkD  r)||dz
     }|j                  «       j'                  d«      s|}|dkD  r"|s ||dz
     }t!        j(                  d|«      s|} n |r|r||vr|› d|› �}n|r|}n	|rd|› �}ny t+        || j,                  |r|rd|› �nd|||||d|i¬ «	      }|S c c}w )!Nr*   Úh2ú T)Ústripu   SzczegÃ³Å‚owéd   ÚdivÚ	address_e)Úclass_zdata-ear   zdata-ebú@zadwokatura.plÚh3zMIEJSCE WYKONYWANIAÚline_list_Kú
Ú
Kancelariaz(\d{2}-\d{3})\s+(.+)r   r   r   )Úemailu
   komÃ³rkowyÚstacjonarnyÚbrakz\d{2}-\d{3}u    â€” zAdwokat z
Adwokat / ÚAdwokatÚprofile_url)	ÚnameÚsourceÚnameMorer?   ÚstreetÚ
postalCoderS   ÚphoneÚextra)Úgetr   r9   r;   Úget_textr>   rI   ÚlowerÚupperÚ	find_nextr:   Ú_split_on_brÚjoinÚextract_emailÚextract_phoneÚ	enumerateÚreÚmatchÚgroupÚ
startswithÚsearchr   rX   )r   Úurlr@   rB   Úperson_namerG   ÚtxtrS   Úaddr_divÚeaÚebÚ	candidateÚkancelaria_namer[   Úpostalr?   r]   ÚsectionrO   ÚblockÚlinesÚrawÚlÚcontent_linesÚiÚlineÚmÚdisplay_nameÚleads                                r   Ú_parse_detailzOraScraper._parse_detailQ   s  € Ø�H‰H�S‹MˆØˆ9ØÜ˜QŸV™V VÓ,ˆð #'ˆØ—-‘- Ó%ò 	ˆBØ—+‘+˜c¨�+Ó.ˆCÚ�~¨SÒ0´S¸³XÀ³^Ø!�Ùð		ð !ˆØŸ™ e°K˜Ó@ò 	ˆHØ—,‘,˜yÓ)Ò/¨R×6Ñ6Ó8ˆBØ—,‘,˜yÓ)Ò/¨R×6Ñ6Ó8ˆBÚ’bØ!˜d ! B 4˜L�	Ø"¨"¯(©(«*Ò4Ø%�EÙð	ð '+ˆØ!ˆØ!ˆØˆØ ˆàˆØ—-‘- Ó%ò 	ˆBØ$¨¯©°C¸t¨Ó(D×(JÑ(JÓ(LÒLØŸ,™,¨m˜,Ó<ÒSÀÇÁÈUÓ@S�Ùð	ò
 Ø—L‘L Ó'ˆEÚä$ UÓ+�Ø—i‘i Ó&�áØ ×.Ñ.¨sÓ3�EØ×*Ñ*¨3Ó/�ð -2Ö M q²Q¸1ÀÓ;L¢Ð M�Ð Mô  )¨Ó7ò ‘G�A�tÜŸ™Ð!8¸$Ó?�AÚØ!"§¡¨£˜Ø Ÿw™w q›z×/Ñ/Ó1˜à˜qš5Ø(5°a¸!±eÑ(<˜IØ#,§?¡?Ó#4×#?Ñ#?Ð@nÔ#oØ)2 à˜qš5©Ø(5°a¸!±eÑ(<˜IÜ#%§9¡9¨^¸YÔ#GØ2; Ùðñ& ™{¨{À/Ñ/QØ-Ð.¨e°K°=ÐA‰LÙØ*‰LÙØ% k ]Ð3‰LàäØØ—9‘9Ù3>Á?�z + Ñ/ÐXaØØØØØØ  #Ð&ô

ˆð ˆùòU !Ns   Æ:K	ÇK	ÇK	c              #  óv  K  — d}| j                   D ]¤  }| j                  |«      }|D ]n  }| j                  r|| j                  k\  r  y | j                  |«      }|sŒ5|j	                  «       s!t
        j                  d|j                  «       Œf|dz  }|–— Œp | j                  sŒ”|| j                  k\  sŒ¤ y  y ­w)Nr   z[ora] skipped invalid lead: %sr   )r   rE   r   r‚   Úis_validr/   ÚdebugrX   )r   Úyieldedr?   rC   rn   r�   s         r   ÚfetchzOraScraper.fetch¶   s¬   è ø€ ØˆØ—K‘Kò 	ˆDØ×$Ñ$ TÓ*ˆDØò 
�Ø—:’: '¨T¯Z©ZÒ"7ÚØ×)Ñ)¨#Ó.�ÙØØ—}‘}”Ü—I‘IÐ>ÀÇ	Á	ÔJØØ˜1‘�Ø“
ð
ð �z‹z˜g¨¯©Ó3Ùñ	ùs   ‚B"B9Â%B9Â5B9)NN)r   z
int | Noner   zlist[str] | None)r?   ÚstrÚreturnú	list[str])rn   rˆ   r‰   zLead | None)r‰   zIterator[Lead])	Ú__name__Ú
__module__Ú__qualname__rX   r   rE   r‚   r‡   Ú__classcell__)r   s   @r   r   r      s   ø„ Ø€Dö.ó
(óVb÷Jr   r   c                óÒ  — g }g }| j                   D ]Œ  }t        |dd«      dk(  rJdj                  |«      j                  «       }|r&|j	                  t        j                  dd|«      «       g }Œ]t        |t        «      sŒn|j	                  |j                  «       «       ŒŽ dj                  |«      j                  «       }|r&|j	                  t        j                  dd|«      «       |S )u;   Rozbija zawartoÅ›Ä‡ tagu na linie wedÅ‚ug znacznikÃ³w <br>.rX   NÚbrrH   z\s+)	ÚdescendantsÚgetattrre   rI   r<   ri   ÚsubÚ
isinstancerˆ   )Útagry   ÚbufÚchildr9   s        r   rd   rd   É   s¼   € à€EØ€CØ—‘ò &ˆÜ�5˜& $Ó'¨4Ò/Ø—8‘8˜C“=×&Ñ&Ó(ˆDÙØ—‘œRŸV™V F¨C°Ó6Ô7Ø‰CÜ˜œsÕ#Ø�J‰J�u—{‘{“}Õ%ð&ð �8‰8�C‹=×ÑÓ €DÙØ�‰”R—V‘V˜F C¨Ó.Ô/Ø€Lr   )r‰   rŠ   )Ú__doc__Ú
__future__r   Úloggingri   Útypingr   Úurllib.parser   Úbs4r   r   r   Únotifierr	   r
   Úbaser   r   Ú	getLoggerr‹   r/   r=   r3   r4   r   rd   © r   r   ú<module>r¢      sh   ðñõ #ã Û 	Ý Ý  å å ß =ß %à€g×Ñ˜Ó!€à$€ØˆvÐ&Ð'€
ð �%€ôh�ô hôVr   