@Hitreno

Почему яндекс почти сразу банит python-парсер?

Есть следующий парсер яндекс поиска:
P.S. код вообще никак не оптимизирован.
Код
import requests 
from bs4 import BeautifulSoup
import time

PAGES=5 # Сколько страниц парсим?

def get_search(search_str):
    headers_Get = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/536 (KHTML, like Gecko) Chrome/86.0 Safari/536',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Accept-Language': 'en-US,en;q=0.5',
        'Accept-Encoding': 'gzip, deflate',
        'DNT': '1',
        'Connection': 'keep-alive',
        'Upgrade-Insecure-Requests': '1'
    } # "Заголовки"
    blok_list = search_str.split()
    url_query = '%20'.join(blok_list) # Заменяем пробелы спец. символом
    output = []
    for page in range(PAGES):
        url = 'https://yandex.ru/search/?text=' + url_query + '&p='+str(page)+'&lr=213' # Ссылка для парса
        time_start=time.time() # Время в начале
        r = requests.get(url, headers=headers_Get) # Парсим
        soup = BeautifulSoup(r.text, "html.parser") # Отправляем html в бьютифулсуп
        for searchWrapper in soup.find_all('li', {'class':'serp-item'}): # Ищем все результаты поиска
            url = searchWrapper.find('a', {'class':'i-bem'})["href"] # Берём ссылку из результата
            if url[0]=="h": # Нормальная ли ссылка (http?)
                output.append(url) # Ссылка найдена, беру!
        a=time.time()-time_start # Ожидание, чтобы проходило 3 сек. между запросами
        if 0<a<3 and (page+1)!=PAGES: # Чтобы лишнего не ждать
            time.sleep(3-a)
    return output

print(len(get_search("ух, негодяи! Зачем банить так сразу!?")))
Запускал с домашнего компа в россии, задержка между запросами аж 3 сек... Забанили после 10-ти запросов. Прошу знающих посмотреть - проблема в коде или это яндекс такой хитрый. В первом случае если прокси стоят ок. 15р., то получается 1,5 рубля за запрос?! Выглядит странно.
  • Вопрос задан
  • 452 просмотра
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы