diff --git a/KC-Scraper.py b/KC-Scraper.py index 6e0cd94..9bbda3b 100644 --- a/KC-Scraper.py +++ b/KC-Scraper.py @@ -1,286 +1,307 @@ -#by github.com/Kuucheen import re, os, time, threading, random, ctypes try: import httpx, yaml from pystyle import Colors, Colorate, Center except ImportError: - os.system('python -m pip install httpx httpx[http2] pyyaml pystyle') - import httpx, yaml - from pystyle import Colors, Colorate, Center - -proxies = set([]) -goodsites = set([]) -sitelist = [] -timeout = "" -proxycount = 0 -threadcount = 0 -clearingcnt = "" -clearingproxy = "" -randomUseragent = "" -white = Colors.light_gray -color = Colors.StaticMIX((Colors.purple, Colors.blue)) + print("Looks like you forgot to install the requirements!") + print("use \"python -m pip install -r requirements.txt\" to install") -def main(): - global threadcount, clearingcnt, clearingproxy, randomUseragent, timeout, sitelist, start +class KCScraper: + def __init__(self): + self.proxies = set() + self.goodsites = set() + self.sitelist = [] + self.timeout = "" + self.proxycount = 0 + self.clearingcnt = "" + self.clearingproxy = "" + self.randomUseragent = "" - printLogo() - print() - config, clearingcnt, clearingproxy, randomUseragent, threads, timeout = getSettings() + self.start = 0 - terminal() - - start = time.time() + self.white = Colors.light_gray + self.color = Colors.StaticMIX((Colors.purple, Colors.blue)) - #dispatcher - with open(config) as sites: + self.prefix_warning = f"{self.white}[{self.color}!{self.white}] {self.color}" + self.prefix_plus = f"{self.white}[{Colors.green}+{self.white}] {self.color}" + self.prefix_error = f"{self.white}[{Colors.red}!{self.white}] {self.color}" + self.prefix_info = f"{self.white}[{self.color}^{self.white}] {self.color}" - sitelist = sites.readlines() - threading.Thread(target=terminalthread).start() + def main(self): + self.printLogo() + print() + self.terminal() - while len(sitelist) > 0: - if threadcount < threads: - threading.Thread(target=scrape, args=[sitelist[0]]).start() - threadcount += 1 - sitelist.pop(0) + config, self.clearingcnt, self.clearingproxy, self.randomUseragent, threads, self.timeout = self.getSettings() - while threadcount > 0: - terminal(f"| Waiting for threads to finish | active threads {threadcount} | Proxies {proxycount} | Time {time.time()-start:.2f}s") + self.start = time.time() - terminal() - + # dispatcher + with open(config) as sites: + self.sitelist = sites.readlines() + threading.Thread(target=self.terminalthread).start() - 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") - print(f"{white}[{color}^{white}] Writing {color}Proxies\n") + while len(self.sitelist) > 0: + if self.activethreads() < threads: + threading.Thread(target=self.scrape, args=[self.sitelist[0]]).start() + self.sitelist.pop(0) - with open("proxies.txt", "w") as output: + while self.activethreads() > 0: + self.terminal(f"| Waiting for threads to finish | active threads {self.activethreads()} | Proxies {self.proxycount} | Time {time.time() - self.start:.2f}s") - for i in proxies: - output.write(i.replace("\n", "") + "\n") - - if clearingcnt == True or clearingproxy == True: + self.terminal() - print(f"{white}[{color}^{white}] Removing {color}bad Websites\n") - - with open(config, "w") as inp: + print() - for site in goodsites: - inp.write(site + "\n") + lenproxies = len(self.proxies) + print(f"{self.prefix_info} Removed {self.color}{self.proxycount - lenproxies} {self.white}Duplicates\n") + print(f"{self.prefix_info} Remaining Proxies: {self.color}{lenproxies}{self.white}\n") + print(f"{self.prefix_info} Writing {self.color}Proxies\n") - terminal() + with open("proxies.txt", "w") as output: + for i in self.proxies: + output.write(i.replace("\n", "") + "\n") - print(f"{white}[{color}^{white}] Finished in {color}{time.time()-start:.2f}s{white}!\n") - print("You can now close the tab") + if self.clearingcnt == True or self.clearingproxy == True: + print(f"{self.prefix_info} Removing {self.color}bad Websites\n") + with open(config, "w") as inp: + for site in self.goodsites: + inp.write(site + "\n") - input("") + self.terminal() + print(f"{self.prefix_info} Finished in {self.color}{time.time() - self.start:.2f}s{self.white}!\n") + print("You can now close the tab") + input("") -def scrape(site: str): - global proxies, threadcount, proxycount - uas=["Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:53.0) Gecko/20100101 Firefox/53.0", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; Trident/5.0)", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0; MDDCJS)", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"] - site = site.replace("\n", "") - try: - with httpx.Client(http2=True,headers = {'accept-language': 'en','user-agent': random.choice(uas) if randomUseragent == True else uas[0]},follow_redirects=True) as client: - r = client.get(site, timeout=timeout).text - except: - print(f"{white}[{Colors.red}!{white}] Failed connecting to {color}{site}") - if clearingcnt != True: - goodsites.add(site) - else: - goodsites.add(site) - r = r.replace("&colon", ":") - locProxies = re.findall(r"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:\d{1,5}\b", r) - length = len(locProxies) - print(f"{white}[{Colors.green}+{white}] Scraped {color}{length}{white} from {color}{site}") - proxycount += length - proxies = proxies | set(locProxies) - if clearingproxy == True and length == 0: - goodsites.remove(site) - finally: - threadcount -= 1 + def scrape(self, site: str): + uas = [ + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:53.0) Gecko/20100101 Firefox/53.0", + "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; Trident/5.0)", + "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0; MDDCJS)", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393", + "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)", + ] + site = site.replace("\n", "") + try: + with httpx.Client( + http2=True, + headers={ + "accept-language": "en", + "user-agent": random.choice(uas) if self.randomUseragent == True else uas[0], + }, + follow_redirects=True, + ) as client: + r = client.get(site, timeout=self.timeout).text + except: + print(f"{self.prefix_warning} Failed connecting to {self.color}{site}") + if self.clearingcnt != True: + self.goodsites.add(site) + else: + self.goodsites.add(site) + r = r.replace("&colon", ":") + locProxies = re.findall(r"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:\d{1,5}\b", r) + length = len(locProxies) + print(f"{self.prefix_plus} Scraped {self.color}{length}{self.white} from {self.color}{site}") + self.proxycount += length + self.proxies = self.proxies | set(locProxies) + if self.clearingproxy and length == 0: + self.goodsites.remove(site) -def getSettings() -> list: - with open("settings.yaml") as setting: - settings = yaml.safe_load(setting.read()) + def getSettings(self) -> tuple: + with open("settings.yaml") as setting: + settings = yaml.safe_load(setting.read()) - premades = settings["premades"] - clearingcnt = settings["removeWebsites"] - clearingproxy = settings["removeProxyless"] - randomUseragent = settings["randomUseragent"] - threads = settings["threads"] - timeout = settings["timeout"] + presets = settings["presets"] + self.clearingcnt = settings["removeWebsites"] + self.clearingproxy = settings["removeProxyless"] + self.randomUseragent = settings["randomUseragent"] + threads = settings["threads"] + self.timeout = settings["timeout"] - yes = ["yes", "y", "ye"] - no = ["no", "n", "nah"] + yes = ["yes", "y", "ye"] + no = ["no", "n", "nah"] - if premades == "?": - premades = input(f"{white}[{color}^{white}] {color}Use premades [y/n] {white}>> {color}") - if premades in yes: - os.system("cls") - printLogo() - 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"))) + if presets == "?": + presets = input(f"{self.prefix_info} Use presets [y/n] {self.white}>> {self.color}") + if presets in yes: + os.system("cls") + self.printLogo() + 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"))) - premades = input(f"\n{white}[{color}^{white}] {white}>> {color}") + presets = input(f"\n{self.prefix_info} {self.white}>> {self.color}") - elif premades not in no: - print(f"{white}[{color}!{white}] {color}No option was choosen returning to home..") - time.sleep(3) - main() - exit() + elif presets not in no: + print(f"{self.prefix_warning} No option was chosen returning to home..") + time.sleep(3) + self.main() + exit() - 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() - - - printLogo() - - if clearingcnt == "?": - - clearingcnt = input(f"\n{white}[{color}^{white}] {color}Remove not connectable site [y/n] {white}>> {color}") - - if clearingcnt not in yes and clearingcnt not in no: - print(f"{white}[{color}!{white}] {color}No option was choosen returning to home..") - time.sleep(3) - main() - exit() - elif clearingcnt not in yes and clearingcnt not in no: - print(f"{white}[{Colors.red}!{white}] {Colors.red}Error{white} in settings.json at removewebsites") - input() - exit() - - if clearingcnt in yes: - clearingcnt = True - - printLogo() - - if clearingproxy == "?": - - clearingproxy = input(f"\n{white}[{color}^{white}] {color}Remove sites with no proxies [y/n] {white}>> {color}") - - if clearingproxy not in yes and clearingproxy not in no: - print(f"{white}[{color}!{white}] {color}No option was choosen returning to home..") - time.sleep(3) - main() - exit() - - elif clearingproxy not in yes and clearingproxy not in no: - print(f"{white}[{Colors.red}!{white}] {Colors.red}Error{white} in settings.json at removeproxyless") + elif presets not in {"1", "2", "3", "n"}: + print(f"{self.prefix_error} Error in settings.json at presets") input() exit() - if clearingproxy in yes: - clearingproxy = True - - printLogo() - - if randomUseragent == "?": + config = {"1": "presets/http.txt", "2": "presets/socks4.txt", "3": "presets/socks5.txt", "n": "sites.txt", + "no": "sites.txt"} - randomUseragent = input(f"\n{white}[{color}^{white}] {color}Random Useragent? [y/n] {white}>> {color}") - - if randomUseragent not in yes and randomUseragent not in no: - print(f"{white}[{color}!{white}] {color}No option was choosen returning to home..") + try: + config = config[presets] + except KeyError: + print(f"{self.prefix_warning} No option was chosen returning to home..") time.sleep(3) - main() + self.main() exit() - - elif randomUseragent not in yes and randomUseragent not in no: - print(f"{white}[{Colors.red}!{white}] {Colors.red}Error{white} in settings.json at removeproxyless") + + self.printLogo() + + if self.clearingcnt == "?": + self.clearingcnt = input( + f"{self.prefix_info} Remove not connectable site [y/n] {self.white}>> {self.color}" + ) + + if self.clearingcnt not in yes and self.clearingcnt not in no: + print(f"{self.prefix_warning} No option was chosen returning to home..") + time.sleep(3) + self.main() + exit() + elif self.clearingcnt not in yes and self.clearingcnt not in no: + print(f"{self.prefix_error} Error in settings.json at removewebsites") input() exit() - if randomUseragent in yes: - randomUseragent = True + if self.clearingcnt in yes: + self.clearingcnt = True - - printLogo() + self.printLogo() - if timeout == "?": - timeout = input(f"\n{white}[{color}^{white}] {color}Timeout [seconds] {white}>> {color}") + if self.clearingproxy == "?": + self.clearingproxy = input( + f"{self.prefix_info} Remove sites with no proxies [y/n] {self.white}>> {self.color}" + ) - elif timeout.isdigit() == False: - print(f"{white}[{Colors.red}!{white}] {Colors.red}Error{white} in settings.json at threads") - input() - exit() + if self.clearingproxy not in yes and self.clearingproxy not in no: + print(f"{self.prefix_warning} No option was chosen returning to home..") + time.sleep(3) + self.main() + exit() - try: - timeout = int(timeout) - except ValueError: - print(f"{white}[{color}!{white}] {color}Timeout needs a number") - time.sleep(3) - main() - exit() - - if timeout < 1: - print(f"{white}[{color}!{white}] {color}Timeout must be higher than 0") - time.sleep(3) - main() - exit() - - printLogo() + elif self.clearingproxy not in yes and self.clearingproxy not in no: + print(f"{self.prefix_error} Error in settings.json at removeproxyless") + input() + exit() - if threads == "?": - threads = input(f"\n{white}[{color}^{white}] {color}Threads {white}>> {color}") + if self.clearingproxy in yes: + self.clearingproxy = True - elif threads.isdigit() == False: - print(f"{white}[{Colors.red}!{white}] {Colors.red}Error{white} in settings.json at threads") - input() - exit() + self.printLogo() - try: - threads = int(threads) - except ValueError: - print(f"{white}[{color}!{white}] {color}Thread needs a number") - time.sleep(3) - main() - exit() - - if threads < 1: - print(f"{white}[{color}!{white}] {color}Thread needs a number greater than 0") - time.sleep(3) - main() - exit() + if self.randomUseragent == "?": + self.randomUseragent = input( + f"{self.prefix_info} Random Useragent? [y/n] {self.white}>> {self.color}" + ) - printLogo() + if self.randomUseragent not in yes and self.randomUseragent not in no: + print(f"{self.prefix_warning} No option was chosen returning to home..") + time.sleep(3) + self.main() + exit() - return config, clearingcnt, clearingproxy, randomUseragent, threads, timeout + elif self.randomUseragent not in yes and self.randomUseragent not in no: + print(f"{self.prefix_error} Error in settings.json at removeproxyless") + input() + exit() -def terminal(string:str = ""): - ctypes.windll.kernel32.SetConsoleTitleW("KC Scraper | github.com/Kuucheen " + string) + if self.randomUseragent in yes: + self.randomUseragent = True -def terminalthread(): - while len(sitelist) > 0: - terminal(f"| Remaining sites {len(sitelist)} | active threads {threadcount} | Proxies {proxycount} | Time {time.time()-start:.2f}s") + self.printLogo() -def printLogo(): - logo = """ - _ _ _______ ______ -(_) | (_______) / _____) - _____| |_ ( (____ ____ ____ _____ ____ _____ ____ -| _ _) | \____ \ / ___)/ ___|____ | _ \| ___ |/ ___) -| | \ \| |_____ _____) | (___| | / ___ | |_| | ____| | -|_| \_)\______) (______/ \____)_| \_____| __/|_____)_| - |_| - by github.com/Kuucheen + if self.timeout == "?": + self.timeout = input( + f"{self.prefix_info} Timeout [seconds] {self.white}>> {self.color}" + ) -""" - os.system("cls") - print(Colorate.Diagonal(Colors.DynamicMIX((Colors.dark_gray, Colors.StaticMIX((Colors.purple, Colors.blue)))), Center.XCenter(logo))) + elif not self.timeout.isdigit(): + print(f"{self.prefix_error} Error in settings.json at threads") + input() + exit() + + try: + self.timeout = int(self.timeout) + except ValueError: + print(f"{self.prefix_warning} Timeout needs a number") + time.sleep(3) + self.main() + exit() + + if self.timeout < 1: + print(f"{self.prefix_warning} Timeout must be higher than 0") + time.sleep(3) + self.main() + exit() + + self.printLogo() + + if threads == "?": + threads = input(f"{self.prefix_info} Threads {self.white}>> {self.color}") + + elif not threads.isdigit(): + print(f"{self.prefix_error} Error in settings.json at threads") + input() + exit() + + try: + threads = int(threads) + except ValueError: + print(f"{self.prefix_warning} Thread needs a number") + time.sleep(3) + self.main() + exit() + + if threads < 1: + print(f"{self.prefix_warning} Thread needs a number greater than 0") + time.sleep(3) + self.main() + exit() + + self.printLogo() + + return config, self.clearingcnt, self.clearingproxy, self.randomUseragent, threads, self.timeout + + def terminal(self, string: str = ""): + ctypes.windll.kernel32.SetConsoleTitleW("KC Scraper | github.com/Kuucheen " + string) + + def terminalthread(self): + while len(self.sitelist) > 0: + self.terminal( + f"| Remaining sites {len(self.sitelist)} | active threads {self.activethreads()} | Proxies {self.proxycount} | Time {time.time() - self.start:.2f}s" + ) + + def activethreads(self): + return threading.active_count()-1 + + def printLogo(self): + logo = """ + _ _ _______ ______ + (_) | (_______) / _____) + _____| |_ ( (____ ____ ____ _____ ____ _____ ____ + | _ _) | \____ \ / ___)/ ___|____ | _ \| ___ |/ ___) + | | \ \| |_____ _____) | (___| | / ___ | |_| | ____| | + |_| \_)\______) (______/ \____)_| \_____| __/|_____)_| + |_| + by github.com/Kuucheen + + """ + os.system("cls") + print(Colorate.Diagonal(Colors.DynamicMIX((Colors.dark_gray, Colors.StaticMIX((Colors.purple, Colors.blue)))), + Center.XCenter(logo))) if __name__ == "__main__": - main() \ No newline at end of file + KCScraper().main() diff --git a/LICENSE b/LICENSE index 36b7cd9..354832c 100644 --- a/LICENSE +++ b/LICENSE @@ -1,23 +1,21 @@ -Boost Software License - Version 1.0 - August 17th, 2003 +MIT License -Permission is hereby granted, free of charge, to any person or organization -obtaining a copy of the software and accompanying documentation covered by -this license (the "Software") to use, reproduce, display, distribute, -execute, and transmit the Software, and to prepare derivative works of the -Software, and to permit third-parties to whom the Software is furnished to -do so, all subject to the following: +Copyright (c) 2023 Charmbracelet, Inc -The copyright notices in the Software and this entire statement, including -the above license grant, this restriction and the following disclaimer, -must be included in all copies of the Software, in whole or in part, and -all derivative works of the Software, unless such copies or derivative -works are solely in the form of machine-executable object code generated by -a source language processor. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT -SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE -FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md index 3559467..9ed7d58 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,27 @@ - ------ +
-
+---
-----
-
#
👾 KC-Scraper 👾
-KC Scraper is a powerful and open source proxy scraper
able to scrape from almost any website
-
-
+
❓ How to use ❓
🔩 Requirements 🔩
Installing automatically if not installed
+Use `python -m pip install -r requirements.txt` to install + `httpx[http2]` `pystyle` diff --git a/assets/logo.svg b/assets/logo.svg new file mode 100644 index 0000000..588fb78 --- /dev/null +++ b/assets/logo.svg @@ -0,0 +1,434 @@ + + \ No newline at end of file diff --git a/assets/preview.gif b/assets/preview.gif new file mode 100644 index 0000000..82dcd44 Binary files /dev/null and b/assets/preview.gif differ diff --git a/premades/http.txt b/presets/http.txt similarity index 98% rename from premades/http.txt rename to presets/http.txt index 52871f0..6a4eec8 100644 --- a/premades/http.txt +++ b/presets/http.txt @@ -1,21 +1,21 @@ -https://www.proxyscan.io/download?type=https -https://openproxy.space/list/http -https://raw.githubusercontent.com/jetkai/proxy-list/main/online-proxies/txt/proxies-http.txt -https://raw.githubusercontent.com/monosans/proxy-list/main/proxies/http.txt -https://www.proxyscan.io/download?type=http -https://raw.githubusercontent.com/TheSpeedX/PROXY-List/master/http.txt -https://api.proxyscrape.com/v2/?request=getproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all -https://raw.githubusercontent.com/ShiftyTR/Proxy-List/master/https.txt -https://raw.githubusercontent.com/roosterkid/openproxylist/main/HTTPS_RAW.txt -https://raw.githubusercontent.com/proxy4parsing/proxy-list/main/http.txt -https://raw.githubusercontent.com/ShiftyTR/Proxy-List/master/http.txt -https://raw.githubusercontent.com/monosans/proxy-list/main/proxies_anonymous/http.txt -https://raw.githubusercontent.com/saschazesiger/Free-Proxies/master/proxies/http.txt -https://www.proxy-list.download/api/v1/get?type=https -https://www.proxy-list.download/api/v1/get?type=http -https://raw.githubusercontent.com/mmpx12/proxy-list/master/http.txt -https://raw.githubusercontent.com/mmpx12/proxy-list/master/https.txt -https://api.openproxylist.xyz/http.txt -http://pubproxy.com/api/proxy -https://raw.githubusercontent.com/HyperBeats/proxy-list/main/http.txt -https://raw.githubusercontent.com/jetkai/proxy-list/main/online-proxies/txt/proxies-https.txt +https://www.proxyscan.io/download?type=https +https://openproxy.space/list/http +https://raw.githubusercontent.com/jetkai/proxy-list/main/online-proxies/txt/proxies-http.txt +https://raw.githubusercontent.com/monosans/proxy-list/main/proxies/http.txt +https://www.proxyscan.io/download?type=http +https://raw.githubusercontent.com/TheSpeedX/PROXY-List/master/http.txt +https://api.proxyscrape.com/v2/?request=getproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all +https://raw.githubusercontent.com/ShiftyTR/Proxy-List/master/https.txt +https://raw.githubusercontent.com/roosterkid/openproxylist/main/HTTPS_RAW.txt +https://raw.githubusercontent.com/proxy4parsing/proxy-list/main/http.txt +https://raw.githubusercontent.com/ShiftyTR/Proxy-List/master/http.txt +https://raw.githubusercontent.com/monosans/proxy-list/main/proxies_anonymous/http.txt +https://raw.githubusercontent.com/saschazesiger/Free-Proxies/master/proxies/http.txt +https://www.proxy-list.download/api/v1/get?type=https +https://www.proxy-list.download/api/v1/get?type=http +https://raw.githubusercontent.com/mmpx12/proxy-list/master/http.txt +https://raw.githubusercontent.com/mmpx12/proxy-list/master/https.txt +https://api.openproxylist.xyz/http.txt +http://pubproxy.com/api/proxy +https://raw.githubusercontent.com/HyperBeats/proxy-list/main/http.txt +https://raw.githubusercontent.com/jetkai/proxy-list/main/online-proxies/txt/proxies-https.txt diff --git a/premades/socks4.txt b/presets/socks4.txt similarity index 98% rename from premades/socks4.txt rename to presets/socks4.txt index aaa22a9..2d04aff 100644 --- a/premades/socks4.txt +++ b/presets/socks4.txt @@ -1,15 +1,15 @@ -https://api.openproxylist.xyz/socks4.txt -https://www.proxy-list.download/api/v1/get?type=socks4 -https://raw.githubusercontent.com/jetkai/proxy-list/main/online-proxies/txt/proxies-socks4.txt -https://raw.githubusercontent.com/ShiftyTR/Proxy-List/master/socks4.txt -https://raw.githubusercontent.com/saschazesiger/Free-Proxies/master/proxies/socks4.txt -https://raw.githubusercontent.com/TheSpeedX/PROXY-List/master/socks4.txt -https://raw.githubusercontent.com/HyperBeats/proxy-list/main/socks4.txt -https://www.proxyscan.io/download?type=socks4 -https://www.socks-proxy.net/ -https://raw.githubusercontent.com/mmpx12/proxy-list/master/socks4.txt -https://raw.githubusercontent.com/monosans/proxy-list/main/proxies/socks4.txt -https://openproxy.space/list/socks4 -https://raw.githubusercontent.com/monosans/proxy-list/main/proxies_anonymous/socks4.txt -https://raw.githubusercontent.com/roosterkid/openproxylist/main/SOCKS4_RAW.txt -https://api.proxyscrape.com/v2/?request=getproxies&protocol=socks4&timeout=10000&country=all +https://api.openproxylist.xyz/socks4.txt +https://www.proxy-list.download/api/v1/get?type=socks4 +https://raw.githubusercontent.com/jetkai/proxy-list/main/online-proxies/txt/proxies-socks4.txt +https://raw.githubusercontent.com/ShiftyTR/Proxy-List/master/socks4.txt +https://raw.githubusercontent.com/saschazesiger/Free-Proxies/master/proxies/socks4.txt +https://raw.githubusercontent.com/TheSpeedX/PROXY-List/master/socks4.txt +https://raw.githubusercontent.com/HyperBeats/proxy-list/main/socks4.txt +https://www.proxyscan.io/download?type=socks4 +https://www.socks-proxy.net/ +https://raw.githubusercontent.com/mmpx12/proxy-list/master/socks4.txt +https://raw.githubusercontent.com/monosans/proxy-list/main/proxies/socks4.txt +https://openproxy.space/list/socks4 +https://raw.githubusercontent.com/monosans/proxy-list/main/proxies_anonymous/socks4.txt +https://raw.githubusercontent.com/roosterkid/openproxylist/main/SOCKS4_RAW.txt +https://api.proxyscrape.com/v2/?request=getproxies&protocol=socks4&timeout=10000&country=all diff --git a/premades/socks5.txt b/presets/socks5.txt similarity index 98% rename from premades/socks5.txt rename to presets/socks5.txt index 11e01e1..4944230 100644 --- a/premades/socks5.txt +++ b/presets/socks5.txt @@ -1,15 +1,15 @@ -https://raw.githubusercontent.com/thespeedx/proxy-list/master/socks5.txt -https://api.openproxylist.xyz/socks5.txt -https://www.proxyscan.io/download?type=socks5 -https://raw.githubusercontent.com/roosterkid/openproxylist/main/SOCKS5_RAW.txt -https://raw.githubusercontent.com/hookzof/socks5_list/master/proxy.txt -https://www.proxy-list.download/api/v1/get?type=socks5 -https://raw.githubusercontent.com/monosans/proxy-list/main/proxies/socks5.txt -https://raw.githubusercontent.com/saschazesiger/Free-Proxies/master/proxies/socks5.txt -https://raw.githubusercontent.com/hyperbeats/proxy-list/main/socks5.txt -https://openproxy.space/list/socks5 -https://raw.githubusercontent.com/mmpx12/proxy-list/master/socks5.txt -https://api.proxyscrape.com/v2/?request=getproxies&protocol=socks5&timeout=10000&country=all -https://raw.githubusercontent.com/jetkai/proxy-list/main/online-proxies/txt/proxies-socks5.txt -https://raw.githubusercontent.com/monosans/proxy-list/main/proxies_anonymous/socks5.txt -https://raw.githubusercontent.com/shiftytr/proxy-list/master/socks5.txt +https://raw.githubusercontent.com/thespeedx/proxy-list/master/socks5.txt +https://api.openproxylist.xyz/socks5.txt +https://www.proxyscan.io/download?type=socks5 +https://raw.githubusercontent.com/roosterkid/openproxylist/main/SOCKS5_RAW.txt +https://raw.githubusercontent.com/hookzof/socks5_list/master/proxy.txt +https://www.proxy-list.download/api/v1/get?type=socks5 +https://raw.githubusercontent.com/monosans/proxy-list/main/proxies/socks5.txt +https://raw.githubusercontent.com/saschazesiger/Free-Proxies/master/proxies/socks5.txt +https://raw.githubusercontent.com/hyperbeats/proxy-list/main/socks5.txt +https://openproxy.space/list/socks5 +https://raw.githubusercontent.com/mmpx12/proxy-list/master/socks5.txt +https://api.proxyscrape.com/v2/?request=getproxies&protocol=socks5&timeout=10000&country=all +https://raw.githubusercontent.com/jetkai/proxy-list/main/online-proxies/txt/proxies-socks5.txt +https://raw.githubusercontent.com/monosans/proxy-list/main/proxies_anonymous/socks5.txt +https://raw.githubusercontent.com/shiftytr/proxy-list/master/socks5.txt diff --git a/proxies.txt b/proxies.txt index e69de29..b0d6b8d 100644 --- a/proxies.txt +++ b/proxies.txt @@ -0,0 +1 @@ +your proxies will land here \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..adfa74b --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +httpx==0.24.1 +pystyle==2.9 +PyYAML==6.0.1 \ No newline at end of file diff --git a/settings.yaml b/settings.yaml index 15899d5..8fb67c8 100644 --- a/settings.yaml +++ b/settings.yaml @@ -1,5 +1,5 @@ { - premades: "?", # Sets the premade file | '?' for asking | 'n' for sites.txt | '1' for http/s | '2' for socks4 | '3' for socks5 + presets: "?", # Sets the presets file | '?' for asking | 'n' for sites.txt | '1' for http/s | '2' for socks4 | '3' for socks5 removeWebsites: "?", # Removes not connectable websites | '?' for asking | 'y' or 'n'