перейти к содержанию

Полное руководство по ограничению скорости для ответственного парсинга веб-страниц

Асинхронное программирование и библиотеки, такие как aiohttp и httpx, стали настоящей находкой для современного веб-скрапинга благодаря их скорости и масштабируемости. Возможность одновременной обработки сотен запросов позволяет нам собирать данные с невероятно высокой скоростью.

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

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

Растущая угроза агрессивного парсинга веб-страниц

Давайте начнем с некоторой истории о том, почему ответственное ограничение скорости стало важным при парсинге сайтов.

За последние 5 лет объем проблемного парсинга вырос до ошеломляющего уровня. Некоторые оценки предполагают более 40% всего веб-трафика теперь поступает от парсеров или ботов какой-то формы.

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

Этот поток парсерской деятельности захлестнул многие веб-сайты. Даже такие крупные объекты, как LinkedIn, Amazon и Craigslist, столкнулись со злоупотреблениями скраперами:

  • LinkedIn сообщается в 2019 они блокировали более 95 миллионов сеансов парсеров-ботов в день.

  • Amazon было борьба с фейковым отзывом скраперы с 2015 года обошлись им в миллиарды долларов мошенничеством.

  • Craigslist на самом деле подал иски против сайтов, очищающих свои списки без разрешения еще в 2019 году.

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

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

Основные принципы ответственного парсинга веб-страниц

Так что же именно представляет собой ответственный парсинг веб-страниц в эпоху распространения ботов? Вот несколько основных принципов, которые следует учитывать:

  • Скрапинг легально – Соблюдайте Условия обслуживания сайтов и уважайте авторские права. Получите разрешение там, где это необходимо.

  • Соскоб этически – Не наносите вред функциональности и производительности веб-сайта и не стоите денег владельцам.

  • Вежливо очищаем – Ползите с разумной скоростью, чтобы не выглядеть как атака или отказ в обслуживании.

  • Устойчивое очищение – Не допускайте, чтобы ваши усилия по очистке были заблокированы в долгосрочной перспективе. Сохраните доступ.

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

Роль ограничения скорости для ответственного парсинга

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

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

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

  • Повышает надежность – Спам-запросы часто приводят к неудачным и заблокированным запросам. Тщательное ограничение скорости приводит к более высоким показателям успеха.

  • Позволяет осуществлять мониторинг – Благодаря регулированию вы можете просматривать журналы и показатели, чтобы выявить проблемы, а не слепые повторные попытки и сбои в рассылке спама.

  • Обеспечивает соответствие – Многие сайты полностью запрещают парсинг или устанавливают ограничения, например 1 запрос в 5 секунд, в своих Условиях обслуживания. Регулирование позволяет вам следовать их правилам.

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

Библиотеки асинхронного парсинга для использования с ограничением скорости

Поскольку в этом руководстве основное внимание уделяется ограничению скорости асинхронного парсинга, давайте сначала рассмотрим некоторые популярные библиотеки асинхронного парсинга в Python:

ФамилияОписаниеСильные стороны
httpxПолнофункциональный асинхронный HTTP-клиентБыстрый, простой в использовании
айоhttpВетеранская асинхронная библиотекаОтличные документы, поддержка
трио-вебсокетАсинхронные веб-сокетыБыстрая автоматизация
трекПостроен на TwistПерфоманс

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

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

Простые подходы к ограничению скорости асинхронного парсера Python

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

Явный сон между запросами

Самый простой метод дросселирования — добавление небольших time.sleep() вызывает в ваших циклах запроса:

import time

# Sleep 0.1 sec to limit to 10 RPS 
time.sleep(0.1)

Плюсы:

  • Простота реализации

Минусы:

  • Не точно – сон складывается
  • Трудно отслеживать запросы

Это работает в базовых случаях, но ему не хватает точности и наглядности, как в других вариантах, которые мы рассмотрим.

Ограничение параллельных запросов

Мы можем ограничить количество одновременно выполняемых запросов с помощью семафоров:

# Limit to 10 concurrent requests
sem = asyncio.Semaphore(10)  

async def request():
   async with sem:
     await fetch()

Плюсы:

  • Ограничивает параллельную нагрузку на целевые сайты

Минусы:

  • По-прежнему нет контроля над общим количеством запросов в секунду.
  • Трудно отслеживать/измерять пропускную способность

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

Точное ограничение скорости с помощью Aiometer для плавного парсинга Python

Одна из самых популярных библиотек Python для регулирования асинхронного кода — Айометр. Всего несколькими строками он позволяет легко ограничить парсеры точной скоростью запросов в секунду.

Aiometer работает, оборачивая асинхронный код следующим образом:

import aiometer

async def fetch(url):
   # make request

await aiometer.run_on_each(
   fetch, 
   urls,
   max_per_second=5
)

Затем мы можем установить точный предел скорости, например 5 RPS, который будет обеспечивать для нас aiometer. Это обеспечивает точный контроль над пропускной способностью.

Плюсы:

  • Простой API
  • Точное ограничение точной частоты вращения в секунду
  • Видимость всех запросов
  • Также поддерживает максимальный параллелизм

По моему опыту, aiometer в настоящее время обеспечивает лучшее ограничение скорости «под ключ» для асинхронного парсинга Python. Конфигурация минимальная, надежно сглаживает скребки.

Далее давайте посмотрим на реальный пример.

Пример использования Aiometer: ответственный подход к очистке новостей Google

Чтобы продемонстрировать айометр в действии, вот пример скрипта для сбора последних заголовков из Новостей Google с контролируемой скоростью:

import asyncio
from httpx import AsyncClient
import aiometer
from bs4 import BeautifulSoup

async def fetch(url):
   async with AsyncClient() as client:
      resp = await client.get(url)
      soup = BeautifulSoup(resp.text, ‘html.parser‘)

      for title in soup.select(‘h3‘):
         print(title.text)

async def main():
   urls = [
      ‘https://news.google.com/‘ 
      for _ in range(50)
   ]

   await aiometer.run_on_each(
      fetch, urls, max_per_second=2  
   )

asyncio.run(main())

Здесь мы используем httpx для захвата страницы, BeautifulSoup для ее анализа и aiometer для ограничения общей скорости парсинга до 2 запросов в секунду.

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

Для таких общедоступных сайтов aiometer упрощает поиск правильного баланса производительности и ответственности.

Расширенная ротация прокси для более сложных целей

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

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

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

Вот несколько известных сервисов и их ключевые преимущества:

  • Смартпрокси – Более 10 миллионов домашних IP-адресов с глубокой интеграцией для таких сайтов, как Instagram и LinkedIn. Быстрая производительность.

  • Luminati – Первопроходец в области резидентных прокси с огромными пулами одноранговых IP-адресов. Отличное покрытие по всему миру.

  • ScrapeOps – Современные управляемые прокси, оптимизированные для безголовых браузеров, таких как Playwright. Исправлены закрепленные IP-сессии.

  • Геосерфинг – Сосредоточьтесь на резидентных прокси в нишевых странах, таких как Южная Африка. Подходит для международного таргетинга.

Процесс интеграции варьируется в зависимости от поставщика, но обычно включает в себя:

  1. Ротация прокси для каждого нового запроса
  2. Пулы сегментированы по требованиям целевого сайта
  3. Использование других параметров прокси, таких как страна, пользовательский агент и т. д.

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

Вот несколько тестов, показывающих, насколько прокси повышают вероятность успеха при парсинге сложных сайтов:

СайтУровень успеха с проксиУровень успеха без прокси
Google95%62%
LinkedIn89%23%
В самом деле90%67%
Instagram98%11%

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

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

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

  • Сбор чисто общедоступных данных, вероятно, подпадает под действие прав добросовестного использования в США. Однако во многих других странах это запрещено.

  • Нарушение Условий обслуживания сайта путем очистки данных все равно может привести к гражданским искам, таким как прекращение и воздержание или возмещение ущерба в соответствии с CFAA.

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

  • Данные, защищенные авторским правом, такие как статьи, требуют лицензий для легального сбора данных. Новостные сайты часто строго ограничивают или запрещают доступ.

  • Сбор личной информации, такой как электронные письма или данные социальных сетей, часто противоречит законам о конфиденциальности в зависимости от использования.

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

Я бы порекомендовал следующие лучшие практики из своего опыта:

  • Уважайте robots.txt: Директивы сканирования указывают, разрешает ли сайт парсинг. Обратите внимание, что файл robots.txt не имеет юридической силы.

  • Прочтите Условия обслуживания: Точно понимать, что разрешено или запрещено в условиях использования сайта.

  • Приоритет исследования: Ознакомьтесь с судебными делами, включающими аналогичные виды очистки, соответствующие вашей цели.

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

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

Заключительные мысли об ответственном парсинге в Интернете

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

Ограничение скорости гарантирует, что мы ответственно относимся к парсингу:

  • Обход блоков
  • Уважение к ресурсам сайта
  • Скрапинг легально и с соблюдением требований
  • Обеспечение надежного сбора данных

Библиотеки, такие как aiometer, упрощают реализацию точного регулирования. А коммерческие прокси/браузеры обеспечивают необходимую защиту при очистке более сложных сайтов.

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

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

Теги:

Присоединяйтесь к беседе

Ваш электронный адрес не будет опубликован. Обязательные поля помечены * *