import string
import random
import requests
from colorama import Fore
from multiprocessing import Pool, Lock
def get_sample(target_length):
target_range = string.digits + string.ascii_letters
return "".join(random.sample(target_range, target_length))
def generator(last_chars=""):
url_prefix = "https://cloud.mail.ru/public/"
url_prefix += get_sample(4)
if last_chars:
return f"{url_prefix}/{get_sample(9-len(last_chars))}{last_chars}"
else:
return f"{url_prefix}/{get_sample(9)}"
def write_url_to_file(url):
with open("output.txt", "a") as writer:
writer.write(url + "\n")
def get_page_size(target_url):
if len(requests.get(target_url).text) > 700000:
print(f"{Fore.GREEN}Good url: {target_url}!")
write_url_to_file(target_url)
else:
print(f"{Fore.RED}Bad url: {target_url}")
def main():
processes_num = get_processes_from_user()
while targets := [generator() for _ in range(100)]:
with Pool(processes=processes_num) as my_pool:
my_pool.map(get_page_size, targets)
def get_processes_from_user():
while not (num := input(Fore.GREEN + "Enter number of processes: ")).isdigit():
print(Fore.RED, "Wrong answer! You should enter a number [1..1000]")
return int(num)
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
print(Fore.WHITE, 'Stopped by user!')