Веб-скрапинг без блокировки

Руководство про парсинг сайтов без блокировки. Узнайте о 9 различных решениях для защиты веб-сайта от блокировки.
3 min read
Web scraping without getting blocked

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

Одним из явных препятствий являются блокировки доступа, установленные целевым веб-сайтом. Они могут возникать по разным причинам, например, из-за строгих политик парсинга, опасений, связанных со злоупотреблением ресурсами, проблемами с репутацией исходного IP-адреса или обнаружением (поддельных) пользовательских агентов.

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

Стратегии, которые помогут вам избежать блокировки доступа

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

1. Поймите политику и условия обслуживания вашей цели

Когда вы начинаете парсить новый сайт, вам нужно ознакомиться с ним, а не просто изучить HTML-структуру страницы. Ознакомление должно включать понимание политики и условий обслуживания сайта, который вы собираетесь парсить. Это часто включает в себя позицию сайта по отношению к веб-скрапингу, разрешен ли парсинг и какие конкретные страницы вам разрешено парсить. Несоблюдение этих условий может привести к блокировке сайта и потенциальному юридическому риску.

Одним из важных документов, о котором следует знать, является файл robots.txt Этот файл находится в корневом каталоге сайта и содержит инструкции для веб-роботов, в которых указывается, какие части сайта нельзя сканировать или обрабатывать.

Ниже мы привели пример файла robots.txt:

User-agent: *
Disallow: /private/
Disallow: /temp/

Здесь файл robots.txt говорит всем роботам (обозначаемым * после User-agent) не парсить личные и временные каталоги веб-сайта.

Уважительный веб-скрапинг подразумевает соблюдение правил конкретного сайта.

2. Соблюдайте этические стандарты парсинга

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

Соблюдение этих рекомендаций крайне важно:

  • Не бомбардируйте серверы постоянными запросами. Делайте достаточные временные промежутки между ними. Некоторые сайты могут обнаруживать и блокировать парсеры, которые быстро извлекают большие объемы данных, потому что это не похоже на поведение человека. Чтобы выглядеть более естественно и снизить вероятность блокировки, рекомендуется добавлять временную задержку к запросам. Однако вместо фиксированной временной задержки лучше использовать нерегулярные интервалы, чтобы более точно имитировать поведение человека.
  • Не собирайте личные данные без согласия. Это не только этический, но и зачастую юридический вопрос. Убедитесь, что у вас есть необходимые разрешения, прежде чем парсить личные данные.
  • Уважайте данные, которые вы получаете. Используйте данные, которые вы собираете, ответственно и законно. Убедитесь, что вы делаете это в соответствии со всеми применимыми законами и правилами, такими как законы об авторском праве и Общий регламент по защите данных (GDPR).

Ниже мы показали, как вы можете создать нерегулярные интервалы между запросами в Python:

import time
import random

urls = ['https://www.targetwebsite.com/page1', 'https://www.targetwebsite.com/page2', 'https://www.targetwebsite.com/page3']

for url in urls:
    response = requests.get(url)
    # Process response
    sleep_time = random.uniform(1, 10)  # Generate a random sleep time between 1 and 10 seconds
    time.sleep(sleep_time)  # Sleep for a random time between requests

Этот код циклически просматривает список urls-адресов в массиве urls. Для каждого URL он делает запрос на его получение, а затем приостанавливается, используя функцию time.sleep(), прежде чем перейти к следующему запросу. Эти случайные интервалы помогают имитировать поведение человека в Интернете, снижая вероятность обнаружения.

3. Используйте (вращающиеся) прокси

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

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

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

Посмотрите ниже на фрагмент кода, который поможет вам запустить ротацию прокси в Python:

import requests
from itertools import cycle

# List of proxies
proxy_list = ['ip1:port1', 'ip2:port2', ...] 
proxy_pool = cycle(proxy_list) # create a cycle of proxies

url = 'https://www.targetwebsite.com'

for i in range(1,3):
    # Get a proxy from the pool
    proxy = next(proxy_pool)
    print(f"Request #{i}:")
    try:
        response = requests.get(url, proxies={"http": proxy, "https": proxy})
        print(response.content)
    except:
        # Most free proxies will often get connection errors, so we catch them here
        print("Connection error with proxy:", proxy)

В этом фрагменте кода используется список прокси (т. е. ie proxy_list), который циклически повторяется, поэтому каждый выполняемый запрос имеет другой IP-адрес. Из-за этого сайтам сложнее обнаружить ваши операции парсинга.

Вращающиеся прокси — мощный инструмент. Однако они должны стать частью более крупной стратегии. Чтобы перемещаться по беспокойному морю веб-скрапинга и не быть заблокированным, вы должны комбинировать их с другими методами, о которых мы рассказали в этой статье.

4. Используйте правильные заголовки и пользовательские агенты

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

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

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

Другие полезные заголовки, которые может включать ваш парсер, это Accept-Language, Accept-Encoding и Connection. Они, как правило, отправляются веб-браузерами и редко используются парсерами. Парсеры обычно игнорируют их, потому что они не имеют прямого влияния на поиск веб-контента. Однако их включение помогает сделать запросы парсера более подлинными, что снижает вероятность обнаружения.

Посмотрите на фрагмент Python, который устанавливает User-Agent и Referer в заголовке запроса для имитации настоящего сеанса просмотра:

url = 'https://www.targetwebsite.com'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36',
    'Referer': 'https://www.google.com/'
}

response = requests.get(url, headers=headers)

5. Решайте ловушки для хакеров и ошибки

Навигация по сайту может быть сложной из-за таких препятствий, как honeypot (ловушки для хакеров). Honeypot — это скрытые ссылки, специально разработанные для того, чтобы оставаться незамеченными обычными пользователями, однако быть обнаруженными парсерами и ботами. Эти ссылки часто скрываются с помощью HTML-элементов, для которых установлено значение hidden или none, или маскируются под кнопки, чей цвет соответствует фону страницы. Основная цель внедрения “медовых точек” – выявление и занесение ботов в черный список.

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

from bs4 import BeautifulSoup
import requests

url = 'https://www.targetwebsite.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

for link in soup.select('a'):
    if 'display' in link.get('style', '') and 'none' in link['style']:
        continue  # Skip this link
    # Process link

Этот код пропускает любую ссылку с атрибутом code>display: none в атрибуте style, что является общей характеристикой ссылок honeypot.

Еще одна важная вещь, на которую следует обратить внимание при парсинге данных – это ошибки. Поскольку ответы с ошибками возникают нередко. Они часто обозначаются кодами состояния HTTP в диапазоне 4xx (ошибки клиента) или 5xx (ошибки сервера). Чтобы не перегружать сервер чрезмерным количеством запросов, что может привести к блокировке, важно грамотно справляться с этими ошибками.

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

6. Используйте сервис решения CAPTCHA

Полностью автоматизированный публичный тест Тьюринга для определения различий между компьютерами и людьми (CAPTCHA) — это мера безопасности, применяемая многими веб-сайтами для предотвращения действий автоматизированных ботов, включая парсинг. Они созданы таким образом, чтобы людям было легко их решать, но они были сложными для машин.

Если вы столкнулись с CAPTCHA, вам следует рассмотреть возможность использования Web Unlocker от Bright Data. Наш инструмент использует различные методы, в том числе алгоритмы машинного обучения и даже человеческие решатели для расшифровки CAPTCHA от вашего имени. Его роль заключается в автоматизации процесса решения CAPTCHA, чтобы парсер мог беспрепятственно продолжать процесс извлечения данных.

7. Отслеживайте ограничения скорости и отказы в доступе

Многие сайты устанавливают ограничения скорости и отказы в доступе, чтобы защитить свои ресурсы от использования автоматическими ботами. Каждый запрос, который вы отправляете на сервер, потребляет ресурсы. То есть тысячи ботов, отправляющих запросы ежесекундно, могут легко вывести из строя сервер или снизить производительность сайта. Чтобы предотвратить это, веб-ресурсы устанавливают ограничения скорости, а некоторые даже предоставляют заголовок X-RateLimit-Limit в своих ответах, подробно описывая свои ограничения скорости. Вы должны соблюдать эти ограничения, чтобы избежать блокировки.

Сервер обычно сообщает об этих ограничениях через коды состояния HTTP. Код состояния 200 означает, что все прошло гладко, а код 429 означает, что вы отправили слишком много запросов за определенное время. Аналогично, код 403 означает, что доступ запрещен, а код 503 указывает на недоступность сервера, возможно, из-за перегрузки. Знать эти коды очень важно для навигации по извлечению данных.

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

import time
import requests

def respectful_requester(url, delay_interval=1):
    response = requests.get(url)
    # If the status code indicates rate limiting, sleep then retry
    if response.status_code == 429:
        print('Rate limit reached. Sleeping...')
        time.sleep(delay_interval)
        return respectful_requester(url, delay_interval)
    elif response.status_code != 200:
        print(f'Error: {response.status_code}. Try a different proxy or user-agent')
    
    return response

Эта функция отправляет запрос GET на URL-адрес и проверяет ответ. Если он видит код состояния 429, то приостанавливается на указанный интервал задержки, а затем снова пытается выполнить запрос. При необходимости вы также можете добавить более сложную обработку для других кодов состояния.

8. Парсите из кеша Google

Для труднодоступных веб-сайтов или данных, не зависящих от времени, есть альтернативный подход – парсинг данных из кэшированной копии сайта Google, а не с самого сайта. Этот метод может быть особенно полезен при работе со сложными веб-ресурсами, которые активно блокируют парсеры. Эти кэшированные страницы можно парсить вместо исходных веб-страниц, чтобы избежать срабатывания каких-либо механизмов защиты от парсинга. Имейте в виду, что этот метод может быть ненадежным, поскольку некоторые сайты просят Google не кэшировать их контент. Кроме того, данные из кеша Google могут быть устаревшими.

Чтобы парсить кэшированную версию сайта , просто добавьте его URL в конец http://webcache.googleusercontent.com/search?q=cache:. Например, если вы хотите выполнить парсинг веб-сайта Bright Data, вы можете использовать следующий URL-адрес: http://webcache.googleusercontent.com/search?q=cache:https://https://brightdata.com/.

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

9. Используйте сторонние прокси и сервисы парсинга

По мере того как игра в “кошки-мышки” между парсерами и администраторами сайтов усиливается, возрастает сложность поддержания эффективной и незаметной установки веб-скрапинга. На сайтах появляются новые способы обнаружения, замедления или блокировки парсеров, что требует динамического подхода для преодоления этих средств защиты.

Иногда лучший подход — позволить экспертам справиться с трудными частями. Именно в этом и заключается преимущество сторонних прокси и услуг по борьбе со скрапингом, таких, как Bright Data. Bright Data постоянно предлагает самые актуальные технологии защиты от парсинга, адаптируя свои стратегии, чтобы обойти новые препятствия.

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

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

Подведем итоги

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

Однако помните, что даже самым опытным исследователям нужен надежный набор инструментов. Здесь приходит на помощь Bright Data. Комплексные решения предлагают широкий спектр услуг, специально разработанных для оптимизации процесса веб-скрапинга. Используйте Web Unlocker для доступа к данным, скрытым за CAPTCHA. Или выберите один из прокси, включая надежные прокси-серверы, серверные и резидентные прокси, чтобы сохранить анонимность.

Удачного вам парсинга!

Вас также может заинтересовать

How Tos

Как использовать прокси-серверы в Node.js

Скрейпинг веб-страниц как метод сбора данных часто затрудняется различными препятствиями, включая запреты на использование IP-адресов, геоблокировку и вопросы конфиденциальности. К счастью, прокси-серверы могут помочь вам справиться с этими проблемами. Они служат посредниками между вашим компьютером и Интернетом, обрабатывая запросы с использованием собственных IP-адресов. Эта функция не только помогает обойти ограничения и запреты, связанные с интеллектуальной […]
4 min read
How to Set Proxy in AIOHTTP
How Tos

Как настроить прокси-сервер в AIOHTTP

Узнайте из этого пошагового руководства, как настроить прокси-сервер в AIOHTTP
4 min read
Invoke-Webrequest With a Proxy
How Tos

Как использовать PowerShell Invoke-WebRequest с прокси-сервером

Командлет Invoke-WebRequest в PowerShell — удобный инструмент для отправки HTTP-запросов на веб-сайты. Если вы уже пользуетесь прокси-сервисами Bright Data, вы можете использовать этот командлет с прокси-сервером, указав параметр -Proxy, а затем сведения о прокси-сервере.
4 min read