
    Pnhh;                         d dl Z d dl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 d dlmZ d dlmZ d d	lmZ d dlZd d
lmZ  G d d          Zd Zedk    r e             dS dS )    N)	webdriver)By)WebDriverWait)expected_conditions)Options)Service)ChromeDriverManager)BeautifulSoup)datetimec                   B    e Zd Zd Zd Zd ZddZd Zd Zdd	Z	d
 Z
dS )AliExpressParserc                 F    |                                   ddddd| _        d S )Nz	127.0.0.1aliexpress_automationautomation_userAutoPass123)hostdatabaseuserpassword)setup_driver	db_configselfs    G/var/www/html/mycamper/aliexpress-site/backend/api/aliexpress_parser.py__init__zAliExpressParser.__init__   s2    /%%	
 
    c                    t                      }|                    d           |                    d           |                    d           |                    d           |                    ddg           |                    dd           |                    d	           t          t	                                                                }t          j        ||
          | _        | j        	                    d           dS )u*   Настройка веб-драйвераz
--headlessz--no-sandboxz--disable-dev-shm-usagez---disable-blink-features=AutomationControlledexcludeSwitcheszenable-automationuseAutomationExtensionFz--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36)serviceoptionszEObject.defineProperty(navigator, 'webdriver', {get: () => undefined})N)
r   add_argumentadd_experimental_optionr   r	   installr   Chromedriverexecute_script)r   chrome_optionsr    s      r   r   zAliExpressParser.setup_driver   s    ##L111##N333##$=>>>##$STTT../@CVBWXXX../GOOO##  %g  	h  	h  	h-//7799::&wOOO""#jkkkkkr   c                 	   	 t          d|            | j                            |           t          j        d           t          | j        d                              t          j        t          j
        df                     i }	 | j                            t          j        d          }|j                                        |d<   nV#  	 | j                            t          j        d          }|j                                        |d<   n#  d|d<   Y nxY wY nxY w	 | j                            t          j        d          }|j                                        }t          j        d	|                    d
d                    }|rMt%          |                                                    dd                              d
d                    |d<   nd|d<   n#  d|d<   Y nxY w	 | j                            t          j        d          }|j                                        }t          j        d	|                    d
d                    }	|	rMt%          |	                                                    dd                              d
d                    |d<   nd|d<   n#  d|d<   Y nxY w	 | j                            t          j        d          }
|
                    d          |d<   n#  d|d<   Y nxY w	 | j                            t          j        d          }|j                                        }t          j        d|          }|r%t%          |                                          |d<   nd|d<   n#  d|d<   Y nxY w	 | j                            t          j        d          }|j                                        }t          j        d|                    d
d                              dd                    }|r%t+          |                                          |d<   nd|d<   n#  d|d<   Y nxY w	 | j                            t          j        d          }|j                                        dd         |d<   n#  d|d<   Y nxY w||d<   d|d <   |S # t,          $ r }t          d!| d"|            Y d}~dS d}~ww xY w)#u?   Парсинг отдельной страницы товараu   Парсинг товара:    
   h1titlez[data-pl='product-title']u$   Название не найденоz#[class*='price'] [class*='current']z[\d,\s]+\.?\d*,  pricer   z$[class*='price'] [class*='original']original_priceNz[class*='image'] imgsrc
main_imagez[class*='rating']z(\d+\.?\d*)ratingz[class*='order']z(\d+)orders_countz[class*='description']i  original_descriptionaliexpress_linkactivestatusu2   Ошибка при парсинге товара : )printr&   gettimesleepr   untilECpresence_of_element_locatedr   TAG_NAMEfind_elementCSS_SELECTORtextstripresearchreplacefloatgroupget_attributeint	Exception)r   urlproduct_datatitle_elementprice_element
price_textprice_matchold_price_elementold_price_textold_price_matchimg_elementrating_elementrating_textrating_matchorders_elementorders_textorders_matchdesc_elementes                      r   parse_product_pagez#AliExpressParser.parse_product_page)   s   \	7#77888KOOC   JqMMM $+r**00.T/BCC   LS $ 8 8$ O O(5(:(@(@(B(BW%%SS$(K$<$<R_Ni$j$jM,9,>,D,D,F,FL))S,RL)))	* $ 8 8Jo p p*/5577
 i(9:;M;McSU;V;VWW .,1+2C2C2E2E2M2McSU2V2V2^2^_bdf2g2g,h,hL)),-L)*()W%%%	6$(K$<$<R_Nt$u$u!!2!7!=!=!?!?"$),=~?U?UVY[]?^?^"_"_" :5:?;P;P;R;R;Z;Z[^`b;c;c;k;kloqs;t;t5u5uL!12259L!12615-...2"k66rH^__-8-F-Fu-M-M\**2-1\***	+!%!9!9"/K^!_!_,17799!yEE /-2<3E3E3G3G-H-HL**-.L*+)*X&&&	1!%!9!9"/K]!^!^,17799!y;3F3FsB3O3O3W3WX[]_3`3`aa 536|7I7I7K7K3L3LL0034L01/0^,,,:#{77Iabb7C7H7N7N7P7PQVRVQV7W344:793444.1L*+%-L" 	 	 	QsQQaQQRRR44444	s   BR% AC R% D ADD DD R% $B;G  R%  G)'R% -B;J) (R% )J20R% 6=K4 3R% 4K=;R% A?N  R% N
R% B'P6 5R% 6P?=R% A	R R% RR% %
S/S

Sr*   c                    g }t          d|dz             D ]}	 d| d| }t          d|            | j                            |           t	          j        d           t          | j        d                              t          j	        t          j        df                     g }| j                            t          j        d          }|d	d         D ]Q}|                    d
          }	|	r8d|	v r4|	                    d          d         }
|
|vr|                    |
           Rt          dt!          |           d|            |D ]B}|                     |          }|r)|                    |           t	          j        d           C~# t$          $ r }t          d| d|            Y d	}~d	}~ww xY w|S )u-   Поиск товаров по запросу   z0https://www.aliexpress.com/wholesale?SearchText=z&page=u.   Парсинг страницы поиска: r*   r+   z[class*='item']za[href*='/item/']Nhrefz/item/?r   u   Найдено u&    товаров на странице    u6   Ошибка при парсинге страницы r;   )ranger<   r&   r=   r>   r?   r   r@   rA   rB   r   rE   find_elementsrM   splitappendlenrb   rO   )r   search_query	max_pagesproductspage
search_urlproduct_linkslink_elementselementre   	clean_urllinkrQ   ra   s                 r   search_productsz AliExpressParser.search_products   s   !Y]++ $	 $	D#jP\jjdhjj
MtMMNNN
+++
1 dk2..442BOEV3WXX  
 !# $ 9 9"/K^ _ _,SbS1 < <G"0088D <D 0 0$(JJsOOA$6	$M99)00;;;hM(:(:hhbfhhiii * & &D#'#:#:4#@#@L# & 555
1	&    ZtZZWXZZ[[[ s   E8F
F>F99F>c                     |dz   |z                                    g dg dg dg dg dg dd}|                                D ]$\  }}t          fd	|D                       r|c S %d
S )uS   Автоматическое определение категории товараr0   )u   солнечная панельu   батареяu   инверторu   зарядноеu   фонарикu
   радиоgpsu   навигаторu   аккумуляторz
power bankledu   освещениеsolarbatterychargerpower)u   плиткаu   котелокu   сковородаu   холодильникu   термосu   посудаu   газu   горелкаu   кастрюляu   мультиваркаstovepotfridgecooking)u   спальникu   подушкаu   матрасu   одеялоu   креслоu   столu   шезлонгu
   гамакu   палаткаu   тентsleepingpillowmattresschairtabletent)u   инструментu   отверткаu   ключ
   насосu   компрессорu   домкратu   тросu
   канатu   лебедкаtoolpump
compressorjack)u   аптечкаu   огнетушительu   сигнализацияu
   замокu   сейфu   датчикu   камераu   охранаsafetyalarmlockcamera)u   фильтрr   u   бакu   кранu
   шлангu   душu   туалетu   септикu   очисткаfiltertankhoseshowerwater)electronicsr   comforttoolsr   r   c              3       K   | ]}|v V  	d S )N ).0keywordrF   s     r   	<genexpr>z6AliExpressParser.categorize_product.<locals>.<genexpr>   s'      ;;w7d?;;;;;;r   other)loweritemsany)r   r-   description
categoriescategorykeywordsrF   s         @r   categorize_productz#AliExpressParser.categorize_product   s    k)0022 c  c  c y  y  y t  t  t X  X  X P  P  P A  A  A
 

 #-"2"2"4"4 	  	 Hh;;;;(;;;;;    wr   c                    	 t          j        di | j        }|                                }d}g }|D ]}	 |                    d|d         f           |                                r|                    d|d                     T|                     |d         |                    dd                    }d}|                    ||d         |                    dd          |d	         |                    d
          |                    d          ||d         |                    dd          |                    dd          dt          j
                    t          j
                    f           |dz  }t          d|d                     ]# t          $ r9}	|                    d|d          dt          |	                      Y d}	~	d}	~	ww xY w|                                 |                                 |                                 ||dS # t          $ r/}	t          d|	            dt          |	          gdcY d}	~	S d}	~	ww xY w)u<   Сохранение товаров в базу данныхr   z`
                        SELECT id FROM products WHERE aliexpress_link = %s
                    r8   u(   Товар уже существует: r-   r7   r/   az  
                        INSERT INTO products (
                            title, original_description, price, original_price,
                            main_image, category, aliexpress_link, rating, orders_count,
                            status, created_at, updated_at
                        ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
                    r1   r2   r4   r5   r6   r9   rd   u   Добавлен товар: u6   Ошибка при добавлении товара r;   N)added_counterrorsu>   Ошибка подключения к базе данных: r   )psycopg2connectr   cursorexecutefetchonerk   r   r=   r   nowr<   rO   strcommitclose)
r   ro   connr   r   r   productr   insert_queryra   s
             r   save_to_databasez!AliExpressParser.save_to_database   s   A	:#55dn55D[[]]FKF# -y -y,yNN $!"3468 8 8 (( !&cQXY`Qa&c&cddd   $66($:B??   H$L NN<($:B??($455L11  12Ha00NA66   2     1$KL'':JLLMMMM  y y yMM"w[bcj[k"w"worstouou"w"wxxxxxxxxy KKMMMLLNNNJJLLL  +   
  	: 	: 	:VSTVVWWW#$Q99999999	:sU   3H AFH DFH 
G.GH GAH 
I $I
I
Irg   c                    g }|D ]T}t          d| d           |                     ||          }|                    |           t          j        d           U|rt          dt          |           d           |                     |          }t          d|d                     |d         r,t          d	           |d         D ]}t          d
|            |S )uH   Основная функция парсинга и сохраненияu)   
=== Парсинг по запросу: z ===   u   
=== Сохранение u,    товаров в базу данных ===u#   Добавлено товаров: r   r   u   Ошибки:z- )r<   rw   extendr>   r?   rl   r   )r   search_queriesrn   all_productsqueryro   resulterrors           r   parse_and_savezAliExpressParser.parse_and_save  s   # 	 	EJuJJJKKK++E9==H)))JqMMMM 	(oL0A0Aoooppp**<88FO}8MOOPPPh (o&&&#H- ( (E,u,,''''r   c                 8    | j                                          dS )u!   Закрытие драйвераN)r&   quitr   s    r   r   zAliExpressParser.close"  s    r   N)r*   )rg   )__name__
__module____qualname__r   r   rb   rw   r   r   r   r   r   r   r   r   r      s        
 
 
l l l^ ^ ^@* * * *X  &C: C: C:J   *    r   r   c                  F   t                      } 	 g d}|                     |d          }t          dt          |                      n)# t          $ r}t          d|            Y d }~nd }~ww xY w|                                  d S # |                                  w xY w)N)zcamping solar panelz
rv batteryzportable camping stovezcamping mattresszcar fridge 12vzcamping water filterzrv toolszcamping led lightsrg   )rn   u-   
Всего спарсено товаров: u   Ошибка: )r   r   r<   rl   rO   r   )parserr   ro   ra   s       r   mainr   '  s    F	
 	
 	
 ((1(EENs8}}NNOOOO $ $ $"q""########$ 	s/   :A 
B
 
A1A,'B
 ,A11B
 
B __main__)r>   jsonrH   requestsseleniumr   selenium.webdriver.common.byr   selenium.webdriver.support.uir   selenium.webdriver.supportr   rA   !selenium.webdriver.chrome.optionsr   !selenium.webdriver.chrome.servicer   webdriver_manager.chromer	   bs4r
   r   r   r   r   r   r   r   r   <module>r      s8     				        + + + + + + 7 7 7 7 7 7 @ @ @ @ @ @ 5 5 5 5 5 5 5 5 5 5 5 5 8 8 8 8 8 8             T T T T T T T Tn  0 zDFFFFF r   