11# ProxyEater.__main__.py
22# CodeWriter21
3-
3+ import os
44import sys
55import json
66import pathlib
@@ -60,7 +60,8 @@ def scrape(args):
6060 for config in source_data :
6161 progress_callback = finish_callback = error_callback = checking_callback = None
6262 if args .verbose :
63- logger .progress_bar = log21 .ProgressBar (format_ = '{prefix}{bar}{suffix} {percentage}%' , style = '{' )
63+ logger .progress_bar = log21 .ProgressBar (format_ = 'Proxies: {count} {prefix}{bar}{suffix} {percentage}%' ,
64+ style = '{' , additional_variables = {'count' : 0 })
6465
6566 def progress_callback (scraper_ : Scraper , progress : float , page : int ):
6667 logger .info (f'{ scraper_ .name } : Collected: { scraper_ .proxies .count } ; Page: { page } , { progress :.2f} %' ,
@@ -74,7 +75,7 @@ def error_callback(scraper_: Scraper, error: Exception):
7475 logger .error (f'{ scraper_ .name } : { error .__class__ .__name__ } : { error } ' )
7576
7677 def checking_callback (proxy_list : ProxyList , progress : float ):
77- logger .progress_bar (progress , 100 )
78+ logger .progress_bar (progress , 100 , count = proxy_list . count )
7879
7980 logger .info (f'Scraping { config .get ("id" )} ...' )
8081 scraper = Scraper (config .get ('url' ), config .get ('parser' ), method = config .get ('method' ),
@@ -100,18 +101,20 @@ def checking_callback(proxy_list: ProxyList, progress: float):
100101 proxies .update (proxies_ )
101102 logger .info (f'Scraped { len (proxies )} proxies.' )
102103
103- if args .verbose :
104- logger .info (f'Writing { proxies .count } proxies to { args .output } ...' )
105- # Write to file
106- if args .format == 'text' :
107- proxies .to_text_file (args .output , '\n ' )
108- elif args .format == 'json' :
109- proxies .to_json_file (args .output , include_status = args .include_status ,
110- include_geolocation = args .include_geolocation )
111- elif args .format == 'csv' :
112- proxies .to_csv_file (args .output , include_status = args .include_status ,
113- include_geolocation = args .include_geolocation )
114- logger .info (f'Wrote { proxies .count } proxies to { args .output } .' )
104+ if proxies .count > 0 :
105+ if args .verbose :
106+ logger .info (f'Writing { proxies .count } proxies to { args .output } ...' )
107+ # Write to file
108+ if args .format == 'text' :
109+ proxies .to_text_file (args .output , '\n ' )
110+ elif args .format == 'json' :
111+ proxies .to_json_file (args .output , include_status = args .include_status ,
112+ include_geolocation = args .include_geolocation )
113+ elif args .format == 'csv' :
114+ proxies .to_csv_file (args .output , include_status = args .include_status ,
115+ include_geolocation = args .include_geolocation )
116+ if proxies .count > 0 :
117+ logger .info (f'Wrote { proxies .count } proxies to { args .output } .' )
115118
116119
117120def check (args ):
@@ -138,10 +141,11 @@ def check(args):
138141 logger .error (f'The source format { args .source_format } is not valid.' )
139142 return
140143
141- logger .progress_bar = log21 .ProgressBar (format_ = '{prefix}{bar}{suffix} {percentage}%' , style = '{' )
144+ logger .progress_bar = log21 .ProgressBar (format_ = 'Proxies: {count} {prefix}{bar}{suffix} {percentage}%' , style = '{' ,
145+ additional_variables = {'count' : 0 })
142146
143147 def checking_callback (proxy_list : ProxyList , progress : float ):
144- logger .progress_bar (progress , 100 )
148+ logger .progress_bar (progress , 100 , count = proxy_list . count )
145149
146150 # Check the proxies
147151 count = proxies .count
@@ -154,16 +158,17 @@ def checking_callback(proxy_list: ProxyList, progress: float):
154158 logger .info (f'Removed { count - proxies .count } dead proxies.' )
155159 logger .info (f'Alive proxies: { proxies .count } ' )
156160
157- # Write to file
158- if args .format == 'text' :
159- proxies .to_text_file (args .output , '\n ' )
160- elif args .format == 'json' :
161- proxies .to_json_file (args .output , include_status = args .include_status ,
162- include_geolocation = args .include_geolocation )
163- elif args .format == 'csv' :
164- proxies .to_csv_file (args .output , include_status = args .include_status ,
165- include_geolocation = args .include_geolocation )
166- logger .info (f'Wrote { proxies .count } proxies to { args .output } .' )
161+ if proxies .count > 0 :
162+ # Write to file
163+ if args .format == 'text' :
164+ proxies .to_text_file (args .output , '\n ' )
165+ elif args .format == 'json' :
166+ proxies .to_json_file (args .output , include_status = args .include_status ,
167+ include_geolocation = args .include_geolocation )
168+ elif args .format == 'csv' :
169+ proxies .to_csv_file (args .output , include_status = args .include_status ,
170+ include_geolocation = args .include_geolocation )
171+ logger .info (f'Wrote { proxies .count } proxies to { args .output } .' )
167172
168173
169174def main ():
@@ -249,9 +254,15 @@ def main():
249254 elif args .mode == 'check' :
250255 check (args )
251256 except KeyboardInterrupt :
257+ try :
258+ terminal_size = os .get_terminal_size ()[0 ] - 1
259+ except OSError :
260+ terminal_size = 50
261+ if not terminal_size :
262+ terminal_size = 50
263+ logger .clear_line (terminal_size )
252264 logger .error ('KeyboardInterrupt: Exiting...' )
253265 sys .exit ()
254- return
255266
256267
257268if __name__ == '__main__' :
0 commit comments