Answer the question
In order to leave comments, you need to log in
Why doesn't it issue a new proxy each time?
I made a code, according to the idea, every time it should give me a new proxy from my .txt file, and it gives me the same constant.
class Proxy:
proxy_list = []
proxy_num = 0
def __init__(self):
with open('C:\\Users\\sinto\\PycharmProjects\\AutoREG\\Proxy.txt') as file:
proxyesss = self.list = [line.strip() for line in file.readlines() if line.strip()]
def random_proxy(self):
with open('C:\\Users\\sinto\\PycharmProjects\\AutoREG\\Proxy.txt', 'r') as file:
proxy_base = ''.join(file.readlines()).strip().split('\n')
if proxy_base == '[]':
print('Прокси кончились')
proxy_r = proxy_base[Proxy.proxy_num]
proxy_base.remove(proxy_r)
print(proxy_r)
Proxy.proxy_num += 1
return proxy_r
def get_proxy(self, proxy1=None):
for proxy in self.list:
if 'https://' + proxy == proxy1:
global massiv
massiv = massiv + [proxy]
url = 'http://' + proxy
try:
r = requests.get('http://speed-tester.info/check_ip.php', proxies={'http': url})
if r.status_code == 200:
return url
except requests.exceptions.ConnectionError:
continue
proxy = Proxy()
proxy = proxy.get_proxy()
print(proxy)
Answer the question
In order to leave comments, you need to log in
What a cruel gesture. Why the hell are all these conversions from a list to a string and vice versa?
I'm assuming that one line in the file is one proxy, and the file isn't so monstrously large that it avoids loading it completely into memory. Then if on your fingers:
1. Describe a function that parses a string into a proxy description (for example, into a tuple "address, port"). For example, if proxies are specified in the form address:port, then something like
@staticmethod
def parse_proxy_line(line):
# сработает, если на каждой строке указан порт
addr, _, port = line.strip().rpartition(':')
return (addr, int(port))
def __init__(self, source):
self.proxies = list(map(parse_proxy_line, source))
with open('whatever.txt', 'rt') as src:
proxy_list = ProxyList(src)
from typing import Tuple
def parse_proxy_line(line: str) -> Tuple[str, int]:
# сработает, если на каждой строке указан порт
addr, _, port = line.strip().rpartition(':')
return (addr, int(port))
def is_good_proxy(proxy: Tuple[str, int]) -> bool:
host, port = proxy
return ... #тут проверяешь, хороший ли прокси и возвращаешь True если да
src = open('proxies.txt', 'rt')
# Это - ленивое вычисление. Когда мы запросим следующий прокси,
# filter() будет запрашивать элементы, пока не найдёт "хороший",
# т.е. такой, для которого is_good_proxy() вернуло True
# В свою очередь, эти элементы будут запрашиваться из map(),
# которая будет брать элементы из src и вызывать для каждого parse_proxy_line()
# А элементы в файле src - это текстовые строки, которые будут читаться по запросу.
# Таким образом, нет необходимости хранить весь список прокси в памяти,
# они будут подгружаться по мере возникновения потребности.
proxies = iter(filter(is_good_proxy, map(parse_proxy_line, src)))
#когда нужно получить ещё один прокси:
host, port = next(proxies) #next - встроенная функция
#если прокси закончились, выкинет исключение StopIteration, которое можешь поймать и обработать как хочешь.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question