///
Ошибка 403 Forbidden: причины и способы устранения
Екатерина Янчук
Екатерина Янчук
Автор технических статей
4 сентября 2024 г.
7 мин

Ошибка 403 и другие проблемы при веб-скрапинге: почему возникают и как избежать?

 

 

Веб-скрапинг — процесс, который позволяет автоматизировать сбор данных с различных источников. Однако часто так бывает, что при попытке получить доступ к информации скрапер может столкнуться с различными препятствиями, одним из которых является распространённая ошибка 403 Forbidden. Эта ошибка указывает на то, что сервер заблокировал доступ к запрашиваемому ресурсу. Чтобы эффективно заниматься веб-скрапингом, важно понимать причины её возникновения и знать методы её обхода. В этой статье мы рассмотрим, что такое ошибка 403, почему она возникает, какие стратегии помогут её обойти, а также разберём другие ограничения при сборе данных и способы их решения. 

robots
Начните сейчас и автоматизируйте решение reCAPTCHA v2

Причины возникновения 

Почему же сервер блокирует доступ к данным? В процессе веб-скрапинга ошибка 403 возникает из-за механизмов защиты сайтов от несанкционированного доступа или злоупотребления ресурсами. Давайте подробнее рассмотрим причины появления данной ошибки и способы их решения. 

  • Ограничение по IP-адресу: сайты могут ограничить доступ по IP-адресу. Если с одного IP-адреса поступает слишком много запросов, сервер может заблокировать его для предотвращения перегрузок и защиты от возможных атак. 

  • Headless-режим: использование безголового браузера в инструментах автоматизации, таких как Selenium, также может привести к ошибкам. Некоторые веб-сайты способны распознавать, что запросы исходят из браузера в headless режиме, где отсутствует взаимодействие с пользователем (например, клики, прокрутка страницы). Это может указывать на автоматизированный доступ, который сайты могут расценивать как потенциально подозрительную активность. Но если всё же вам нужен этот режим, настройте браузер так, чтобы он имитировал реальный браузер с графическим интерфейсом. 

  • Отсутствие необходимых заголовков и cookies. Некоторые сайты требуют наличия определенных cookies или сессий для доступа к контенту. 

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

     

Как обойти ошибку 403 при веб-скрапинге 

 

Для того, чтобы сбор данных выполнялся без сбоев, рассмотрим несколько эффективных методов предотвращения блокировки доступа к нужным ресурсам: 

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

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

import time
time.sleep(5)  # задержка в 5 секунд между запросами
        

- Имитация реального браузера. Для этого можно применить различные опции, например, как это можно реализовать в Selenium: 

from selenium import webdriver

options = webdriver.ChromeOptions()
# Не добавляем параметр --headless, если нужен запуск графического браузера
options.add_argument("--headless")
# Эмуляция размера экрана
options.add_argument("window-size=1920,1080")
# Этот флаг помогает скрыть признаки автоматизации.
options.add_argument("--disable-blink-features=AutomationControlled")

driver = webdriver.Chrome(options=options)
driver.get("https://example.com")
        

-  Если сайт требует аутентификации, важно корректно сохранять и использовать cookies. С помощью библиотеки requests можно передавать cookies вместе с запросами: 

import requests

session = requests.Session()
response = session.get('https://example.com')

# использование cookies при последующих запросах
response2 = session.get('https://example.com/another-page')
        

-  Установка правильных User-Agent: использование реалистичных User-Agent может помочь обойти блокировку. Лучше всего использовать те, что применяют популярные браузеры (например, Chrome, Firefox): 

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36"
}
        

- Также можно использовать ротацию User-Agent с помощью Python-библиотеки random. Для этого нужно заранее создать отдельный список User-Agent различных браузеров и периодически обновлять его. 

Пример кода для выбора случайного User-Agent из заранее созданного списка при помощи random: 

import random
import requests

user_agents = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.6533.122 Safari/537.3",
    "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Firefox/56.0 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15",
]

random_user_agent = random.choice(user_agents)

headers = {
    "User-Agent": random_user_agent
}

response = requests.get("https://example.com", headers=headers)

print(f"Статус-код: {response.status_code}")
print(f"Используемый User-agent: {random_user_agent}")
        

Помимо смены User-Agent, данная библиотека позволяет также использовать случайные IP-адреса для каждого запроса из пула прокси-серверов, добавлять случайные задержки между запросами и ротировать другие элементы для имитации поведения различных пользователей и устройств. 

 

Какие ещё бывают трудности при веб-скрапинге? 

 

Помимо ошибки 403, скраперы часто сталкиваются и с другими ошибками: 

  • 401 Unauthorized: доступ запрещён без учётных данных. Решение — использование аутентификации с логином и паролем.

  • 500 Internal Server Error: проблема на стороне сервера. Решение — повторить запрос позже или сообщить администратору.

  • 429 Too Many Requests: слишком много запросов. Решение — уменьшение частоты запросов, использование прокси.

  • Запутанная HTML-структура: при веб-скрапинге можно столкнуться с обфусцированным HTML-кодом, где классы, идентификаторы и другие элементы имеют непонятные или динамически генерируемые имена. Решение — использование устойчивых XPath или CSS селекторов, поиск элементов по текстовому содержанию, а также специальных библиотек, например, lxml, для парсинга и обработки HTML. В сложных случаях можно применять TensorFlow или PyTorch для создания моделей машинного обучения, которые способны распознавать паттерны и классифицировать обфусцированные элементы на основе большого объёма данных. Важно понимать, как именно сайт обфусцирует данные, чтобы адаптировать стратегии скрапинга соответствующим образом.

Ещё одно распространённое препятствие – это капча, система защиты сайтов, которая часто появляется по схожим причинам. Но не стоит беспокоиться, ведь есть множество сервисов, которые помогают эффективно обходить такие ограничения, и одним из лучших является CapMonster Cloud. Этот удобный облачный инструмент предоставляет API для автоматического решения капч, что значительно облегчает работу. Вот шаги для интеграции CapMonster Cloud в ваш скрапер-код на Python:

  • Регистрация и получение API-ключа. Для использования CapMonster Cloud вам необходимо зарегистрироваться в сервисе и получить API-ключ для аутентификации запросов к сервису.

  • Установка необходимых библиотек. CapMonster Cloud имеет собственные библиотеки для разных языков. Рассмотрим подключение официальной библиотеки для языка Python: 

pip install capmonstercloudclient

 

С помощью этой библиотеки можно легко составить задачу, отправить её  на сервер и получить ответ: 

# https://github.com/CapMonsterCloud/capmonstercloud-client-python

import asyncio
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import RecaptchaV2Request
# from capmonstercloudclient.requests.baseRequestWithProxy import ProxyInfo  # Раскомментируйте, если планируете использовать прокси

API_KEY = "YOUR_API_KEY"  # Укажите ваш API-ключ CapMonster Cloud

async def solve_recaptcha_v2():
    client_options = ClientOptions(api_key=API_KEY)
    cap_monster_client = CapMonsterClient(options=client_options)

    # Базовый пример без прокси
    # CapMonster Cloud автоматически использует свои прокси
    recaptcha2_request = RecaptchaV2Request(
        websiteUrl="https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high",
        websiteKey="6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd"
    )

    # Пример использования вашего собственного прокси
    # Раскомментируйте данный блок, если вы хотите использовать собственный прокси

    # proxy = ProxyInfo(
    #     proxyType="http",
    #     proxyAddress="123.45.67.89",
    #     proxyPort=8080,
    #     proxyLogin="username",
    #     proxyPassword="password"
    # )

    # recaptcha2_request = RecaptchaV2Request(
    #     websiteUrl="https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high",
    #     websiteKey="6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd",
    #     proxy=proxy,
    #     userAgent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36"
    # )

    # При необходимости можно проверить баланс
    balance = await cap_monster_client.get_balance()
    print("Balance:", balance)

    result = await cap_monster_client.solve_captcha(recaptcha2_request)
    print("Solution:", result)

asyncio.run(solve_recaptcha_v2()) 

 

Полезные ссылки 

 

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

Selenium WebDriver 

Библиотеки для Python timerandom и requests

CapMonster Cloud: 

сайт

документация

CapMonster Cloud API

 


Заключение 

 

Веб-скрапинг отлично справляется даже с самыми большими объёмами данных, но частые ошибки могут усложнить процесс. Понимание причин ошибок, таких как 403, и применение правильных методов обхода — настройка User-Agent, использование прокси и сервисов для капчи — сделает вашу работу эффективнее. Следуя проверенным методам, вы уменьшите риск блокировок и упростите сбор данных, а внимательный подход к задаче не только упростит работу, но и обеспечит положительный опыт взаимодействия с веб-ресурсами. 


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

ItGuy
geear
Партнёрская программа для разработчиков софта
Зарабатывайте до 30% от трат ваших пользователей на обход капчи
✅ Заявка отправлена
Спасибо за интерес к нашей партнёрской программе! Мы свяжемся с вами в течение 7 рабочих дней.
Заявка на подключение
Заполните форму, чтобы отправить заявку на подключение к партнёрской программе
Больше статей