Когда вы запускаете поисковый робот, и он отправляет слишком много запросов на целевой сайт в течение короткого времени с одного и того же IP-адреса и устройства, целевой сайт может вызвать reCAPTCHA или даже заблокировать ваш IP-адрес, чтобы помешать вам собирать данные.

Здесь, в этой статье, я покажу вам два разных метода, которые можно применить в вашем поисковом роботе, чтобы избежать таких проблем при использовании Python.
1. Смените свой IP-адрес
2. Смените User-agent

Повернуть IP-адрес

Вы можете предоставить прокси с каждым запросом. Если вы продолжите использовать один конкретный IP-адрес, сайт может обнаружить его и заблокировать. Чтобы решить эту проблему, вы можете менять свой IP-адрес и отправлять разные IP-адреса с каждым запросом. Хотя это сделает вашу программу немного медленнее, но может помочь вам избежать блокировки с целевого сайта. Вы можете использовать браузер Tor и установить прокси Tor в соответствии с ним. Но здесь мы будем использовать клиент tor python под названием torpy, который не требует загрузки браузера tor в вашей системе. Ссылка GitHub для библиотеки следующая:



Вы можете установить библиотеку с помощью следующей команды:

pip install torpy

Допустим, мы хотим отправлять запросы на следующие сайты:

urls = [ "https://www.google.com", "https://www.facebook.com", "https://www.youtube.com", "https://www.amazon.com", "https://www.reddit.com", "https://www.instagram.com", "https://www.linkedin.com", "https://www.wikipedia.org", "https://www.twitter.com"]

Итак, мы собираемся написать функцию, которая запускает новую сессию с каждым запросом URL. Затем прокрутите все URL-адреса и передайте каждый URL-адрес с новым сеансом.

Мы можем проверить наш IP-адрес с этого сайта https://httpbin.org/ip
Итак, в строке 11 мы печатаем IP-адрес сеанса. Если мы выполним указанную выше программу, мы получим IP-адреса каждого запроса. В моем случае вывод выглядит следующим образом:

{'origin': '107.189.7.175'}
{'origin': '185.220.101.162'}
{'origin': '185.220.101.79'}
{'origin': '103.236.201.88'}
{'origin': '185.220.100.242'}
{'origin': '209.141.53.20'}
{'origin': '198.98.62.79'}
{'origin': '184.105.220.24'}
{'origin': '193.218.118.167'}

Как видите, каждый IP-адрес отличается для каждого запроса.

Повернуть пользовательский агент

Большинство веб-сайтов блокируют запросы, если они приходят без достоверной информации о браузере. Итак, мы обычно передаем информацию о баузере в виде User-Agent с каждым запросом, как показано ниже:

import requests
USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.4.10 (KHTML, like Gecko) Version/8.0.4 Safari/600.4.10"
HEADERS = {"User-Agent": USER_AGENT}
html_content = requests.get(url, headers=HEADERS, timeout=40).text

Пользовательский агент обычно содержит информацию о типе приложения, информации об операционной системе, версии программного обеспечения и т. д.

Когда вы оставляете информацию об агенте пользователя неизменной, как в приведенном выше фрагменте кода, целевой сайт может обнаружить, что все запросы (которые отправляет ваша программа) поступают с одного и того же устройства. Мы можем подделать эту информацию, отправив действительный пользовательский агент, но разные агенты с каждым запросом. На этом сайте вы можете найти много достоверной информации о пользовательском агенте.

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

import random
AGENT_LIST = [
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36",
"Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:24.0) Gecko/20100101 Firefox/24.0",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/91.0.4472.114 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Safari/605.1.15",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0"
]
USER_AGENT = random.choice(AGENT_LIST)

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

Еще один простой способ — добавить time.sleep() перед каждым запросом, чтобы избежать проблем с reCAPTCHA, как показано ниже:

Здесь, в строке 7, мы добавили метод time.sleep(), который выбирает случайное число от 1 до 3.

Помните, что все вышеперечисленные методы сделают ваше сканирование в Интернете медленнее, чем обычно. Но это помогает избежать блокировки целевого сайта и обойти проблемы с reCAPTCHA.

Автор: Садман Кабир Сумик