Когда вы запускаете поисковый робот, и он отправляет слишком много запросов на целевой сайт в течение короткого времени с одного и того же 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.
Автор: Садман Кабир Сумик