+
    i              
       J   R t ^ RIt^ RIt^ RItRtRR/tR tR tR t	R t
]R	8X  d   ]
! 4       t]! R
]! ]4       R24       ] F  t]R,          '       d   ]R,          R R2P!                  RR4      MRt]! R]R,           24       ]! R]P%                  RR4       R]P%                  RR4       R] 24       ]! R]R,           24       ]! 4        K  	  ]! RRRR7      ;_uu_ 4       t]P*                  ! ]]R^R 7       RRR4       ]! R!4       R# R#   + '       g   i     L; i)"u{   
Matrix Motors Berlin — Scraper standalone
WordPress + WP Car Showroom plugin, HTML statique, 3 pages de ~20 véhicules.
Nz,https://matrix-automobile.de/alle-fahrzeuge/z
User-AgentzBMozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36c                P   V ^8:  d   \         M\          RV  R2p\        P                  P                  V\        R7      p\        P                  P                  V^R7      ;_uu_ 4       pVP                  4       P                  RRR7      uuRRR4       #   + '       g   i     R# ; i)	z&Fetch une page du listing (1-indexed).zpage//)headers)timeoututf-8replace)errorsN)BASE_URLurllibrequestRequestHEADERSurlopenreaddecode)page_numurlreqresps   &   5/Users/nicolassansonetti/CarsSearch/matrix_scraper.py
fetch_pager      sy    !m(H:U8*A)FC
..
 
 g
 
6C			R		0	0Dyy{!!')!< 
1	0	0	0s   (!BB%	c           
        . p\         P                  ! RV 4      pV EF  pRRRRRR/p\         P                  ! RV4      pV'       d   VP                  ^4      MR	VR
&   \         P                  ! RV4      pV'       d   VP                  ^4      MR	VR&   \         P                  ! RV4      p\         P                  ! RV4      p\         P                  ! RV4      p	V'       d    VP                  ^4      P	                  4       MRVR&   V'       d    VP                  ^4      P	                  4       MRVR&   V	'       d    V	P                  ^4      P	                  4       MRp
VR,           RVR,           2P	                  4       VR&   V
'       d   VR;;,          RV
 2,          uu&   \         P                  ! RV4      pV'       d5   \        \         P                  ! RRVP                  ^4      4      4      VR&   MR	VR&   \         P                  ! RV4      pV'       dt   VP                  ^4      P	                  4       P                  R4      p\        V4      ^8  d0   VR,          P                  4       '       d   \        VR,          4      MR	VR&   MR	VR&   \         P                  ! RV4      pV'       d    VP                  ^4      P	                  4       MR	VR&   R	VR&   R	VR&   VP                  V4       EK  	  V# ) u<   Extrait les véhicules depuis le HTML d'une page de listing.z:<article class=\"vehicle-on-archive\">([\s\S]*?)</article>sourcezmatrix-automobilepaysDEdeviseEURz6href="(https://matrix-automobile\.de/fahrzeuge/[^"]+)"Nr   z>src="(https://matrix-automobile\.de/wp-content/uploads/[^"]+)"imagez!<span class="make">([^<]+)</span>z"<span class="model">([^<]+)</span>z.<span class="model_description">([^<]+)</span> marquemodele titrezclass="fact mileage">([^<]+)z[^\d]kmz'class="fact first_registration">([^<]+)r   anneezclass="fact power">([^<]+)	puissanceprixprix_ht)refindallsearchgroupstripintsubsplitlenisdigitappend)htmlvehiclesarticlesartvlinkimgmakemodeldescvariantkm_mreg_mpartspower_ms   &              r   parse_articlesrC      sV   HzzWY]^H*FD(EJ yyRTWX$(4::a=d%iiY[^_%(SYYq\d'
 yy=sC		?EyyJCP/3djjm))+(05ekk!n**,2(+/$**Q-%%'R(}Aak]399;'
gJAgY-'J yy8#>"&&2tzz!}=>AdGAdG		DcJKKN((*005E+.u:?uRy?P?P?R?RU2YX\AgJAgJ))93?5<q)//1$+ &	)S V O    c           	     V   . p\         P                  ! RV 4      pV F  p\         P                  ! RV4      pV'       g   K$  \        VP	                  ^4      P                  RR4      4      pRV9   ;'       g    RV9   pRV9   ;'       g    RV9   pVP                  R	VRVRV/4       K  	  V# )
zGExtrait les paires prix brut/net depuis les blocs car_price de la page.zclass="car_price">([^<]+)z([\d.]+).r   BruttobruttoNettonettoamount)r)   r*   r+   r.   r,   r   r3   )r4   pricesblocksbvalrK   	is_bruttois_nettos   &       r   extract_pricesrR   J   s    FZZ4d;FiiQ'31--c267F A66QI!|33w!|HMM8VXy'8TU  MrD   c                    . p \        4       p\        ^4      p\        P                  ! RV4      p^pV'       dB    \        P
                  ! VP                  ^4      4      p\        VP                  R^4      4      p\        ^V^,           4       EF<  pV^8X  d   TM
\        V4      p\        V4      p\        V4      p	V	 Uu. uF  qUR,          '       g   K  VR,          NK  	  p
pV	 Uu. uF  qUR,          '       g   K  VR,          NK  	  pp\        V4       F  w  rV\        V
4      8  d   W,          VR&   V\        V4      8  d   W,          VR&   VR,          '       g   KL  VR,          V9  g   K\  VP!                  VR,          4       V P#                  V4       K  	  \%        R	V R
V R\        V4       R\        V
4       R2	4       EK?  	  V #   \        P                  \        3 d     ELti ; iu upi u upi )u9   Scrape toutes les pages et retourne la liste normalisée.z-var vehicle_list_properties\s*=\s*(\{[^;]+\})	max_pagesrH   rK   rJ   r&   r'   r   z  Page r   z : u    véhicules, z prix)setr   r)   r+   jsonloadsr,   r.   getJSONDecodeError
ValueErrorrangerC   rR   	enumerater1   addr3   print)all_vehicles	seen_urlshtml1propsrT   pr   r4   r6   rL   brutto_pricesnetto_pricesir8   s                 r   scraperg   Y   s   LI qMEIIFNEI	

5;;q>*AAEE+q12I !Y]+ Au:h+?!$'% /5Df(8fD-3BVzz(VBh'DA3}%%),&	3|$$+)xxAeHI5ah'##A& ( 	z9+SX}SQ^M_L``efg) ,, 3 $$j1 		 EBs*   A G ?G2G2'G7<G7G/.G/__main__u   
  Matrix Motors Berlin — u    véhicule(s)
r&   ,u    €rF   zN/Az  r"   z    r$   ?u    · r#   u    km · z	    URL: r   zmatrix_results.jsonwr   )encodingF)ensure_asciiindentu&     Sauvegardé dans matrix_results.json)__doc__rV   r)   urllib.requestr
   r	   r   r   rC   rR   rg   __name__r5   r^   r1   r8   r   prix_strrX   openfdump rD   r   <module>rw      s4  
  	 9]
^=0f&R zxH	)#h-
HI=>vYYai]$'//S9E1W:, QUU73'(QUU4_,=WXJOP	!E($%  
#S7	;	;q		(AE!< 
<	24  
<	;s   'DD"	