2022-08-01 01:16:14 +02:00
#by github.com/Kuucheen
2022-08-14 23:25:25 +02:00
import re , os , time , threading , random , ctypes
2022-08-14 23:06:53 +02:00
try :
2022-08-14 23:25:25 +02:00
import httpx , yaml
2022-08-14 23:06:53 +02:00
from pystyle import Colors , Colorate , Center
except ImportError :
2022-08-20 22:57:56 +02:00
os . system ( 'python -m pip install httpx[http2]' )
2022-08-14 23:25:25 +02:00
os . system ( 'python -m pip install pyyaml' )
2022-08-14 23:06:53 +02:00
os . system ( 'python -m pip install pystyle' )
2022-08-18 16:15:06 +02:00
import httpx , yaml
2022-08-14 23:06:53 +02:00
from pystyle import Colors , Colorate , Center
2022-08-01 01:14:43 +02:00
proxies = set ([])
goodsites = set ([])
2022-08-29 15:22:38 +02:00
sitelist = []
2022-08-01 01:14:43 +02:00
proxycount = 0
threadcount = 0
2022-09-02 14:26:03 +02:00
clearingcnt = ""
clearingproxy = ""
2022-08-01 01:14:43 +02:00
white = Colors . light_gray
color = Colors . StaticMIX (( Colors . purple , Colors . blue ))
2022-08-14 23:06:53 +02:00
2022-08-01 01:14:43 +02:00
def main ():
2022-09-02 14:26:03 +02:00
global threadcount , clearingcnt , sitelist , start
2022-08-01 01:14:43 +02:00
2022-08-14 23:25:25 +02:00
with open ( "settings.yaml" ) as setting :
settings = yaml . safe_load ( setting . read ())
2022-08-14 23:06:53 +02:00
premades = settings [ "premades" ]
2022-09-02 14:26:03 +02:00
clearingcnt = settings [ "removewebsites" ]
clearingproxy = settings [ "removeproxyless" ]
2022-08-14 23:06:53 +02:00
threads = settings [ "threads" ]
2022-08-01 01:14:43 +02:00
terminal ()
os . system ( "cls" )
logo = """
_ _ _______ ______
(_) | (_______) / _____)
_____| |_ ( (____ ____ ____ _____ ____ _____ ____
| _ _) | \____ \ / ___)/ ___|____ | _ \| ___ |/ ___)
| | \ \| |_____ _____) | (___| | / ___ | |_| | ____| |
|_| \_)\______) (______/ \____)_| \_____| __/|_____)_|
|_|
by github.com/Kuucheen
"""
print ( Colorate . Diagonal ( Colors . DynamicMIX (( Colors . dark_gray , Colors . StaticMIX (( Colors . purple , Colors . blue )))), Center . XCenter ( logo )))
print ( " \n " * 3 )
2022-08-14 23:06:53 +02:00
if premades == "?" :
premades = input ( f " { white } [ { color } ^ { white } ] { color } Use premades [y/n] { white } >> { color } " )
if premades == "yes" or premades == "y" :
os . system ( "cls" )
print ( Colorate . Diagonal ( Colors . DynamicMIX (( Colors . dark_gray , Colors . StaticMIX (( Colors . purple , Colors . blue )))), Center . XCenter ( logo )))
print ( Colorate . Diagonal ( Colors . DynamicMIX (( Colors . dark_gray , Colors . StaticMIX (( Colors . purple , Colors . blue )))), Center . XCenter ( " \n [1] HTTP/S \t [2] SOCKS4 \t [3] SOCKS5" )))
2022-08-05 20:45:36 +02:00
2022-08-14 23:06:53 +02:00
premades = input ( f " \n\n { white } [ { color } ^ { white } ] { white } >> { color } " )
2022-08-05 20:45:36 +02:00
2022-08-14 23:06:53 +02:00
elif premades != "no" and premades != "n" :
2022-08-05 20:45:36 +02:00
print ( f " { white } [ { color } ! { white } ] { color } No option was choosen returning to home.." )
time . sleep ( 3 )
main ()
exit ()
2022-08-14 23:06:53 +02:00
elif premades != "1" and premades != "2" and premades != "3" and premades != "n" :
print ( f " { white } [ { Colors . red } ! { white } ] { Colors . red } Error { white } in settings.json at premades" )
input ()
exit ()
config = { "1" : "premades/http.txt" , "2" : "premades/socks4.txt" , "3" : "premades/socks5.txt" , "n" : "sites.txt" , "no" : "sites.txt" }
try :
config = config [ premades ]
except KeyError :
print ( f " { white } [ { color } ! { white } ] { color } No option was choosen returning to home.." )
time . sleep ( 3 )
main ()
exit ()
os . system ( "cls" )
print ( Colorate . Diagonal ( Colors . DynamicMIX (( Colors . dark_gray , Colors . StaticMIX (( Colors . purple , Colors . blue )))), Center . XCenter ( logo )))
2022-09-02 14:26:03 +02:00
if clearingcnt == "?" :
2022-08-05 20:45:36 +02:00
2022-09-02 14:26:03 +02:00
clearingcnt = input ( f " \n\n\n { white } [ { color } ^ { white } ] { color } Remove not connectable site [y/n] { white } >> { color } " )
2022-08-05 20:45:36 +02:00
2022-09-02 14:26:03 +02:00
if clearingcnt != "y" and clearingcnt != "ye" and clearingcnt != "yes" and clearingcnt != "n" and clearingcnt != "no" :
2022-08-05 20:45:36 +02:00
print ( f " { white } [ { color } ! { white } ] { color } No option was choosen returning to home.." )
time . sleep ( 3 )
main ()
exit ()
2022-09-02 14:26:03 +02:00
elif clearingcnt != "y" and clearingcnt != "ye" and clearingcnt != "yes" and clearingcnt != "n" and clearingcnt != "no" :
2022-08-14 23:06:53 +02:00
print ( f " { white } [ { Colors . red } ! { white } ] { Colors . red } Error { white } in settings.json at removewebsites" )
input ()
2022-08-01 01:14:43 +02:00
exit ()
2022-08-14 23:06:53 +02:00
2022-09-02 14:26:03 +02:00
if clearingcnt == "y" or clearingcnt == "ye" or clearingcnt == "yes" :
clearingcnt = True
if clearingproxy == "?" :
2022-08-05 20:45:36 +02:00
2022-09-02 14:26:03 +02:00
clearingproxy = input ( f " \n { white } [ { color } ^ { white } ] { color } Remove sites with no proxies [y/n] { white } >> { color } " )
if clearingproxy != "y" and clearingproxy != "ye" and clearingproxy != "yes" and clearingproxy != "n" and clearingproxy != "no" :
print ( f " { white } [ { color } ! { white } ] { color } No option was choosen returning to home.." )
time . sleep ( 3 )
main ()
exit ()
elif clearingproxy != "y" and clearingproxy != "ye" and clearingproxy != "yes" and clearingproxy != "n" and clearingproxy != "no" :
print ( f " { white } [ { Colors . red } ! { white } ] { Colors . red } Error { white } in settings.json at removeproxyless" )
input ()
exit ()
if clearingproxy == "y" or clearingproxy == "ye" or clearingproxy == "yes" :
clearingproxy = True
2022-08-05 20:45:36 +02:00
2022-08-14 23:06:53 +02:00
if threads == "?" :
2022-09-02 15:16:28 +02:00
threads = input ( f " \n { white } [ { color } ^ { white } ] { color } Threads { white } >> { color } " )
2022-09-02 14:26:03 +02:00
2022-08-14 23:06:53 +02:00
elif threads . isdigit () == False :
print ( f " { white } [ { Colors . red } ! { white } ] { Colors . red } Error { white } in settings.json at threads" )
input ()
exit ()
2022-08-01 01:14:43 +02:00
2022-09-02 15:16:28 +02:00
try :
threads = int ( threads )
except ValueError :
print ( f " { white } [ { color } ! { white } ] { color } Thread needs a number" )
time . sleep ( 3 )
main ()
exit ()
2022-08-14 23:06:53 +02:00
if threads < 1 :
print ( f " { white } [ { color } ! { white } ] { color } Thread needs a number greater than 0" )
time . sleep ( 3 )
main ()
2022-08-01 01:14:43 +02:00
exit ()
2022-08-14 23:06:53 +02:00
print ()
2022-08-01 01:14:43 +02:00
start = time . time ()
2022-08-05 20:45:36 +02:00
with open ( config ) as sites :
2022-08-01 01:14:43 +02:00
sitelist = sites . readlines ()
2022-08-29 15:22:38 +02:00
threading . Thread ( target = terminalthread ) . start ()
2022-08-01 01:14:43 +02:00
while len ( sitelist ) > 0 :
if threadcount < threads :
threading . Thread ( target = scrape , args = [ sitelist [ 0 ]]) . start ()
threadcount += 1
sitelist . pop ( 0 )
while threadcount > 0 :
2022-09-02 14:26:03 +02:00
terminal ( f "| Waiting for threads to finish | active threads { threadcount } | Proxies { proxycount } | Time { time . time () - start : .2f } s" )
2022-08-01 01:14:43 +02:00
terminal ()
2022-09-02 14:26:03 +02:00
lenproxies = len ( proxies )
print ( f " \n { white } [ { color } ^ { white } ] Removed { color }{ proxycount - lenproxies } { white } Duplicates \n " )
print ( f " { white } [ { color } ^ { white } ] Remaining Proxies: { color }{ lenproxies }{ white } \n " )
2022-08-01 01:14:43 +02:00
print ( f " { white } [ { color } ^ { white } ] Writing { color } Proxies \n " )
with open ( "proxies.txt" , "w" ) as output :
for i in proxies :
output . write ( i . replace ( " \n " , "" ) + " \n " )
2022-09-02 14:26:03 +02:00
if clearingcnt == True :
2022-08-01 01:14:43 +02:00
print ( f " { white } [ { color } ^ { white } ] Removing { color } not reachable Websites \n " )
2022-08-14 23:06:53 +02:00
with open ( config , "w" ) as inp :
2022-08-01 01:14:43 +02:00
for site in goodsites :
inp . write ( site + " \n " )
terminal ()
print ( f " { white } [ { color } ^ { white } ] Finished in { color }{ time . time () - start : .2f } s { white } ! \n " )
print ( "You can now close the tab" )
input ( "" )
def scrape ( site : str ):
global proxies , threadcount , proxycount
2022-08-01 01:28:35 +02:00
#random useragent by (idk dm me if you are the guy) but thank you helped me learn how to use httpx
2022-08-01 01:14:43 +02:00
uas = [ 'Mozilla/5.0 (X11; CrOS x86_64 14588.123.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.72 Safari/537.36' , 'Mozilla/5.0 (Macintosh; Intel Mac OS X 12.4; rv:101.0) Gecko/20100101 Firefox/101.0' , 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36' , 'Mozilla/5.0 (Linux; Android 12; SM-G960U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.99 Mobile Safari/537.36' ]
site = site . replace ( " \n " , "" )
2022-08-03 17:27:55 +02:00
finished = False
2022-09-02 14:26:03 +02:00
localproxycount = 0
2022-08-01 01:14:43 +02:00
try :
with httpx . Client ( http2 = True , headers = { 'accept-language' : 'en' , 'user-agent' : random . choice ( uas )}, follow_redirects = True ) as client :
r = client . get ( site , timeout = 10 ) . text
2022-08-20 22:57:56 +02:00
except :
2022-08-01 01:14:43 +02:00
print ( f " { white } [ { Colors . red } ! { white } ] Failed connecting to { color }{ site } " )
else :
print ( f " { white } [ { Colors . green } + { white } ] Scraping { color }{ site } " )
2022-09-02 14:26:03 +02:00
if clearingcnt == True :
2022-08-01 01:14:43 +02:00
goodsites . add ( site )
pattern = r '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\:[0-9]+$'
if r . count ( ":" ) > 0 and r . count ( "." ) > 2 :
for _ in range ( r . count ( ":" )):
pos = r . find ( ":" )
if r [ pos - 1 ] . isdigit () and r [ pos + 1 ] . isdigit ():
2022-08-03 17:27:55 +02:00
for port in range ( 5 , 0 , - 1 ):
if finished == False :
for ip in range ( 15 , 6 , - 1 ):
2022-08-01 01:14:43 +02:00
proxy = f " { r [ pos - ip : pos ] }{ r [ pos : pos + port ] } "
if re . match ( pattern , proxy ):
proxies . add ( proxy )
2022-09-02 14:26:03 +02:00
localproxycount = 1
2022-08-01 01:14:43 +02:00
proxycount += 1
2022-08-03 17:27:55 +02:00
finished = True
2022-08-01 01:14:43 +02:00
break
else :
2022-08-03 17:27:55 +02:00
finished = False
2022-08-01 01:14:43 +02:00
break
r = r . replace ( ":" , "" , 1 )
2022-09-02 14:26:03 +02:00
if site in goodsites and localproxycount == 0 :
print ( f " { white } [ { Colors . orange } ! { white } ] No proxies were found on { color }{ site } " )
if clearingproxy == True :
goodsites . remove ( site )
2022-08-01 01:14:43 +02:00
threadcount -= 1
def terminal ( string : str = "" ):
ctypes . windll . kernel32 . SetConsoleTitleW ( "KC Scraper | github.com/Kuucheen " + string )
2022-08-29 15:22:38 +02:00
def terminalthread ():
while len ( sitelist ) > 0 :
terminal ( f "| Remaining sites { len ( sitelist ) } | active threads { threadcount } | Proxies { proxycount } | Time { time . time () - start : .2f } s" )
2022-08-01 01:14:43 +02:00
2022-08-14 23:06:53 +02:00
2022-08-01 01:14:43 +02:00
main ()