
    hgbF                     *   d dl Z 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  ej        e          Z ej        d          Z ej                    Ze                    e           e                    e            G d d	          ZdS )
    N   )Initializer)	Utilities)Finder)Scraping_utilitiesz4%(asctime)s - %(name)s - %(levelname)s - %(message)sc                   t    e Zd Z	 	 ddZd Zd	 Zd
 Zd Zd Z e	j
                    fdZd Zd Zd Zd ZdS )Facebook_scraper
   chromeNX  TFc
                 ,   || _         t          |          | _        d                    | j                   | _        || _        d| _        || _        d| _        || _	        || _
        || _        || _        |	| _        i | _        t                      | _        d S )Nzhttps://facebook.com/{} )page_or_group_nameintposts_countformatURLbrowser_Facebook_scraper__driverproxy_Facebook_scraper__layouttimeoutheadlessisGroupusernamepassword_Facebook_scraper__data_dictset!_Facebook_scraper__extracted_post)
selfr   r   r   r   r   r   r   r   r   s
             V/var/www/fb-scrape/myenv/lib/python3.11/site-packages/facebook_page_scraper/scraper.py__init__zFacebook_scraper.__init__)   s    "4{++,33D4KLL
    #    c                 t    t          | j        | j        | j                                                  | _        dS )z9changes the class member __driver value to driver on callN)r   r   r   r   initr   r    s    r!   __start_driverzFacebook_scraper.__start_driver<   s0    #L$*dm5 559TVV 	r#   c                 z   	 |dk    r4t          j        | j                   t          j        | j                   d S |dk    r4t          j        | j                   t          j        | j                   d S d S # t          $ r8}t                              d	                    |                     Y d }~d S d }~ww xY w)NoldnewzError at handle_popup : {})
r   _Utilities__close_error_popupr   _Utilities__close_popup,_Utilities__close_modern_layout_signup_modal._Utilities__close_cookie_consent_modern_layout	Exceptionlogger	exceptionr   )r    layoutexs      r!   __handle_popupzFacebook_scraper.__handle_popupA   s    	F7FFF1$-@@@@@5FM# # #HM# # # # # !  	F 	F 	F9@@DDEEEEEEEEE	Fs   8A8 8A8 8
B:-B55B:c                     ||z
  | j         k    S )N)r   )r    
start_timecurrent_times      r!   __check_timeoutz Facebook_scraper.__check_timeoutQ   s    Z'4<77r#   c                 <   |                                   t          j                    }| j                            | j                   | j        d uo$t          j        | j        | j        | j                   t          j	        | j                   t          j
        | j                  | _        t          j        | j                   t          j        | j        | j        | j                  }t          j        | j        | j                   |                     | j                   t%          | j                  | j        k     r|r|                     | j                   |                                  t          j                    }|                     ||          du r?t.                              t2          j                   t.                              d           n>t          j        | j        | j                   t%          | j                  | j        k     r|t          j        | j                   t;          t=          | j                                                  dtA          | j                                     | _        tC          j"        | j        d          S )NTz
Timeout...r   F)ensure_ascii)#_Facebook_scraper__start_drivertimer   getr   r   r   _Finder__loginr   _Finder__accept_cookies_Finder__detect_uir   r   r+   &_Utilities__wait_for_element_to_appearr   _Utilities__scroll_down_Facebook_scraper__handle_popuplenr   r    _Facebook_scraper__find_elements _Facebook_scraper__check_timeoutr0   setLevelloggingINFOinfo_Utilities__close_driverdictlistitemsr   jsondumps)r    starting_timeelements_have_loadedr7   s       r!   scrap_to_jsonzFacebook_scraper.scrap_to_jsonT   s0   	$(###T!hf&;DM4=Z^Zg&h&h&t}5551$-@@ 	/>>>(OM4=$, 8  8 	)$-GGGDM***$"##d&666;O6...  """9;;L##M<@@DHH---L)))-t}. . . $"##d&666;O6 	*4=999T%5%;%;%=%= > > !#d&6"7"7 7!9 : : z$*????r#   c           
      ,   t          j        |           g d}d}t           j                            d                    |                    rd}t          d                    |          |dd          5 }t          j        ||          }|dk    r|                                 |D ]}||         }	|		                    d	i           }
i d
|d|		                    dd          d|		                    dd          d|
	                    dd          d|
	                    dd          d|
	                    dd          d|
	                    dd          d|
	                    dd          d|
	                    dd          d|
	                    dd          d|		                    dd          d|		                    dd          d|		                    dd          d|		                    dd          d|		                    dd          dd
                    |		                    dg                     d|		                    dd          }|                    |           |                                 d d d            d S # 1 swxY w Y   d S )N)idnameshareslikesloveswowcaressadangryhahareactions_countcommentscontent	posted_onvideoimagespost_urlwz{}.csvar   zutf-8)newlineencoding)
fieldnames	reactionsrU   rV   rW   r   rX   rY   rZ   r[   r\   r]   r^   r_   reaction_countr`   ra   rb   rc   rd    re   )oschdirpathexistsr   opencsv
DictWriterwriteheaderr=   joinwriterowclose)r    filename	json_data	directoryrj   mode	data_filewriterkeypostrk   rows               r!   __json_to_csvzFacebook_scraper.__json_to_csv{   s   
M M M
 7>>(//(3344 	D(//(++T2PPP 	T]^I*EEEFs{{""$$$  % % ~ HH["55	#DHHVR00 dhhx33 Y]]7A66	
 Y]]7A66 9==22 Y]]7A66 9==22 Y]]7A66 IMM&!44 &txx0@!'D'D R 8 8 txx	266  +r!:!: TXXgr22  chhtxx"'='=>>!" R 8 8#& $$$$OO?	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   5HJ		JJc                    	 |                                  }|                     |t          j        |          |           dS # t          $ r8}t
                              d                    |                     Y d }~dS d }~ww xY w)NTzError at scrap_to_csv : {}F)rS   _Facebook_scraper__json_to_csvrO   loadsr/   r0   r1   r   )r    ry   r{   datar3   s        r!   scrap_to_csvzFacebook_scraper.scrap_to_csv   s    	%%''DxD)9)99EEE4 	 	 	9@@DDEEE55555	s   =A 
B-A>>Bc                      t           j                  dk    r j                            |           |S  fd|D             } j                            |           |S )zItakes a list of posts and removes duplicates from it and returns the listr   c                 &    g | ]}|j         v|S  )r   ).0r   r    s     r!   
<listcomp>z8Facebook_scraper.__remove_duplicates.<locals>.<listcomp>   s0     "Q "Q "Qd$:O.O.O.O.O.Or#   )rD   r   update)r    	all_postsremoved_duplicateds   `  r!   __remove_duplicatesz$Facebook_scraper.__remove_duplicates   s    t$%%**!((333"Q "Q "Q "Q!*"Q "Q "Q !((333%%r#   c                     | j         dk    S )z"returns if class member retry is 0r   )retryr&   s    r!   __close_after_retryz$Facebook_scraper.__close_after_retry   s    zQr#   c                 P    t          |          dk    r| xj        dz  c_        dS dS )z)if all_posts were found to be length of 0r   r   N)rD   r   )r    r   s     r!   __no_post_foundz Facebook_scraper.__no_post_found   s.    y>>QJJ!OJJJJ r#   c           
      	   t          j        | j        | j        | j                  }t          dt          t          |                    z              |                     |          }|D ]}	 t          j	        || j        | j                  \  }}}|t          d           :|
                    d          }|d         }t          j        | j        r|n| j        | j                  }t          j        || j        | j                  }| j        st          j        || j                  }	t          t          j        |	                    }	t          j        |          }
t%          |
          t          k    rt          j        | j        |
          nd}t%          |          t(          k    rd |D             }ng }t          j        |d          }t          j        |d	          }t          j        |d
          }t          j        |d          }t          j        |d          }t          j        |d          }t          j        |d          }t          j        |          }t          j        |          }t          j        |          }t          j        |          }t          j        |          }t          j        |          }t          j        |          }t          |          t          |          t          |          t          |          t          |          t          |          t          |          d}t          j        |          }t          j        || j                  }t          t          j        |                    }t          j        || j        || j        | j                  }t          j        |          }t          j        || j                  }||||d| j        sd|	ini | j        sd|ini | j        sd|ini | j        sd|ini | j        sd|ini | j        sd|ini | j        |<   # t8          $ r8}t:                              d                    |                     Y d}~d}~ww xY wdS )z0find elements of posts and add them to data_dictzall_posts length: Nzno post_url, skipping?r   r   c                 8    g | ]}|                     d           S )z
aria-label)get_attribute)r   is     r!   r   z4Facebook_scraper.__find_elements.<locals>.<listcomp>   s4     9 9 9 ! __\:: 9 9 9r#   LikeLoveWowCareSadAngryHaha)rX   rY   rZ   r[   r\   r]   r^   )rV   ra   rd   re   rW   rk   rl   r`   rb   rc   z"Error at find_elements method : {}) r   _Finder__find_all_postsr   r   r   printstrrD   $_Facebook_scraper__remove_duplicates_Finder__find_statussplit_Finder__find_name_Finder__find_content_Finder__find_sharer   r   #_Scraping_utilities__value_to_float_Finder__find_reactionstype_Finder__find_reactionrM   *_Scraping_utilities__find_reaction_by_text#_Scraping_utilities__count_reaction_Finder__find_comments_Finder__find_posted_time_Finder__find_video_url_Finder__find_image_urlr   r/   r0   r1   r   )r    r   r   statusre   link_elementpartsrV   post_contentrW   reactions_allall_hrefs_in_reactlrX   rY   rZ   r[   r\   r]   r^   rk   total_reaction_countr`   posted_timerc   imager3   s                              r!   __find_elementsz Facebook_scraper.__find_elements   sn   2M4=$,8 8	"SY%8%88999 ,, 	  @	E @	EDE171L$-27 27.,#1222 !s++ 8 0 L;DDdmT]L L  &;$- 8  8
 | QA#7dmLLF !*NvVVX XF %+$B4$H$HMim%j' j'*-j. j.)Ft}Vc)e)e)e35 '
 .//4779 9%79 9 9  /Y6# #E /Y6# #E -W5" "C /Y6# #E -W5" "C /Y7$ $E .X6# #D
 /R E.R E,P C.R E,P C.R E-Q D +.e**s5zzRUVYRZRZehineoeox{|  yA  yA #E

CII!? !?I
 ,>+a!,# ,#(  &<T4=QQH"*NxXX Z  ZH
 #)"Bdm\4=$,#X #XK #:4@@E6tT]KK
 !+# (	, , 26E&))2, 8<|KY//, HL|[(*>??Y[, 6:\I
H--r, :>M[112, 04|C'', ((  E E E  8??CCE E E E E E E EE}@	E @	Es   -5Q#NQ
R-Q>>R)r
   r   Nr   TFNN)__name__
__module____qualname__r"   r;   rC   rF   rS   r   rn   getcwdr   r   $_Facebook_scraper__close_after_retry _Facebook_scraper__no_post_foundrE   r   r#   r!   r	   r	      s        * TXTX& & & &&< < <
F F F 8 8 8%@ %@ %@N* * *X 09ry{{    & & &    KE KE KE KE KEr#   r	   )rs   rO   rH   rn   r<   driver_initializationr   driver_utilitiesr   element_finderr   scraping_utilitiesr   	getLoggerr   r0   	Formatterr   StreamHandlerchsetFormatter
addHandlerr	   r   r#   r!   <module>r      s   



   				  . . . . . . ' ' ' ' ' ' " " " " " " 2 2 2 2 2 2		8	$	$		:
< 
<W       "   @E @E @E @E @E @E @E @E @E @Er#   