Краткая история парсинга
Говорят, что парсинг (ныне широко распространенный автоматизированный метод извлечения данных) так же стар, как и сам Интернет. Однако это не совсем точно. Всемирная паутина была создана в 1989 году, первый веб-браузер — в 1991 году, а первый веб-краулер — в 1993 году. Этот краулер (первый веб-робот) был известен как Wanderer (или World Wide Web Wanderer для тех, кто любит аллитерацию), и его целью было измерение размера сети. Позже в том же году миру была представлена первая поисковая система на основе краулера — JumpStation (первая поисковая система, основанная на использовании бота).
На рубеже веков были созданы первые Web API и API crawler. А вскоре после 2004 года и запуска Beautiful Soup — популярного парсера HTML, написанного на языке программирования Python, — родился парсинг, каким мы его знаем сегодня.
С тех пор парсинг превратился из изгоя в часть технологического стека практически любого бизнеса, работающего с большими данными. Недвижимость, электронная коммерция, маркетинг и СМИ, исследования и образование, искусственный интеллект и машинное обучение: данные — это ось, на которой вращаются эти миры. Без парсинга люди, работающие и двигающиеся в этих сферах, не смогли бы получить и сохранить непостижимое количество цифровой информации, необходимой для принятия разумных решений или для питания инструментов своей отрасли.
Законен ли парсинг?
Хотя парсинг стал неотъемлемой частью многих предприятий, часто задается вопрос о том, законно ли это. Короткий ответ — «да», но это не значит, что нет никаких ограничений. Как вождение автомобиля является законным, а превышение скорости — нет, так и парсинг является законным, если вы не нарушаете законы, касающиеся таких вещей, как персональные данные или авторское право. Если вы хотите более подробно ознакомиться с правовыми ограничениями и этическими принципами парсинга, вы можете узнать больше в статьях ниже.
Легко ли заниматься парсингом?
Я начал с самого распространенного определения парсинга: автоматизированный метод извлечения данных из Интернета. Но каким бы распространенным ни было это определение, оно является чрезмерным упрощением. Извлечь данные довольно просто. Сложность заключается в том, что вам придется преодолеть все препятствия, чтобы добраться до данных. Простая ручная работа по копированию и вставке (самая примитивная форма парсинга) достаточно проста, но сегодня разработчикам и компаниям необходимо извлекать и обрабатывать огромное количество данных с тысяч или даже миллионов веб-страниц в день. Для этого вам нужны боты, которые открывают веб-сайты и извлекают содержимое, соответствующее вашей цели. Поскольку объем генерируемых данных продолжает расти в геометрической прогрессии, а меры безопасности веб-сайтов совершенствуются, получить доступ и скопировать эту информацию с помощью ботов становится все сложнее.
Так так ли сложен парсинг? Ответ — и да, и нет. Собирать данные из Интернета просто, но для того, чтобы заставить ботов для парсинга открывать сайты для извлечения данных в больших масштабах в течение длительного периода времени, требуется изрядная доля хитрости. Итак, давайте рассмотрим наиболее распространенные проблемы извлечения данных из Интернета на сегодняшний день.
Проблемы, связанные с парсингом
Ограничения скорости IP-адресов и CAPTCHA
Веб-сайты часто принимают защитные меры против ботов в качестве защиты от вредоносных программ и других недоброжелательных существ в сети. Как следствие, вы, скорее всего, будете заблокированы, если отправите большое количество запросов с одного IP-адреса за короткий промежуток времени. В качестве альтернативы вы можете получить тест CAPTCHA (а мы все знаем, как плохо боты в этом разбираются).
Почему это может произойти? Потому что человек не способен быстро отправить сотни запросов с одного IP-адреса. Такое нечеловеческое поведение неизбежно приведет к тому, что ваш бот будет обнаружен. Неважно, что ваш бот работает на благо, а не во зло. Веб-сайты обычно не делают различий: бот есть бот. Возможно даже, что ваш IP-адрес будет заблокирован еще до начала работы, если он был отмечен или занесен в черный список за прошлые действия.
Решением этой проблемы является облачный парсер, который отправляет каждый запрос с другим IP-адресом, а для этого вам понадобится прокси-провайдер.
Заголовки браузера и отпечатки пальцев
Антипарсинговые средства защиты проверяют заголовки HTTP-запросов, чтобы определить, поступают ли запросы от реального браузера. Если это не так, они будут помечены как подозрительные, а IP-адрес будет заблокирован. Чтобы обойти эту защиту, структура заголовков бота должна соответствовать указанному агенту пользователя.
С последними достижениями в области конфиденциальности в Интернете строки пользовательского агента постепенно удаляются, поскольку они содержат информацию, которая может быть использована для идентификации людей. Тем не менее, вы все еще можете получить всю ту же информацию и даже больше, используя отпечатки пальцев браузера.
Отпечатки пальцев браузера — это техника, которая может быть использована для идентификации веб-браузера. Она включает в себя сбор информации о браузере и устройстве, на котором он работает, и создание уникального «отпечатка пальца» на основе этой информации. Этот отпечаток может быть использован для отслеживания действий пользователя на различных сайтах и устройствах, а также для определения того, является ли браузер ботом или реальным пользователем. Именно поэтому изменение отпечатков пальцев браузера при парсинге значительно снижает блокировку.
Наиболее эффективным решением является автоматическое изменение и настройка отпечатков браузера с помощью библиотеки для парсинга с открытым исходным кодом, например Crawlee.
Каковы лучшие инструменты для парсинга?
Инструменты» — это очень широкий термин, когда речь идет опарсинге, и под ним могут подразумеваться библиотеки и фреймворки, HTTP-клиенты и парсеры, а также готовые веб-парсеры, для использования которых практически не требуется знаний кодирования. Давайте рассмотрим некоторые из них.
Инструменты для парсинга с помощью Python
Requests
Requests — это популярная библиотека Python, которая позволяет легко отправлять HTTP-запросы. Вам нужно загрузить HTML с помощью HTTP-клиента, такого как Requests, прежде чем вы сможете разобрать его с помощью чего-то вроде Beautiful Soup. С помощью Requests вам не нужно вручную добавлять строки запроса в URL или кодировать данные POST.
Beautiful Soup
Beautiful Soup — это библиотека Python для извлечения элементов HTML и XML с веб-страницы с помощью всего нескольких строк кода. Она отлично подходит для быстрого решения простых задач.
Scrapy
Мощный, но, как известно, сложный в освоении, Scrapy — это полноценный фреймворк для парсинга, который может использовать вышеупомянутые библиотеки для извлечения данных с веб-страниц. Он позволяет параллельно парсить несколько страниц и экспортировать данные в выбранный вами формат.
Selenium
Разработанный в первую очередь для веб-тестирования, Selenium — это инструмент автоматизации браузера, который широко используется для парсинга. Он особенно популярен среди питонистов, но также полностью реализован и поддерживается на JavaScript (Node.js), Ruby, Java, Kotlin и C#. Selenium использует протокол WebDriver для управления безголовыми браузерами, а его способность отображать JavaScript на веб-странице делает его полезным для парсинга динамических страниц (большинство современных веб-сайтов используют JS для динамической загрузки контента).
Playwright
Более универсальная версия Puppeteer (который подходит только для JavaScript и TypeScript), Playwright обеспечивает кросс-браузерную и кросс-языковую поддержку и быстро стал популярным инструментом парсинга благодаря своей универсальности, простоте использования и функции автоожидания.
Инструменты для парсинга с помощью JavaScript и TypeScript
Got Scraping
Got Scraping — это современное пакетное расширение HTTP-клиента Got, используемое для отправки на сервер запросов, похожих на браузерные. Это превращает парсинг-бота в хитрого ниндзя, который сливается с трафиком сайта, что снижает вероятность его обнаружения и блокировки. Got Scraping устраняет общие недостатки современного парсинга, предлагая встроенные инструменты для обхода антипарсинговых защит веб-сайтов.
Cheerio
Cheerio — это парсер HTML и XML для JavaScript, который загружает HTML в виде строки и возвращает объект для извлечения данных. Поскольку он работает непосредственно в Node.js без браузера, он, как правило, быстрее и эффективнее других инструментов для парсинга. Однако, поскольку он не интерпретирует результаты как браузер, он не может выполнять JavaScript, производить визуальный рендеринг, применять CSS или загружать внешние ресурсы.
Puppeteer
Puppeteer — это библиотека Node.js, которая предоставляет высокоуровневый API для программного манипулирования headless Chrome, а также может быть настроена на использование headful браузера. Как и Playwright, его способность эмулировать настоящий браузер позволяет ему рендерить JavaScript. Он может парсить одностраничные приложения, делать скриншоты и генерировать PDF-файлы страниц, а также автоматизировать ручное взаимодействие с пользователем.
Crawlee
Crawlee — это библиотека Node.js для парсинга и автоматизации с открытым исходным кодом, которая отлично справляется с современными средствами защиты сайтов от ботов и предлагает полный набор инструментов для извлечения данных и автоматизации работы браузера. Она построена поверх многих вышеупомянутых инструментов для парсинга, чтобы повысить производительность и легко интегрировать хранение и ротацию прокси. Crawlee работает на любой системе и может использоваться как самостоятельный или бессерверный микросервис на платформе Apify.
Готовые инструменты для парсинга
Говоря об Apify, следует отметить еще одну возможность, которую он предоставляет, — это ряд готовых парсеров, которые облегчают жизнь разработчикам или не требуют навыков кодирования для использования. Существует два типа таких парсеров: универсальные и специфические для конкретного сайта.
Универсальные парсеры
Универсальные парсеры могут извлекать данные с любого сайта. Они предоставляют шаблонный код для экономии времени развертывания, поэтому вам не придется создавать свои собственные парсеры с нуля. К таким парсперам относятся:
-
Web Scraper
-
Puppeteer Scraper
-
Playwright Scraper
-
Cheerio Scraper
-
Vanilla JS Scraper
-
JSDOM Scraper