Уведомления

Группа в Telegram: @pythonsu

#1 Июль 6, 2020 02:11:16

ArthurCher
Зарегистрирован: 2020-07-06
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг поисковой выдачи Яндекс

Добрый день!
Начинаю разбираться с 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

Офлайн

#2 Июль 6, 2020 02:19:14

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9846
Репутация: +  853  -
Профиль   Отправить e-mail  

Парсинг поисковой выдачи Яндекс

Надо подумать над тем, как Яндекс определяет близость запросов друг к другу. Заменять User-Agent и менять айпишник, да ещё и на общедоступный прокси-сервер, - это как-то тупо. Очень легко написать алгоритм, который это заметит и поставит под подозрение. Вот проанализируй, как Яндекс отлавливает таких “умников” типа. Но сам Яндекс тоже не верх гениальности, так что обойти его проверку можно.



Офлайн

#3 Июль 6, 2020 11:34:57

ArthurCher
Зарегистрирован: 2020-07-06
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг поисковой выдачи Яндекс

Прокси я покупаю, бесплатные не использую. При чем один раз получилось спарсить - потом Яндекс начал банить. Заливал новые платные прокси - все равно банил. Яндекс точно не верх гениальности, у них все через одно место работает. Но подскажите, как анализировать, куда смотреть и что искать?

Офлайн

#4 Июль 6, 2020 13:16:24

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Парсинг поисковой выдачи Яндекс

Может написать в сам янекс?



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#5 Июль 6, 2020 16:20:12

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9846
Репутация: +  853  -
Профиль   Отправить e-mail  

Парсинг поисковой выдачи Яндекс

ArthurCher
При чем один раз получилось спарсить
Проанализируй, как это получилось.

У них там используются нейронные сети, потому что таких умников дофига вообще-то, и человек, даже куча человек, заманается всё это просматривать. Возможно, там комбинированная хрень: нейронная сеть детектирует первый слой и передаёт уже конкретные случаи живым людям, которые принимают решение о включении в список подозрительных (при чёрном списке) либо вытаскивают его в список разрешённых (при белом списке).

При таком раскладе, в том случае, когда у тебя получилось, ты прошёл проверку нейронной сети, но не прошёл проверку человеком - то есть такой более умной нейронной сетью. Значит, ты что-то всё равно делал тупо. Вот найди это и исправь.



Отредактировано py.user.next (Июль 6, 2020 16:20:42)

Офлайн

#6 Июль 6, 2020 17:34:25

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2741
Репутация: +  183  -
Профиль   Отправить e-mail  

Парсинг поисковой выдачи Яндекс

> Возникла потребность сделать парсер поисковой выдачи Яндекс. Но Яндекс постоянно баннит запросы.

Не пробовал использовать API яндекса?



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#7 Июль 6, 2020 18:53:33

ArthurCher
Зарегистрирован: 2020-07-06
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг поисковой выдачи Яндекс

API Яндекса дает XML выдачу - она сильно отличается от реальной. Вопрос именно парсинге реальной живой выдачи.

ZerG
Может написать в сам янекс?

Они отправят в сервис Яндекс.XML - они не любят когда их парсят, будь то любой их сервис.

py.user.next
Оказалось все намного проще и тупее. Нужно просто выдерживать больший тайминг между обращениями. Я слишком часто стучался в выдачу. Нейронки они конечно используют, но крайне не умело.

Офлайн

#8 Июль 7, 2020 00:47:42

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9846
Репутация: +  853  -
Профиль   Отправить e-mail  

Парсинг поисковой выдачи Яндекс

ArthurCher
Нужно просто выдерживать больший тайминг между обращениями.
Далеко не факт, что за тобой не следят. Может, накапливают профиль, который при достижении порогового значения будет заблокирован.

ArthurCher
Нейронки они конечно используют, но крайне не умело.
Главная фишка нейронной сети в том, что она срабатывает не сразу, а сначала учится долго, а потом, научившись, работает быстро и надёжно. Так что вполне возможно, что за тобой стали следить и ты сейчас в качестве кролика подопытного используешься нейронной сетью для самообучения, что впоследствии создаст целый класс моделей, описывающих таких, как ты, и потом автоматом это всё будет блокироваться даже для тех, кто ещё ни разу ничего не делал.

Так что месяцок пособирай данные так. И вот тогда можешь говорить, что преодолел их защиту.



Отредактировано py.user.next (Июль 7, 2020 00:48:18)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version