Начинаю разбираться с python. Возникла потребность сделать парсер поисковой выдачи Яндекс. Но Яндекс постоянно баннит запросы. При запросе страницы использую разные прокси и юзер-агенты, сделал задержку между запросами. Но Яндекс все равно баннит. Что можно еще сделать, чтобы обойти бан и спарсить выдачу? Собственно код ниже:
from bs4 import BeautifulSoup as BS import requests from random import choice from time import sleep from random import uniform user_agents = [] proxies = [] query = input("Введите поисковый запрос -> ") ver_query = query.replace(' ', '%20') url = 'https://yandex.ru/search/?lr=213&text=' + ver_query print(url) with open('user_agents.txt', 'r') as file: for line in file.readlines(): user_agents.append(line.replace('\n', '')) with open('proxy_list.txt', 'r') as file: for line in file.readlines(): proxies.append(line.replace('\n', '')) while True: sleep(uniform(3, 6)) ua = choice(user_agents) ip_proxy = choice(proxies) user_agent = {'User-Agent': ua} proxy = {'http': 'http://' + ip_proxy} try: print('Прокси -> ', ip_proxy) print('User-Agent -> ', ua) url_proxy = requests.get(url, headers=user_agent, proxies=proxy) soap_proxy = BS(url_proxy.content, 'html.parser') place = 1 with open('content.txt', 'w') as yandex: yandex.write(soap_proxy.prettify()) if soap_proxy.find('p', class_='text-wrapper text-wrapper_info'): print("Этот прокси забанен, выбираем другой") continue else: for link in soap_proxy.findAll('a', class_='link link_theme_normal organic__url link_cropped_no i-bem'): with open('result.txt', 'a') as result_file: str_result = str(place) + ' -> ' + link.get('href') + '\n' result_file.write(str_result) place += 1 print("Выдача спарсена") break except: print("Faile") continue