Форум сайта python.su
Добрый день!
Начинаю разбираться с 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
Офлайн
Надо подумать над тем, как Яндекс определяет близость запросов друг к другу. Заменять User-Agent и менять айпишник, да ещё и на общедоступный прокси-сервер, - это как-то тупо. Очень легко написать алгоритм, который это заметит и поставит под подозрение. Вот проанализируй, как Яндекс отлавливает таких “умников” типа. Но сам Яндекс тоже не верх гениальности, так что обойти его проверку можно.
Офлайн
Прокси я покупаю, бесплатные не использую. При чем один раз получилось спарсить - потом Яндекс начал банить. Заливал новые платные прокси - все равно банил. Яндекс точно не верх гениальности, у них все через одно место работает. Но подскажите, как анализировать, куда смотреть и что искать?
Офлайн
Может написать в сам янекс?
Офлайн
ArthurCherПроанализируй, как это получилось.
При чем один раз получилось спарсить
Отредактировано py.user.next (Июль 6, 2020 16:20:42)
Офлайн
> Возникла потребность сделать парсер поисковой выдачи Яндекс. Но Яндекс постоянно баннит запросы.
Не пробовал использовать API яндекса?
Онлайн
API Яндекса дает XML выдачу - она сильно отличается от реальной. Вопрос именно парсинге реальной живой выдачи.
ZerG
Может написать в сам янекс?
py.user.nextОказалось все намного проще и тупее. Нужно просто выдерживать больший тайминг между обращениями. Я слишком часто стучался в выдачу. Нейронки они конечно используют, но крайне не умело.
Офлайн
ArthurCherДалеко не факт, что за тобой не следят. Может, накапливают профиль, который при достижении порогового значения будет заблокирован.
Нужно просто выдерживать больший тайминг между обращениями.
ArthurCherГлавная фишка нейронной сети в том, что она срабатывает не сразу, а сначала учится долго, а потом, научившись, работает быстро и надёжно. Так что вполне возможно, что за тобой стали следить и ты сейчас в качестве кролика подопытного используешься нейронной сетью для самообучения, что впоследствии создаст целый класс моделей, описывающих таких, как ты, и потом автоматом это всё будет блокироваться даже для тех, кто ещё ни разу ничего не делал.
Нейронки они конечно используют, но крайне не умело.
Отредактировано py.user.next (Июль 7, 2020 00:48:18)
Офлайн