Парсинг с помощью Python. Веб-скрапинг в действии - Райан Митчелл - E-Book

Парсинг с помощью Python. Веб-скрапинг в действии E-Book

Райан Митчелл

0,0

Beschreibung

Парсинг с помощью Python. Веб-скрапинг в действии Если программирование — магия, то веб-скрапинг — настоящее колдовство. Написав простую автоматизированную программу, можно отправлять запросы веб-серверам, получать ответы с данными, а затем анализировать эти данные и извлекать необходимую информацию. Это обновленное третье издание книги не только познакомит вас с веб-скрапингом, но и послужит исчерпывающим руководством по сбору практически любых видов данных в современном Интернете. В части I основное внимание уделено механике веб-скрапинга: как с помощью Python отправлять запросы веб-серверам, обрабатывать ответы и автоматизировать взаимодействие с сайтами. В части II исследуются более конкретные инструменты и приложения, которые пригодятся при любом сценарии веб-скрапинга. Книга покажет, как: • анализировать сложные HTML-страницы; • разрабатывать веб-сканеры с помощью фреймворка Scrapy; • хранить данные, полученные с помощью скрапинга; • читать и извлекать данные из документов; • очищать и нормализовывать плохо отформатированные данные; • читать и записывать информацию на естественных языках; • выполнять поиск по формам и страницам входа; • выполнять скрапинг JavaScript-кода и работать с API; • писать и использовать программы для преобразования изображений в текст; • обходить противоскрапинговые ловушки и блокаторы ботов; • тестировать свои веб-сайты с помощью скрапинга.

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern
Kindle™-E-Readern
(für ausgewählte Pakete)

Seitenzahl: 440

Veröffentlichungsjahr: 2025

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Переводчик Л. Киселева

Райан Митчелл

Парсинг с помощью Python. Веб-скрапинг в действии. 3-е межд. изд.. — Астана: "Спринт Бук", 2025.

ISBN 978-601-08-4570-1

© ТОО "Спринт Бук", 2025

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

Оглавление

Введение
Что такое веб-скрапинг
Почему это называется веб-скрапингом
Об этой книге
Условные обозначения
Использование примеров кода
Благодарности
От издательства
Часть I. Разработка веб-скраперов
Глава 1. Как работает Интернет
Передача данных в сети
HTML
CSS
JavaScript
Просмотр сайтов с помощью инструментов разработчика
Глава 2. Законность и этичность веб-скрапинга
Торговые марки, авторские права, патенты… спасите-помогите!
Посягательство на движимое имущество
Закон о компьютерном мошенничестве и злоупотреблении
Файл robots.txt и условия его использования
Три веб-скрапера
Глава 3. Применение веб-скрапинга
Классификация проектов
Электронная коммерция
Академические исследования
Разработка продукта
Туризм
Продажи
Скрапинг результатов поиска
Глава 4. Ваш первый веб-скрапер
Установка и использование Jupyter
Установка соединения
Знакомство с BeautifulSoup
Глава 5. Углубленный парсинг HTML
Еще одна тарелка BeautifulSoup
Регулярные выражения
Регулярные выражения и BeautifulSoup
Доступ к атрибутам
Лямбда-выражения
Иногда молоток не нужен
Глава 6. Разработка веб-краулеров
Обход отдельного домена
Краулинг всего сайта
Краулинг нескольких сайтов
Глава 7. Модели веб-краулинга
Планирование и определение объектов
Работа с различными макетами сайтов
Структурирование веб-краулеров
Размышления о моделях веб-краулеров
Глава 8. Scrapy
Установка Scrapy
Пишем простой веб-скрапер
«Паук» с правилами
Создание объектов Item
Вывод объектов Item
Динамический конвейер
Ведение журнала в Scrapy
Дополнительные ресурсы
Глава 9. Хранение данных
Медиафайлы
Хранение данных в формате CSV
MySQL
Электронная почта
Часть II. Углубленный веб-скрапинг
Глава 10. Чтение документов
Кодировка документов
Текст
CSV
PDF
Microsoft Word и файлы .docx
Глава 11. Обработка «грязных» данных
Очистка текста
Нормализация текста
Очистка данных с помощью Pandas
Глава 12. Чтение и запись текстов на естественных языках
Обобщение данных
Модели Маркова
Natural Language Toolkit
Дополнительные ресурсы
Глава 13. Краулинг форм и авторизация
Библиотека Python Requests
Отправка простейшей формы
Переключатели, флажки и поля ввода
Передача файлов и изображений
Обработка данных авторизации и параметров cookie
Другие проблемы с формами
Глава 14. Веб-скрапинг данных JavaScript
Краткое введение в JavaScript
Ajax и динамический HTML
Дополнительные веб-драйверы Selenium
Обработка перенаправлений
Последнее замечание о JavaScript
Глава 15. Краулинг с помощью API
Краткое введение в API
Парсинг JSON
Недокументированные API
Объединение API с другими источниками данных
Дополнительные сведения об API
Глава 16. Обработка изображений и распознавание текста
Обзор библиотек
Обработка хорошо отформатированного текста
Чтение капчи и обучение Tesseract
Получение капчи и отправка решений
Глава 17. Как избежать ловушек веб-скрапинга
Этический момент
Выдать сценарий за человека
Основные средства защиты форм
Чек-лист: как выдать программу за человека
Глава 18. Тестирование сайтов с помощью веб-скраперов
Основы тестирования
Что такое модульные тесты
Модуль unittest
Тестирование с помощью Selenium
Глава 19. Параллельный веб-краулинг
Процессы или потоки
Многопоточный веб-краулинг
Многопроцессный веб-краулинг
Многопроцессный веб-краулинг: еще один подход
Глава 20. Прокси-сервисы для веб-скрапинга
Зачем использовать удаленные серверы
Tor
Удаленный хостинг
Прокси-сервисы для скрапинга
Дополнительные ресурсы
Об авторе
Иллюстрация на обложке
Рекомендуем прочитать

Введение

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

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

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

Веб-скрапинг — обширная и быстро развивающаяся область, поэтому я постаралась рассмотреть не только общие принципы, но и конкретные примеры, охватывающие практически все способы сбора данных, с которыми вы можете столкнуться. В книге приводятся примеры кода, демонстрирующие эти принципы и позволяющие проверить их на практике. Сами примеры можно использовать и изменять как с указанием авторства, так и без него (хотя благодарности всегда приветствуются). Все примеры кода доступны на GitHub (https://github.com/REMitchell/python-scraping), где их можно просмотреть и скачать.

Что такое веб-скрапинг

Автоматизированный сбор данных в Интернете существует почти столько же, сколько и сам Интернет. Хотя термин веб-скрапинг не является новым, еще несколько лет назад эту методику чаще называли анализом интерфейсных данных (screen scraping), интеллектуальным анализом данных (data mining), сбором веб-данных (web harvesting) и т.п. Похоже, что наконец-то все пришли к единому мнению и предпочли называть это веб-скрапингом, поэтому я буду использовать данный термин в контексте всей книги, хотя специализированные программы, которые позволяют просматривать несколько веб-страниц, я буду называть веб-краулерами, а программы, предназначенные для собственно веб-скрапинга, — ботами.

Теоретически веб-скрапинг — это сбор данных с помощью любых средств, кроме программ, использующих API (или через браузер пользователя). Чаще всего для этого пишут программу, которая автоматически отправляет запрос на веб-сервер, получает данные (обычно в формате HTML или других форматах веб-страниц), а затем парсирует их для извлечения полезной информации.

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

Почему это называется веб-скрапингом

Выходить в Интернет только через браузер — значит упускать массу возможностей. Несмотря на то что браузеры (кроме прочего) удобны для выполнения сценариев JavaScript, вывода изображений и представления объектов в понятной для пользователя форме, веб-скраперы гораздо быстрее справляются со сбором и обработкой больших объемов данных. Вместо того чтобы просматривать страницу за страницей в узком окне браузера, можно читать сразу целые базы данных, в которых хранятся тысячи или даже миллионы страниц.

Кроме того, веб-скраперы позволяют заглядывать в места, недоступные обычным поисковым системам. Так, если в Google ввести запрос «самые дешевые авиарейсы в Бостон», можно получить множество ссылок на рекламные объявления и популярные сайты поиска авиабилетов. Google знает только то, что содержится на страницах этих сайтов, а вовсе не точные результаты различных запросов, введенных в приложение поиска рейсов. Однако правильно разработанный веб-скрапер способен построить график зависимости стоимости перелета в Бостон от времени с учетом данных разных сайтов и определить самые выгодные даты покупки билета.

Вы спросите: «Разве API не создаются специально для сбора данных?» (О том, что такое API, см. главу 15.) Действительно, возможности API бывают просто фантастическими, если удастся найти тот из них, который соответствует вашим запросам. Прежде всего они предназначены для построения удобного потока хорошо отформатированных данных из одной компьютерной программы в другую. Для многих типов данных, которые вам могут понадобиться, существуют готовые API, например для постов Twitter или страниц «Википедии». Как правило, предпочтительнее использовать уже существующий API вместо создания бота для получения тех же данных. Однако нужный API может отсутствовать или не соответствовать вашим целям по нескольким причинам:

• вам необходимо собирать относительно небольшие, ограниченные наборы данных с большого количества сайтов, у которых нет единого API;

• нужных данных сравнительно мало, или они необычны, и разработчик посчитал неоправданным создание для них специального API;

• источник не обладает инфраструктурой или техническими возможностями для создания API;

• это ценные и/или защищенные данные, не предназначенные для широкого распространения.

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

Именно в таких случаях в дело вступает веб-скрапинг. За редким исключением, если данные доступны в браузере, к ним можно получить доступ с помощью сценария на Python и затем сохранить в базе данных. А с сохраненными данными можно делать практически все что угодно.

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

Даже в мире искусства веб-скрапинг расширяет возможности для творчества. В 2006 году проект We Feel Fine («Мы чувствуем себя прекрасно») (http://wefeelfine.org/) Джонатана Харриса и Сэпа Камвара собрал из нескольких англо­язычных блогов фразы, начинающиеся со слов I feel или I am feeling («я чувствую», «я ощущаю»). В итоге получилась популярная визуализация большого количества данных, описывающих то, что чувствовал мир день за днем, минуту за минутой.

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

Об этой книге

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

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

Для тех, кто хотел бы изучить Python подробнее, рекомендую учебник Introducing Python Билла Любановича1 — это хорошее, хотя и довольно объемное руководство. Если у вас не хватит на него времени, советую посмотреть видеоуроки Introduction to Python Джессики Маккеллар (O’Reilly) (http://oreil.ly/2HOqSNM) — это отличный ресурс. Мне также понравилась книга Think Python моего бывшего профессора Аллена Дауни2 (O’Reilly) (http://oreil.ly/2fjbT2F). Она особенно хороша для новичков в программировании. Это учебник не только по языку Python, но и в целом по информатике, а также общим концепциям разработки ПО.

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

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

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

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

Условные обозначения

В данной книге используются следующие условные обозначения.

Курсив

Курсивом выделены новые термины.

Моноширинный шрифт

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

Моноширинный курсивный шрифт

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

Шрифт без засечек

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

 

Этот рисунок указывает на совет или предложение.

Этот рисунок указывает на общее замечание.

Этот рисунок указывает на предупреждение.

Использование примеров кода

Дополнительный материал (примеры кода, упражнения и т.д.) можно скачать по адресу https://github.com/REMitchell/python-scraping.

Настоящая книга предназначена для того, чтобы помочь вам выполнить свою работу. Все примеры кода из книги разрешается свободно использовать. Вам не нужно обращаться в издательство за разрешением, если вы не собираетесь воспроизводить существенные части программного кода. Если вы разрабатываете программу и используете в ней несколько фрагментов кода из книги, вы не обязаны обращаться за разрешением. Но для продажи или распространения примеров из книги вам потребуется разрешение от издательства O’Reilly. Вы можете отвечать на вопросы, цитируя данную книгу или примеры из нее, но для включения существенных объемов программного кода из книги в документацию вашего продукта потребуется разрешение.

Мы рекомендуем, но не настаиваем на включении ссылки на первоисточник при цитировании. Под ссылкой на первоисточник мы подразумеваем указание авторов, издательства и ISBN.

За получением разрешения на использование значительных объемов программного кода из книги обращайтесь по адресу [email protected].

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

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

Благодарности

Лучшие продукты часто появляются благодаря многочисленным отзывам пользователей. Эта книга тоже никогда не появилась бы в каком-либо полезном виде без помощи многих сотрудников, руководителей и редакторов. Спасибо сотрудникам O’Reilly за их удивительную поддержку в этой немного необычной теме, моим друзьям и семье, которые давали советы и мирились с импровизированными чтениями, а также моим коллегам из Gerson Lehrman Group, которым я, вероятно, теперь должна много часов работы.

Спасибо моим редакторам — Саре Хантер, Джону Обеленусу и Трейси Ларвенц — за отзывы и советы, иногда жесткие, но справедливые. Довольно много разделов и примеров кода появились в книге именно благодаря их вдохновляющим предложениям.

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

Наконец, спасибо Джиму Уолдо — именно с него все это началось много лет назад, когда он прислал впечатлительной девочке-подростку диск Linux и книгу Эрика Робертса The Art and Science of C (Addison-Wesley).

От издательства

Ваши замечания, предложения, вопросы отправляйте по адресу [email protected] (издательство SprintBook, компьютерная редакция).

Мы будем рады узнать ваше мнение!

1 Любанович Б. Простой Python. Современный стиль программирования. — 2-е изд. — СПб.: Питер, 2020.

2 Дауни А. Основы Python. Научитесь думать как программист. 2021.

Часть I. Разработка веб-скраперов

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

Честно говоря, веб-скрапинг — фантастическая область, позволяющая получать огромные доходы при относительно небольших начальных инвестициях. Примерно 90 % проектов веб-скрапинга, с которыми вы столкнетесь, будут основаны на методах, описанных в следующих шести главах. В этой части показано, как обычные (хотя и технически подкованные) люди представляют себе работу веб-скраперов:

• извлечение HTML-данных из указанного домена;

• парсинг этих данных для получения требуемой информации;

• сохранение результатов;

• переход на другую страницу и повторение процедуры.

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

Глава 2. Законность и этичность веб-скрапинга

В 2010 году инженер-программист Пит Уорден разработал веб-краулер для сбора данных с Facebook. Он собрал данные почти о 200 миллионах пользователей соцсети: имена, места жительства, сведения о друзьях и интересах. Конечно же, в Facebook это заметили и стали слать Уордену письма с просьбой прекратить свои действия, и он прислушался. Когда программиста спросили, почему он подчинился их требованиям, Пит ответил: «Большие данные — это дешево, а вот адвокаты — нет».

В этой главе вы познакомитесь с законами США (и некоторыми международными), имеющими отношение к веб-скрапингу, и узнаете, как оценить степень законности и этичности веб-скрапинга в той или иной ситуации.

Прежде чем перейти к следующему разделу, констатируем очевидный факт: я — инженер-программист, а не юрист. Не интерпретируйте все, что прочтете в этой книге, как профессиональную юридическую консультацию и тщательно обдумывайте свои действия. Я действительно считаю, что могу компетентно обсуждать правовые и этические аспекты веб-скрапинга. Однако, прежде чем начинать какие-либо юридически неоднозначные проекты, проконсультируйтесь с юристом (а не с инженером-программистом).

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

Торговые марки, авторские права, патенты… спасите-помогите!

Пришло время пройти краткий курс по основам интеллектуальной собственности! Существуют три основных ее типа: торговые марки (обозначаемые символами TM или ®), авторские права (часто встречающийся знак копирайта ©) и патенты (иногда сопровождаются указанием, что изобретение защищено патентом или номером патента, но обычно не обозначаются вообще никак).

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

Торговые марки также вряд ли могут вызвать проблемы, но все же их следует учитывать. Ведомство по патентам и товарным знакам США утверждает следующее.

Торговая марка — это слово, фраза, символ и/или дизайн, которые идентифицируют и отличают товары одной компании от товаров другой. Знак обслуживания — это слово, фраза, символ и/или дизайн, которые идентифицируют и отличают источник услуг, а не товаров. Термином «торговая марка» часто обозначают не только сами торговые марки, но и знаки обслуживания.

Помимо традиционного брендинга с помощью слов и символов, который мы имеем в виду, когда говорим о торговых марках, бывают и другие описательные атрибуты. Это может быть, например, форма контейнера (вспомните бутылки Coca-Cola) или даже цвет.

В отличие от патентов, право собственности на торговую марку сильно зависит от контекста, в котором она используется. Например, захотев опубликовать пост в блоге и сопроводить его изображением логотипа Coca-Cola, я могу это сделать (если только не намекаю на то, что спонсором или автором моего поста является Coca-Cola). Захоти я изготовить новый безалкогольный напиток и поставить на упаковке такой же логотип, как у Coca-Cola, это будет явно незаконным использованием торговой марки. Точно так же я могу изобразить на упаковке своего нового безалкогольного напитка Розовую Пантеру, однако не могу использовать этот же цвет, если захочу производить утеплитель для стен.

Это подводит нас к теме добросовестного использования, которая часто обсуждается в контексте Закона об авторском праве, но также применима и к торговым маркам. Использовать или демонстрировать торговую марку как ссылку на бренд, который она представляет, — допустимо, но применять торговую марку способом, вводящим потребителя в заблуждение, — нет. Следует отметить, что понятие «добросовестное использование» неприменимо к патентам. Например, изобретение, запатентованное в одной отрасли, не может использоваться в другой без согласования с обладателем патента.

Закон об авторском праве

Торговые марки и патенты имеют общее свойство: их признают только в том случае, если они официально зарегистрированы. Вопреки распространенному мнению, это не относится к материалам, защищенным авторским правом. Что делает изображения, текст, музыку и т.п. защищенными законом? Это не предупреждение о том, что все права защищены, написанное внизу страницы, и вообще ничего, что отличало бы опубликованные материалы от неопубликованных. Каждый созданный вами материал автоматически подпадает под действие Закона об авторском праве сразу же после того, как вы его создали.

Международным стандартом авторского права является Бернская конвенция об охране литературных и художественных произведений, названная в честь города Берна в Швейцарии, где она была принята в 1886 году. Эта конвенция, по сути, гласит: все страны, которые являются ее участницами, должны признавать охрану авторских прав произведений, созданных гражданами других стран — участниц конвенции, так, как если бы они были гражданами данной страны. На практике это значит, что, будучи гражданином США, вы можете быть привлечены к ответственности в Соединенных Штатах за нарушение авторских прав на материалы, написанные кем-либо, скажем, во Франции (и наоборот).

Регистрация авторских прав

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

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

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

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

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

Даже материал, защищенный авторским правом, может быть использован напрямую — в разумных пределах, в соответствии с Законом об авторском праве в цифровую эпоху (Digital Millennium Copyright Act, DMCA). В нем изложены некоторые правила автоматической обработки материалов, защищенных авторским правом. DMCA — это обширный документ, который содержит множество специальных правил, регулирующих все: от электронных книг до телефонов. Тем не менее в нем есть два важных момента, которые могут иметь особое отношение к веб-скрапингу.

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

• Собирая контент, вы не можете обойти меры безопасности (такие как защита паролем).

Кроме того, DMCA также признает, что использование материалов, являющееся правомерным в соответствии со сводом законов США, допустимо и уведомления о судебном разбирательстве не могут выдаваться в соответствии с защитой в «зоне безопасности», если применение материала, защищенного авторским правом, классифицируется как допустимое.

Короче говоря, вы никогда не должны публиковать защищенные авторским правом материалы напрямую, без разрешения автора или правообладателя. Если вы храните защищенные авторским правом данные, к которым у вас есть свободный доступ, в своей личной базе данных с целью анализа — все в порядке. Однако вы поступите нехорошо, опубликовав эту базу на своем сайте для просмот­ра или скачивания. Если вы анализируете эти данные и публикуете статистику по количеству слов, список авторов по степени продуктивности или выводите другие результаты метаанализа данных — это нормально. Сопровождение этого метаанализа несколькими избранными цитатами или краткими образцами данных с целью подтвердить свою точку зрения — вероятно, тоже допустимо, но для надежности стоит свериться с положением о правомерном использовании в своде законов США.

Авторское право и искусственный интеллект

Генеративный искусственный интеллект (ИИ), или программы искусственного интеллекта, создающие новые «творческие» произведения на основе существующих творческих работ, представляют собой уникальную проблему для Закона об авторском праве.

Если результат работы программы генеративного ИИ похож на уже существующую работу, то может возникнуть проблема с авторскими правами. Известны многие прецеденты, которые помогают понять, что означает слово «похож». По данным Исследовательской службы Конгресса США (Congressional Research Service)4:

Критерий существенного сходства сложно определить, и он различается в разных судах США, например, «существенное сходство концепции и восприятия», или «схожий внешний вид», или «обычный разумный человек не сможет заметить различия между двумя произведениями».

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

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

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

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

На момент написания этой книги компания OpenAI доказывала перед Ведомством по патентам и товарным знакам США (United States Patent and Trademark Office), что использование ею больших объемов материалов, защищенных авторским правом, является добросовестным использованием5. Этот аргумент в первую очередь относится к генеративным алгоритмам ИИ, но я подозреваю, что решение, которое будет вынесено по результатам разбирательства, будет применимо и к веб-скраперам, созданным для самых разных целей.

Посягательство на движимое имущество

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

В эпоху облачных вычислений возникает соблазн не воспринимать веб-серверы как реальные, материальные ресурсы. Однако серверы не только состоят из дорогих компонентов. Их еще нужно хранить, контролировать, охлаждать и снабжать огромным количеством электроэнергии. По некоторым оценкам, 10 % мирового потребления электроэнергии приходится на компьютеры6. (Если вы подсчитаете, сколько потребляет вся ваша электроника, и все еще будете в чем-то сомневаться, то посмотрите на необозримые серверные фермы Google, которые необходимо подключать к крупным электростанциям.)

Серверы являются дорогостоящими ресурсами, однако с юридической точки зрения интересны следующим: веб-мастера, как правило, действительно хотят, чтобы люди потребляли их ресурсы (то есть получали доступ к их сайтам); они лишь не хотят, чтобы пользователи потребляли слишком много ресурсов. Одно дело — посмотреть сайт через браузер, и совсем другое — запустить полномасштабную DDOS-атаку.

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

Отсутствие согласия

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

Фактический вред

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

Преднамеренность

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

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

Придержите ваши боты!

Были времена, когда веб-серверы были гораздо мощнее, чем персональные компьютеры. Фактически под сервером всегда подразумевался большой компьютер. Сейчас положение немного изменилось. Например, частота процессора моего персонального компьютера составляет 3,5 ГГц, а объем оперативной памяти — 32 Гбайт. И наоборот, средний экземпляр AWS имеет 4 Гбайт оперативной памяти и около 3 ГГц вычислительной мощности.

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

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

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

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

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

Рассмотрим следующие сценарии:

1) у вас есть веб-краулер, который просматривает сайт Васи Пупкина, собирая с него некоторые или все данные;

2) у вас есть веб-краулер, который просматривает несколько сотен небольших сайтов, собирая с них некоторые или все данные;

3) у вас есть веб-краулер, который просматривает очень большой сайт, такой как «Википедия».

В первом случае лучше оставить бот медленно работать на ночь.

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

В третьем варианте нагрузка, которую ваше интернет-соединение и домашний компьютер могут оказать на такой сайт, как «Википедия», вряд ли будет замечена или вызовет беспокойство. Но вот если вы используете распределенную сеть устройств — тогда, очевидно, другое дело. Соблюдайте осторожность и по возможности обратитесь к представителю компании.

Закон о компьютерном мошенничестве и злоупотреблении

В начале 1980-х компьютеры начали выходить из академических аудиторий и проникать в мир бизнеса. Впервые вирусы и «черви» стали восприниматься не просто как неудобство (или даже забавное хобби), а как серьезное уголовное преступление, способное причинить материальный ущерб. В 1983 году фильм «Военные игры» с Мэттью Бродериком в главной роли также привлек внимание общественности и президента Рональда Рейгана к этой проблеме. В результате в 1986 году был принят Закон о компьютерном мошенничестве и злоупотреблении (Computer Fraud and Abuse Act, CFAA).

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

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

• намеренный несанкционированный доступ к компьютерам, принадлежащим Правительству США, в целях извлечения информации;

• намеренный несанкционированный доступ к компьютеру и сбор финансовой информации;

• намеренный несанкционированный доступ к компьютеру, принадлежащему Правительству США, повлиявший на работу этого компьютера;

• намеренный доступ к любому защищенному компьютеру в мошеннических целях;

• намеренный доступ к компьютеру без разрешения и причинение ему ущерба;

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

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

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

Файл robots.txt и условия его использования

Условия использования сайта и файла robots.txt представляют интерес с юридической точки зрения. Если сайт общедоступен, то право веб-мастера заявлять о том, что ПО может или не может получить к нему доступ, спорно. Было бы странным заявить, что «для просмотра данного сайта вы можете использовать браузер, а не программу, которую сами написали с этой целью».

На большинстве сайтов в нижней части каждой страницы есть ссылка на страницу «Условия использования» (Terms of Service, TOS). Это нечто большее, чем просто правила для веб-краулеров и автоматического доступа; здесь часто содержатся сведения о том, какая информация собрана на веб-сайте, что с ней здесь происходит и, как правило, юридическое уведомление о том, что услуги, предоставляемые сайтом, не подразумевают неких явных или скрытых гарантий.

Если вас интересует оптимизация сайта для поисковых систем (Search Engine Optimization, SEO) или технологии поиска, то вы, скорее всего, слышали о файле robots.txt. Его можно обнаружить в корневой веб-папке http://website.com/robots.txt на любом крупном сайте, поискав там файл robots.txt.

Синтаксис файлов robots.txt был разработан в 1994 году, еще во время первой волны технологии веб-поиска. Примерно в это же время поисковые системы, обыскивающие весь Интернет, такие как AltaVista и DogPile, начали всерьез конкурировать с простыми списками сайтов, организованными по темам, которые велись, в частности, на Yahoo!. Развитие поиска в Интернете привело к взрывному росту не только количества веб-краулеров, но и доступности для обычных людей собираемой ими информации.

Несмотря на то что сегодня мы привыкли считать такой вид доступности чем-то само собой разумеющимся, некоторые веб-мастера были шокированы, когда информация, опубликованная ими глубоко в файловой структуре своего сайта, стала появляться на первых страницах результатов поиска в основных поисковых системах. В ответ появился синтаксис файлов robots.txt под названием Robots Exclusion Standard — стандарт исключения для роботов.

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