Веб-скрапинг — что это и как он работает

Дата публикации:

Любой веб-ресурс становится ценным и посещаемым только при наличии полезного, интересного пользователям и уникального контента. “Кто владеет информацией, тот владеет миром”, — простая истина, без осознания которой невозможно стать успешным бизнесменом (равно как и политиком или любым другим специалистом). Вспомните цитату Билла Гейтса: “В будущем на рынке останется два вида компаний: те, кто в Интернете и те, кто вышел из бизнеса”. Пожалуй, сегодня ее тоже можно назвать прописной истиной.

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

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

Веб-скрапинг — что это?

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

  • каталог товаров;
  • изображения;
  • видео;
  • текстовый контент;
  • открытые контактные данные — адреса электронной почты, телефоны и т.д.

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

  • Отдельные сервисы, которые работают через API или имеют веб-интерфейс (Embedly, DiffBot и др.).
  • Проекты с открытым кодом, на разных языках программирования (Goose, Scrapy — Python; Goutte — PHP; Readability, Morph — Ruby ).

Кроме того, всегда есть возможность изобрести велосипед и написать собственное решение. Например, с использованием библиотеки Nokogiri (для языка программирования Ruby).

Команда JetRuby Agency сумела накопить немалый опыт в сфере скрапинга веб-сайтов. Изучив и использовав самые разнообразные решения, мы можем смело заявить: идеального скрапера не существует. Почему? Извольте: аргументы в студию!

  1. Ни один сайт не имеет идеальной верстки с точки зрения догматов веб-дизайна. Именно это делает каждый сайт уникальным и привлекательным для пользователей.
  2. Каждый веб-разрабочик (если он не работает в солидной IT компании со своими правилами и стайл гайдами) пишет код под себя или просто, как умеет. Далеко не всегда код получается грамотным и качественным. Зачастую в нем можно найти огромное количество ошибок. В том числе грамматических. Все это делает “самописный” код абсолютно нечитаемым для скраперов (речь, в первую очередь, идет о верстке).
  3. Масса веб-ресурсов использует HTML5, где каждый элемент может быть абсолютно уникальным.
  4. Некоторые ресурсы содержат разнообразные защиты от копирования данных, а значит и от скрапинга. Это выражается в многоуровневой верстке, использовании JavaScript для рендеринга контента, проверки user-agent и т.д.
  5. В зависимости от сезона или тематики целевого материала на сайте могут быть использованы разные макеты. Периодически это касается даже типичных страниц (сезонные акции, премиум статьи и т.д.).
  6. Кроме полезных блоков, веб-страница часто изобилует “мусором” в виде рекламы, комментариев, дополнительных элементов навигации и т.д.
  7. Исходный код может содержать ссылки на одни и те же картинки разных размеров, например — для превью.
  8. Сайт может определить страну, в которой находится ваш сервер и отдать информацию не на английском языке.
  9. У всех сайтов может быть разная кодировка, которая не отдается в ответе на запрос.

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

А если очень хочется?

Итак, проблем — выше крыши. Но “поскрапить” очень хочется. В сложившейся ситуации мы пришли к единственному верному, на наш взгляд, выводу:

  • При необходимости получать данные из небольшого количества источников, лучше написать свой скрапер и настроить его под нужные сайты (качество получаемого контента — около 100%).
  • Использовать комплексный подход в выборе ридера (скрапера), если нужно получать информацию из большого количества источников (до 95% качества).

Как это работает на практике?

  1. Готовим механизм получения HTML кода по GET запросу. Далее рассматриваем DOM структуру целевого сайта и определяем узлы с интересующей нас информацией. После этого создаем обработчик узлов и выводим данные в нормализованном виде (по желанию заказчика или удобству обработки результатов — к примеру, в формате JSON).
  2. Создаем систему скрапинга.

Абстрагируемся и обзовем нашу систему “Duck System”. Затем научим ее нести золотые яйца

web-scraping

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

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

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

Преимущества собственных решений для небольшого количества сайтов заключаются в их скорости. Обработка одной страницы — от 7 ms. А как же ограничение скоростью интернета и размером загружаемых медиафайлов — спросите вы. Мы решили этот вопрос с помощью асинхронной загрузки медиа и основного контента в бэкграунде. В итоге файлы размером от 100 Мб грузятся аж со свистом (вы просто не успеваете этого замечать), а результаты на выходе дают стопроцентную точность.

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

Если у вас остались вопросы, мы всегда открыты к диалогу.

Мы Крым Диджитал

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

Подпишись
на наши новости

Контакты пресс-службы

+ 7 (926) 118-80-32

WhatsApp, Viber, Telegram

Давайте обсудим Ваш проект

или свяжитесь с нами по почте projects@crimeadigital.ru

Нажимая кнопку «Отправить», вы даете согласие на обработку персональных данных

Заполните форму или свяжитесь
удобным для Вас способом

Контакты

г. Севастополь, ул. Руднева, д.41, 4 этаж технопарк ИТ-Крым +7 978 679-76-353 agro@crimeadigital.ru

Социальные сети

Нажимая на кнопку, вы даете согласие на обработку персональных данных и соглашаетесь c политикой конфиденциальности

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

Руководители Крым Диджитал приняли участие в стратегической сессии, которая прошла на базе СевГУ 10 июня. Вместе с Правительством Севастополя, Институтом информационных технологий и управления в технических системах СевГУ и приглашенными ИТ-компаниями города обсудили перспективу развития системы высшего образования в Севастополе.Представители бизнеса, власти и образовательной системы выступали со своим видением будущих потребностей региона в кадрах, поднимали насущные вопросы обучения студентов, прохождения практики и дальнейшего трудоустройства. Крым Диджитал является амбассадором идеи образования и взращивания молодых кадров, развивает образовательные проекты и на протяжении 5 последних лет ведет активную работу в направлении поддержки и развития молодых специалистов ИТ-отрасли Крыма.

Руководители Крым Диджитал приняли участие в стратегической сессии, которая прошла на базе СевГУ 10 июня.

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

Крым Диджитал является амбассадором идеи образования и взращивания молодых кадров, развивает образовательные проекты и на протяжении 5 последних лет ведет активную работу в направлении поддержки и развития молодых специалистов ИТ-отрасли Крыма.

Выпуск курса Software Testing

Мы поздравляем выпускников нашего первого в этом году курса Крым Диджитал Академии по Software Testing! Всего курс успешно завершили 13 человек. В течение 2 месяцев несмотря на теплую погоду и манящее море ребята ответственно посещали занятия 2 раза в неделю, делали домашние задания и проверочные работы. Трое начинающих специалистов теперь стажеры нашей компании. Следующий курс намечен на август. Не пропусти анонс записи!

Мы поздравляем выпускников нашего первого в этом году курса Крым Диджитал Академии по Software Testing!

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

Следующий курс намечен на август. Не пропусти анонс записи!

Лицензия на образовательную деятельность

В 2022 году мы получили лицензию на образовательную деятельность по программам дополнительного профессионального образования! Теперь мы можем обучать специалистов по направлениям Ruby on Rails, ReactJS и Software Testing и выдавать удостоверения о повышении квалификации государственного образца.
В 2022 году мы получили лицензию на образовательную деятельность по программам дополнительного профессионального образования! Теперь мы можем обучать специалистов по направлениям Ruby on Rails, ReactJS и Software Testing и выдавать удостоверения о повышении квалификации государственного образца.

Мы вошли в Реестр эффективно и социально значимых предприятий.

По результатам ежегодной финансово-экономической аналитики Межотраслевой рейтинговой компании Крым Диджитал включена в Реестр эффективных и социально значимых предприятий. По итогу аналитики, в рамках отрасли (ОКВЭД 62.01) и региона Крым, CDG вошло в 4% лучших компаний страны, с результатом – 92 балла!
По результатам ежегодной финансово-экономической аналитики Межотраслевой рейтинговой компании Крым Диджитал включена в Реестр эффективных и социально значимых предприятий. По итогу аналитики, в рамках отрасли (ОКВЭД 62.01) и региона Крым, CDG вошло в 4% лучших компаний страны, с результатом – 92 балла!