рдЖрдкрдиреЗ рдлрд┐рд▓реНрдореЛрдВ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рдмрд┐рддрд╛рдпрд╛?

рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рдЙрджреНрднрд╡


рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореИрдВ рджреЛрд╕реНрддреЛрдВ рдХрд╛ рджреМрд░рд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рд╣рдордиреЗ рдПрдХ рдлрд┐рд▓реНрдо рдЪреБрдиреА, рдФрд░ рдореИрдВрдиреЗ, рдПрдХ рдЬрд▓реЗ рд╣реБрдП рдлрд┐рд▓реНрдо рдкреНрд░рд╢рдВрд╕рдХ рдХреЗ рд░реВрдк рдореЗрдВ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрддрдирд╛ рд╕реАрдзрд╛ рдирд╣реАрдВ рдЬрд▓рд╛), рд╕рдм рдХреБрдЫ рджреЗрдЦ рд▓рд┐рдпрд╛ред рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдореБрдЭрд╕реЗ рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдкреНрд░рд╢реНрди рдкреВрдЫрд╛, рд▓реЗрдХрд┐рди рдЖрдк рд╕рдм рдкрд░ рдзреНрдпрд╛рди рдХреНрдпреЛрдВ рдирд╣реАрдВ рджрд┐рдпрд╛? рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдореИрдВ рдПрдХ рдлрд┐рд▓реНрдо рдЦреЛрдЬ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рд╡рд╣ рд╣рд░ рдлрд┐рд▓реНрдо рджреЗрдЦрддрд╛ рд╣реВрдВ рдЬреЛ рдореИрдВрдиреЗ рджреЗрдЦреА рд╣реИ, рдпрд╛ рддреЛ рд░реЗрдЯрд┐рдВрдЧ рд╕реЗ рдпрд╛ рд╕рд┐рд░реНрдл рдПрдХ рдЯрд┐рдХ рд╕реЗ, рдЬреЛ рджреЗрдЦрдиреЗ рдореЗрдВ рд╣реБрдИ рдереАред рдФрд░ рдлрд┐рд░ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдПрдХ рд╕рд╡рд╛рд▓ рдЖрдпрд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдлрд┐рд▓реНрдореЛрдВ рдкрд░ рдХрд┐рддрдирд╛ рд╕рдордп рдмрд┐рддрд╛рдпрд╛? рд╕реНрдЯреАрдо рдореЗрдВ рдЦреЗрд▓ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЖрдВрдХрдбрд╝реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд▓реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред



рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ?


рдореИрдВ рдХрдИ рд╡рд░реНрд╖реЛрдВ рд╕реЗ ASP.NET рдкрд░ рд╡рд┐рдХрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ C # рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдкрд╣рд▓реЗ рдореИрдВ рдЗрд╕ рдкрд░ рдЗрд╕ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдПрдХ рднрд╛рд░реА рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдереА рдФрд░, рдЪреВрдВрдХрд┐ рдореИрдВ рдкрд╛рдпрдерди рд╕реЗ рдереЛрдбрд╝рд╛ рдкрд░рд┐рдЪрд┐рдд рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓рд┐рдпрд╛ред

рдФрд░ рдбреЗрдЯрд╛ рдХрд╣рд╛рдБ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ?


рдФрд░ рдпрд╣рд╛рдБ рдореИрдВ рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдореИрдВрдиреЗ рднреЛрд▓реЗрдкрди рд╕реЗ рдпрд╣ рдорд╛рди рд▓рд┐рдпрд╛ рдХрд┐ рдореВрд╡реА рд╕рд░реНрдЪ рдореЗрдВ рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдФрд░ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдореБрдлреНрдд рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рддрдХрдиреАрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрд╡рд╕рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╡реЗ рдХреЗрд╡рд▓ рдиреМрд╡реАрдВ рд░рд╛рд╢рд┐ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдерд╛ рдФрд░ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдерд╛, рдФрд░ рдпрд╣ рдЗрд╕ рдкрд░ рдерд╛ рдХрд┐ рдореИрдВ рд░реБрдХ рдЧрдпрд╛ред

рдЫрд╡рд┐

рдкреНрд░реЛрдлрд╛рдЗрд▓ рдореЗрдВ рд╕рднреА рдХреЗ рдкрд╛рд╕ рдПрдХ рдЫреЛрдЯреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рджреЗрдЦреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдлрд┐рд▓реНрдореЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЪрд┐рддреНрд░ рдХреА рдЕрд╡рдзрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЗрд╕ рддрд░рд╣ рдореИрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рдкреГрд╖реНрда рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ (рдореЗрд░реЗ рдкрд╛рд╕ 762 рдлрд┐рд▓реНрдореЗрдВ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ 17 рдкреГрд╖реНрда рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛) рдФрд░ рдЦрд░реНрдЪ рдХрд┐рдП рдЧрдП рд╕рдордп рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ред

рдЬрд▓реНрджреА рд╕реЗ рдирд╣реАрдВ рдХрд╣рд╛ред

class KinopoiskParser: def __init__(self, user_id, current_page=1): self._user_id = user_id self._current_page = current_page self._wasted_time_in_minutes = 0 def calculate_wasted_time(self): while True: film_list_url = f'https://www.kinopoisk.ru/user/{self._user_id}' \ f'/votes/list/ord/date/genre/films/page/{self._current_page}/#list' try: film_response = requests.get(film_list_url).text except BaseException: proxy_manager.update_proxy() continue user_page = BeautifulSoup(film_response, "html.parser") is_end = kinopoisk_parser._check_that_is_end_of_film_list(user_page) if is_end: break wasted_time = self._get_film_duration_on_page(user_page) self._wasted_time_in_minutes += wasted_time print(f'Page {self._current_page}, wasted time {self._wasted_time_in_minutes}') self._move_next_page() def get_wasted_time(self): return self._wasted_time_in_minutes def _move_next_page(self): self._current_page += 1 @staticmethod def _get_film_duration_on_page(user_page): try: wasted_time = 0 film_list = user_page.findAll("div", {"class": "profileFilmsList"})[0].findAll("div", {"class": "item"}) for film in film_list: film_description = film.findAll("span") if len(film_description) <= 1: continue film_duration_in_minutes = int(film_description[1].string.split(" ")[0]) wasted_time = wasted_time + film_duration_in_minutes return wasted_time except BaseException: print("Something went wrong.") return 0 @staticmethod def _check_that_is_captcha(html): captcha_element = html.find_all("a", {"href": "//yandex.ru/support/captcha/"}) return len(captcha_element) > 0 @staticmethod def _check_that_is_end_of_film_list(html): error_element = html.find_all("div", {"class": "error-page__container-left"}) return len(error_element) > 0 

рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбрд┐рдмрдЧрд┐рдВрдЧ рдЪрд░рдг рдореЗрдВ, рдореИрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ рдХрд┐ рд╕рд┐рдиреЗрдорд╛ рдЦреЛрдЬ рдЕрдиреБрд░реЛрдзреЛрдВ (рд▓рдЧрднрдЧ 4 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ) рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрджрд┐рдЧреНрдз рдорд╛рдирддрд╛ рд╣реИред рдФрд░ рд╡рд╣ рд╕рд╣реА рд╣реИ! рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рднреА рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдФрд░ рдмреА рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИред

рдкреНрд▓рд╛рди рдмреА - рджрд╕реНрддрд╛рдиреЗ рдХреА рддрд░рд╣ рдкрд░рджреЗ рдХреЗ рдкреАрдЫреЗ рдмрджрд▓реЗрдВ


рдЖрдИрдкреА тАЛтАЛрдкреНрд░реЙрдХреНрд╕реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ рд╕рд░реНрд╡рд░ рд▓реЗрдиреЗ рдХреЗ рдмрд╛рдж (рдореИрдВ рдХрд┐рд╕реА рднреА рд╕реЗрд╡рд╛ рдХрд╛ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдирд╣реАрдВ рдХрд░рддрд╛, Google рд╕реЗ рдкрд╣рд▓реЗ рджреЛ рд▓рд┐рдВрдХ рд▓рд┐рдП), рдЗрд╕реЗ рдЯреЗрдврд╝рд╛-рдореЗрдврд╝рд╛ рдХрд┐рдпрд╛ рдФрд░ рдореБрдЦреНрдп рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдЬрд╛рд░реА рд░рдЦрд╛ред рдФрд░ рдПрдХ рдШрдВрдЯреЗ рдмрд╛рдж, рдЬрдм рдореИрдВ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдХрд░реАрдм рдерд╛, рдореБрдЭреЗ рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдЕрд╡рд░реБрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ! рдореБрдЭреЗ рдЗрд╕реЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдмрджрд▓рдирд╛ рдкрдбрд╝рд╛, рдЬреЛ рд╣рд░ рдЖрдзреЗ рдШрдВрдЯреЗ рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реВрдЪреА рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдореЗрд░реЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╕реВрдЪреА рдЕрдЪрд╛рдирдХ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдЖрдк рдкрд┐рдЫрд▓реЗ рд╡рд┐рдХрд▓реНрдк рдкрд░ рд▓реМрдЯ рд╕рдХрддреЗ рд╣реИрдВ (рд╡реЗ рд╣рд░ 24 рдШрдВрдЯреЗ рдореЗрдВ 10-24 рдкреНрд░реЙрдХреНрд╕реА рдЬрд╛рд░реА рдХрд░рддреЗ рд╣реИрдВ)ред

 class ProxyManager: def __init__(self): self._current_proxy = "" self._current_proxy_index = -1 self._proxy_list = [] self._get_proxy_list() def get_proxies(self): proxies = { "http": self._current_proxy, "https": self._current_proxy } return proxies def update_proxy(self): self._current_proxy_index += 1 if self._current_proxy_index == len(self._proxy_list): print("Proxies are ended") print("Try get alternative proxy") proxy_ip_with_port = self._get_another_proxy() print("Proxy updated to " + proxy_ip_with_port) self._current_proxy = f'http://{proxy_ip_with_port}' return self._current_proxy proxy_ip_with_port = self._proxy_list[self._current_proxy_index] print("Proxy updated to " + proxy_ip_with_port) self._current_proxy = f'http://{proxy_ip_with_port}' return self._current_proxy @staticmethod def _get_another_proxy(): proxy_response = requests.get("https://api.getproxylist.com/proxy?protocol[]=http", headers={ 'Content-Type': 'application/json' }).json() ip = proxy_response['ip'] port = proxy_response['port'] proxy = f'{ip}:{port}' return proxy def _get_proxy_list(self): proxy_response = requests.get("http://www.freeproxy-list.ru/api/proxy?anonymity=false&token=demo") self._proxy_list = proxy_response.text.split("\n") 

рдЗрди рд╕рднреА рдХреЛ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рддреЗ рд╣реБрдП (рдЕрдВрдд рдореЗрдВ рдореИрдВ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдЬреАрдердм рдХреЛ рдПрдХ рд▓рд┐рдВрдХ рджреВрдВрдЧрд╛), рдореБрдЭреЗ рдлрд┐рд▓реНрдореЛрдВ рдкрд░ рдЦрд░реНрдЪ рдХрд┐рдП рдЧрдП рд╕рдордп рдХреА рдЧрд┐рдирддреА рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝реА рдмрд╛рдд рдорд┐рд▓реАред рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдкреЛрд╖рд┐рдд рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХреА, рддрджрдо: "рдЖрдкрдиреЗ 84542 рдорд┐рдирдЯ рдпрд╛ 1409.03 рдШрдВрдЯреЗ рдпрд╛ 58.73 рджрд┐рди рд╡реНрдпрд░реНрде рдХрд┐рдПред"

рд╡реНрдпрд░реНрде рдореЗрдВ рд╕рдордп рд╡реНрдпрддреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рд╡реНрдпрддреАрдд рдХрд┐рдпрд╛


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡реНрдпрд░реНрде рдирд╣реАрдВред рдпрд╣ рдХрд╛рд░реНрдп рджрд┐рд▓рдЪрд╕реНрдк рдерд╛, рдпрджреНрдпрдкрд┐ рдХрдо рд╕реЗ рдХрдо рдХрд┐рд╕реА рдХреЛ, рд╢рд╛рдпрдж рд╣реА рдЖрд╡рд╢реНрдпрдХ рд╣реЛред
рдФрд░ рдЕрдм рдореИрдВ рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реЗ рдЬреАрд╡рди рдХреЗ рд▓рдЧрднрдЧ рджреЛ рдорд╣реАрдиреЗ рдореИрдВ рдПрдХ рдлрд┐рд▓реНрдо рджреЗрдЦ рд░рд╣рд╛ рдерд╛!

рдпрджрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЕрдкрдиреЗ рд▓рд┐рдП рдРрд╕реЗ "рдорд╣рддреНрд╡рдкреВрд░реНрдг" рдЖрдВрдХрдбрд╝реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИ, рддреЛ рдмрд╕ рдЕрдкрдиреА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреА рдЖрдИрдбреА рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБ рдФрд░ рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдпрджрд┐ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдлрд┐рд▓реНрдо рдкреНрд░рд╢рдВрд╕рдХ рдпрд╛ рд╢реБрд░реБрдЖрддреА рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИред

рд╕реНрд░реЛрдд рдХреЛрдб рд▓рд┐рдВрдХ

PS рдореБрдЭреЗ рдХреЛрдб рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рд╡ рд╕реБрдирдиреЗ рдореЗрдВ рднреА рдЦреБрд╢реА рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЕрдЬрдЧрд░ рдкрд░ рдмрд╣реБрдд рдХрдо рд▓рд┐рдЦрд╛ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рд╕рдордЭрд╛ рд╣реИред

Source: https://habr.com/ru/post/hi430978/


All Articles