15 часто задаваемых вопросов о парсинге и ответы на них. Повышение качества данных и проблемы надёжности
- 15 часто задаваемых вопросов о парсинге и ответы на них. Повышение качества данных и проблемы надёжности
- Что нужно знать Для парсинга. Для чего парсинг нужен?
- Cgfhcbnm. Какие сложности могут возникнуть при парсинге веб-сайтов?
- Платный парсер. Кому и зачем нужны парсеры сайтов
- Наказание за парсинг. Парсинг — это законно?
- Парсинг сложных сайтов python. Часть 1
15 часто задаваемых вопросов о парсинге и ответы на них. Повышение качества данных и проблемы надёжности
Еще одним важным вопросом к инструментам визуального создания парсеров является повышение качества полученных данных и проблемы надежности, что связано с техническими ограничениями, описанными выше, а также из-за присущих им ограниченности, отсутствия уровней тестирования и того факта, что без доступа к исходному коду выявление и устранение первопричин низкого качества данных затрудняется.
- Гибкость — автоматизированный характер конструирования визуальных веб-парсеров ведет к тому, что созданные боты могут собирать данные с сайта чрезмерно специфическим образом. Это значит, что, если в структуре сайта произойдет малейшее изменение, то парсер может попросту сломаться. Для сравнения, опытные инженеры по созданию парсеров могут с самого начала разрабатывать своих ботов таким образом, чтобы они были более гибкими к изменениям веб-сайта и т.д., что делает их гораздо более надежными.
- Ограниченность наблюдения за работой парсера — используя инструменты визуального парсинга веб-страниц, вы не можете в полной мере наблюдать за работой парсера, как именно он сканирует сайт, что затрудняет выявление и устранение первопричин проблем с качеством извлеченных данных.
Что нужно знать Для парсинга. Для чего парсинг нужен?
В первую очередь, целью парсинга является ценовая «разведка», ассортиментный анализ, отслеживание товарных акций. “Кто, что, за сколько и в каких количествах продаёт?” – основные вопросы, на которые парсинг должен ответить. Если говорить более подробно, то парсинг ассортимента конкурентов или того же Яндекс.Маркет отвечает на первые три вопроса.С оборотом товара несколько сложней. Однако, такие компании как “Wildberries”, “Lamoda“ и Леруа Мерлен, открыто предоставляют информацию об ежедневных объемах продаж (заказах) или остатках товара, на основе которой не сложно составить общее представлении о продажах (часто слышу мнение, мол эти данные могут искажаться намеренно — возможно, а возможно и нет). Смотрим, сколько было товара на складе сегодня, завтра, послезавтра и так в течении месяца и вот уже готов график и динамика изменения количества по позиции составлена (оборачиваемость товара фактически). Чем выше динамика, тем больше оборот. Потенциально возможный способ узнать оборачиваемость товаров с помощью ежедневного анализа остатков сайта Леруа Мерлен. Можно, конечно, сослаться на перемещение товаров между точками. Но суммарно, если брать, например, Москву — то число не сильно изменится, а в существенные передвижения товара по регионам верится с трудом.С объемами продаж ситуация аналогична. Есть, конечно, компании, которые публикуют информацию в виде много/мало, но даже с этим можно работать, и самые продаваемые позиции легко отслеживаются. Особенно, если отсечь дешёвые позиции и сфокусироваться исключительно на тех, что представляют наибольшую ценность. По крайней мере, мы такой анализ делали – интересно получалось.Во-вторых, парсинг используется для получения контента. Здесь уже могут иметь место истории в стиле “правовых оттенков серого”. Многие зацикливаются на том, что парсинг – это именно воровство контента, хотя это совершенно не так. Парсинг – это всего лишь автоматизированный сбор информации, не более того. Например, парсинг фотографий, особенно с “водяными знаками” – это чистой воды воровство контента и нарушение авторских прав. Потому таким обычно не занимаются (мы в своей работе ограничиваемся сбором ссылок на изображения, не более того… ну иногда просят посчитать количество фотографий, отследить наличие видео на товар и дать ссылку и т.п.).Касательно сбора контента, интересней ситуация с описаниями товаров. Недавно нам поступил заказ на сбор данных по 50 сайтам крупных онлайн-аптек. Помимо информации об ассортименте и цене, нас попросили “спарсить” описание лекарственных аппаратов – то самое, что вложено в каждую пачку и является т.н. фактической информацией, т.е. маловероятно попадает под закон о защите авторских прав. В результате вместо набора инструкций вручную, заказчикам останется лишь внести небольшие корректировки в шаблоны инструкций, и всё – контент для сайта готов. Но да, могут быть и авторские описания лекарств, которые заверены у нотариуса и сделаны специально как своего рода ловушки для воришек контента :).Рассмотрим также сбор описания книг, например, с ОЗОН.РУ или Лабиринт.ру. Здесь уже ситуация не так однозначна с правовой точки зрения. С одной стороны, использование такого описания может нарушать авторское право, особенно если описание каждой карточки с товаром было нотариально заверено (в чём я сильно сомневаюсь — ведь может и не быть заверено, исключение — небольшие ресурсы, которые хотят затаскать по судам воров контента). В любом случае, в данной ситуации придётся сильно «попотеть», чтобы доказать уникальность этого описания. Некоторые клиенты идут еще дальше — подключают синонимайзеры, которые «на лету» меняют (хорошо или плохо) слова в описании, сохраняя общий смысл.Ещё одно из применений парсинга довольно оригинально – “самопарсинг”. Здесь преследуется несколько целей. Для начала – это отслеживание того, что происходит с наполнением сайта: где битые ссылки, где описания не хватает, дублирование товаров, отсутствие иллюстраций и т.д. Полчаса работы парсера — и вот у тебя готовая таблица со всеми категориями и данными. Удобно! “Самопарсинг” можно использовать и для того, чтобы сравнить остатки на сайте со своими складскими остатками (есть и такие заказчики, отслеживают сбои выгрузок на сайт). Ещё одно применение “самопарсинга”, с которым мы столкнулись в работе — это структурирование данных с сайта для выгрузки их на Яндекс Маркет. Ребятам так проще было сделать, чем вручную этим заниматься.Также парсятся объявления, например, на ЦИАН-е, Авито и т.д. Цели тут могут быть как перепродажи баз риелторам или туроператорам, так и откровенный телефонный спам, ретаргетинг и т.п. В случае с Авито это особенно явно, т.к. сразу составляется таблица с телефонами пользователей (несмотря на то, что Авито подменяет телефоны пользователей для защиты и публикует их в виде изображения, от поступающих звонков все равно никуда не уйти).
Cgfhcbnm. Какие сложности могут возникнуть при парсинге веб-сайтов?
- Веб-сайты со сложной структурой: большинство веб-страниц основаны на использовании HTML, и структура одной веб-страницы может сильно отличаться от структуры другой. Следовательно, когда вам нужно спарсить несколько веб-сайтов, для каждого из них придется создать свой парсер.
- Поддержка парсера может быть дорогой: веб-сайты всё время меняют дизайн веб-страницы. Если местоположение собираемых данных меняется, то программный код сборщиков данных необходимо снова доработать.
- Используемые веб-сайтами инструменты противодействия парсингу: такие инструменты позволяют веб-разработчикам управлять контентом, который отображается роботам и людям, а также ограничивать роботам возможность собирать данные на веб-сайте. Некоторые из методов защиты от парсинга: блокировка IP-адресов, captcha (Completely Automated Public Turing test to tell Computers and Humans Apart — полностью автоматический тест Тьюринга для различения компьютеров и людей) и ловушки в виде приманок для парсеров.
- Необходимость авторизации: чтобы собрать во Всемирной паутине определенную информацию, возможно, вам сначала потребуется пройти авторизацию. Поэтому когда веб-сайт требует войти в систему, нужно убедиться, что парсер сохраняет файлы cookie, которые были отправлены вместе с запросом, чтобы веб-сайт воспринимал парсер в качестве авторизованного ранее посетителя.
- Медленная или нестабильная скорость загрузки: когда веб-сайты загружают контент медленно или не отвечают на запросы, может помочь обновление страницы, хотя парсер, возможно, не знает, что делать в такой ситуации.
Платный парсер. Кому и зачем нужны парсеры сайтов
Парсеры экономят время на сбор большого объема данных и группировку их в нужный вид. Такими сервисами пользуются интернет-маркетологи, вебмастера, SEO-специалисты, сотрудники отделов продаж.
Парсеры могут выполнять следующие задачи:
- Сбор цен и ассортимента. Это полезно для интернет-магазинов. При помощи парсера можно мониторить цены конкурентов и наполнять каталог на своем ресурсе в автоматическом режиме.
- Парсинг метаданных сайта (title, description, заголовков H1) пригодится SEO-специалистам.
- Анализ технической оптимизации ресурса (битые ссылки, ошибки 404 , неработающие редиректы и др.) потребуется сеошникам и вебмастерам.
- Программы для скачивания сайтов целиком или парсеры контента (текстов, картинок, ссылок) находятся в «серой» зоне. С их помощью недобросовестные вебмастера клонируют сайты для последующей продажи с них ссылок. Сюда же отнесем парсинг данных с агрегаторов и картографических сервисов: Авито, Яндекс.Карт, 2gis и других. Собранные базы используются для спамных обзвонов и рассылок.
Кому и для каких целей требуются парсеры, разобрались. Если вам нужен этот инструмент, есть несколько способов его заполучить.
- При наличии программистов в штате проще всего поставить им задачу сделать парсер под нужные цели. Так вы получите гибкие настройки и оперативную техподдержку. Самые популярные языки для создания парсеров — PHP и Python.
- Воспользоваться бесплатным или платным облачным сервисом.
- Установить подходящую по функционалу программу.
- Обратиться в компанию, которая разработает инструмент под ваши нужды (ожидаемо самый дорогой вариант).
С первым и последним вариантом все понятно. Но выбор из готовых решений может занять немало времени. Мы упростили эту задачу и сделали обзор инструментов.
Наказание за парсинг. Парсинг — это законно?
В двух словах: законно, но нужно помнить о куче «подводных камней».
В начале марта появилась новость, что в России запретили парсинг общедоступных персональных данных. В целом это действительно так, но правовые вопросы, связанные с парсингом, не сводятся только к персональным данным. Поэтому я решил написать о парсинге с юридической точки зрения.
Парсинг — это автоматизированный сбор общедоступной информации из интернета, осуществляемый без использования
API
сайтов. Можно представить, как человек открывает браузер, ходит по сайтам и копирует с них данные. Парсинг — то же самое, только ходит не человек, а робот. Так делают поисковики, агрегаторы, скоринговые компании, злоумышленники, продающие персональные данные, и много кто ещё.
Парсинг — не совсем точное название. На самом деле автоматизированный сбор информации лучше называть скрейпингом, а парсинг — это этап скрейпинга, на котором из скачанных данных извлекается нужная информация (так сказано, например, на второй странице в статье « Legality And Ethics of Web Scraping »). Но в русскоязычных источниках мне чаще попадается слово «парсинг», и используется оно как синоним скрейпинга без терминологических нюансов, так что буду в этой статье писать «парсинг», имея в виду автоматизированный сбор данных в целом, а не какую-то его технологическую часть. Кстати, в законах наверняка не написали бы ни о «парсинге», ни о «скрейпинге», потому что заимствования там не любят. Вместо этого придумали бы что-то вроде «автоматизированного сбора общедоступной информации в сети «Интернет».
В российских законах напрямую о парсинге не говорится ничего: нет какого-то раздела под заголовком «Парсинг» с определением и десятком-другим правил, из которых сразу было бы понятно, что можно, а что нельзя. Это проблема: рассуждать о юридической стороне какого-либо явления проще всего, когда о нём давным-давно известно (желательно — со времён римского права), когда об этом десять раз написано в законах и есть куча судебных решений, официальных разъяснений и разного рода теоретических работ. В случае с парсингом всё не так: римские юристы о нём не знали, в законах ничего конкретно не сказано, судебной практики и научных статей немного, официальных разъяснений я не встречал. Что делать? Лучше всего подумать, какие нормы права в принципе можно применить к парсингу и каким образом.
Парсинг сложных сайтов python. Часть 1
Анализ данных предполагает, в первую очередь, наличие этих данных. Первая часть доклада рассказывает о том, что делать, если у вас не имеется готового/стандартного датасета, либо он не соответствует тому, каким должен быть. Наиболее очевидный вариант - скачать данные из интернета. Это можно сделать множеством способов, начиная с сохранения html-страницы и заканчивая Event loop (моделью событийного цикла). Последний основан на параллелизме в JavaScript, что позволяет значительно повысить производительность. В парсинге event loop реализуется с помощью технологии AJAX, утилит вроде Scrapy или любого асинхронного фреймворка.
Извлечение данных из html связано с обходом дерева, который может осуществляться с применением различных техник и технологий. В докладе рассматриваются три «языка» обхода дерева: CSS-селекторы, XPath и DSL. Первые два состоят в довольно тесном родстве и выигрывают за счет своей универсальности и широкой сфере применения. DSL (предметно-ориентированный язык, domain-specific language) для парсинга существует довольно много, и хороши они, в первую очередь, тем, что удобство работы с ним осуществляется благодаря поддержке IDE и валидации со стороны языка программирования.
Для тренировки написания пауков компанией ScrapingHub создан учебный сайт toscrape.com , на примере которого рассматривается парсинг книжного сайта. С помощью chrome-расширения SelectorGadget , которое позволяет генерировать CSS-селекторы, выделяя элементы на странице, можно облегчить написание скрапера.
Пример с использованием scrapy :
import scrapy
class BookSpider(scrapy.Spider):
name = 'books'
start_urls =
def parse(self, response):
for href in response.css('.product_pod a::attr(href)').extract():
url = response.urljoin(href)
print(url)
Пример без scrapy:
import json
from urllib.parse import urljoin
import requests
from parsel import Selector
index = requests.get('http://books.toscrape.com/')
books =
for href in Selector(index.text).css('.product_pod a::attr(href)').extract():
url = urljoin(index.url, href)
book_page = requests.get(url)
sel = Selector(book_page.text)
books.append({
'title': sel.css('h1::text').extract_first(),
'price': sel.css('.product_main .price_color::text')extract_first(),
'image': sel.css('#product_gallery img::attr(src)').extract_first()
})
with open('books.json', 'w') as fp:
json.dump(books, fp)
Некоторые сайты сами помогают парсингу с помощью специальных тегов и атрибутов html. Легкость парсинга улучшает SEO сайта, так как при этом обеспечивается большая легкость поиска сайта в сети.