Сегодня я хочу поделиться с вами подробностями о новаторском инструменте для работы с данными - "Frog Parser", адрес проекта: https://frog-parser.com Этот инструмент представляет собой мощный парсер, который был разработан с целью сделать процесс извлечения данных из веб-сайтов максимально удобным, понятным и эффективным. Я постарался отойти от сложных парадигм программирования, делая данный инструмент доступным для пользователей с базовыми знаниями информатики, и в то же время удерживая гибкость и мощь необходимые для выполнения сложных задач парсинга.
"Frog Parser" основывается на проектном подходе, использует иерархические структуры команд и учитывает натуральное поведение пользователя при навигации по веб-страницам. В этой статье я хочу рассказать вам о ключевых особенностях этого продукта, его языке команд, типах представления рабочих документов, а также о преимуществах использования "Frog Parser" в ваших проектах. Давайте погрузимся в детали!
Парсинг рассматривается как комплекс различных команд, объединенных в иерархические группы по смыслу, или workflow.
С точки зрения конечного пользователя, процесс парсинга представляется в виде документа, именуемого "Frog Parser Workflow Document".
Применяется проектный подход: документы группируются в проекты.
Язык описания процесса парсинга, "Frog Parser Command Language", можно сравнить с языком ассемблера — это набор команд с параметрами.
Документ "Frog Parser Workflow" может иметь различные представления: табличное, схематическое, текстовое.
"Frog Parser Workflow Document" должен быть представлен в виде текстового человекопонятного файла для удобства хранения в системе контроля версий и ручного внесения правок.
Язык команд "Frog Parser Command Language" должен быть простым и понятным для пользователя с базовыми знаниями информатики, при этом обеспечивая достаточную гибкость для выполнения задач, но не перегруженным сложными парадигмами из области программирования, распространенными среди профессиональных разработчиков.
В результате процесса парсинга данных с веб-сайта создается "Dataset", который можно экспортировать из внутреннего представления в общепринятые форматы, такие как CSV или MS Excel.
Взаимодействие с веб-страницей соответствует общепринятым в индустрии веб-разработки методам. Например, поиск элементов на странице возможен с помощью различных способов: по идентификатору, имени HTML-тега, имени атрибута HTML-элемента, CSS-классу, CSS-селектору.
Навигация по веб-страницам имитирует поведение реального пользователя: клики по кнопкам, ввод данных в поля и т.д.
Для работы с “Frog Parser” конечному пользователю не требуется установка дополнительного программного обеспечения — достаточно иметь доступ к Интернету и последнюю версию веб-браузера (Google Chrome, MS Edge).
Задачи парсинга запускаются в пакетном режиме, а пользовательский интерфейс предусматривает мониторинг статуса их выполнения.
Программный продукт “Frog Parser” доступен по подписке. В случае неактивной подписки, продукт работает в демонстрационном режиме, добавляя "водяные знаки" (Watermarks) в выходные данные."
Здесь для ознакомления приведены экранные копии “Frog Parser”.
Пример "Frog Parser Workflow Document". В данном случае осуществляется парсинг сайта созданного с использованием Ecommerce CMS Shopify: https://district-theme-demo.myshopify.com/collections/clothing
{
"version": "1.0.0.0",
"acceptLanguage": "",
"commands": [
{
"@type": "SetConstantValueToVariableCommand",
"enabled": true,
"name": "set-implicitly-wait-variable-value",
"description": "",
"retryCount": 1,
"variableType": "Long",
"variable": {
"name": "implicitly-wait"
},
"value": {
"@type": "VariableValueLong",
"value": 3000
}
},
{
"@type": "SetImplicitlyWaitCommand",
"enabled": true,
"name": "set-implicitly-wait",
"description": "",
"retryCount": 1,
"variable": {
"name": "implicitly-wait"
}
},
{
"@type": "CreateDatasetCommand",
"enabled": true,
"name": "create-dataset",
"description": "",
"retryCount": 1,
"variable": {
"name": "dataset"
},
"metadata": {
"columns": [
{
"name": "page-number",
"type": "Integer"
},
{
"name": "product-title",
"type": "String"
},
{
"name": "product-price",
"type": "String"
}
]
}
},
{
"@type": "SetConstantValueToVariableCommand",
"enabled": true,
"name": "Set constant value to start-page variable",
"description": "",
"retryCount": 1,
"variableType": "Url",
"variable": {
"name": "start-page"
},
"value": {
"@type": "VariableValueUrl",
"value": "https://district-theme-demo.myshopify.com/collections/clothing"
}
},
{
"@type": "OpenWebPageCommand",
"enabled": true,
"name": "Open start-web-page",
"description": "",
"retryCount": 1,
"variable": {
"name": "start-page"
}
},
{
"@type": "SetConstantValueToVariableCommand",
"enabled": true,
"name": "set-handle-current-page-to-true",
"description": "",
"retryCount": 1,
"variableType": "Boolean",
"variable": {
"name": "handle-current-page"
},
"value": {
"@type": "VariableValueBoolean",
"value": true
}
},
{
"@type": "SetConstantValueToVariableCommand",
"enabled": true,
"name": "set-page-number",
"description": "",
"retryCount": 1,
"variableType": "Integer",
"variable": {
"name": "page-number"
},
"value": {
"@type": "VariableValueInteger",
"value": 0
}
},
{
"@type": "WhileLoopCommand",
"enabled": true,
"name": "do-while-handle-current-page",
"description": "",
"retryCount": 1,
"variable": {
"name": "handle-current-page"
},
"commands": [
{
"@type": "IncrementVariableCommand",
"enabled": true,
"name": "increment-page-number",
"description": "",
"retryCount": 1,
"variable": {
"name": "page-number"
}
},
{
"@type": "FindElementsCommand",
"enabled": true,
"name": "find-product-card-elements",
"description": "",
"retryCount": 1,
"findBy": {
"@type": "FindByTagName",
"value": "product-card"
},
"variable": {
"name": "product-card-elements"
}
},
{
"@type": "ForAllLoopCommand",
"enabled": true,
"name": "for-all-product-cards",
"description": "",
"retryCount": 1,
"variable": {
"name": "product-card-elements"
},
"itemVariable": {
"name": "product-card-element"
},
"commands": [
{
"@type": "FindChildElementCommand",
"enabled": true,
"name": "find-product-card-title-element",
"description": "",
"retryCount": 1,
"findBy": {
"@type": "FindByClassName",
"value": "product-card__title"
},
"variable": {
"name": "product-card-title-element"
},
"parentElementVariable": {
"name": "product-card-element"
}
},
{
"@type": "ReadPropertyCommand",
"enabled": true,
"name": "read-product-card-title-element",
"description": "",
"retryCount": 1,
"variable": {
"name": "product-card-title-element"
},
"property": {
"@type": "ElementPropertyText"
},
"newVariable": {
"name": "product-card-title-text"
}
},
{
"@type": "FindChildElementCommand",
"enabled": true,
"name": "find-product-card-price-element",
"description": "",
"retryCount": 1,
"findBy": {
"@type": "FindByCssSelector",
"value": ".price"
},
"variable": {
"name": "product-card-price-element"
},
"parentElementVariable": {
"name": "product-card-element"
}
},
{
"@type": "ReadPropertyCommand",
"enabled": true,
"name": "read-product-card-price-element",
"description": "",
"retryCount": 1,
"variable": {
"name": "product-card-price-element"
},
"property": {
"@type": "ElementPropertyText"
},
"newVariable": {
"name": "product-card-price-text"
}
},
{
"@type": "CreateDatasetRowCommand",
"enabled": true,
"name": "create-dataset-row",
"description": "",
"retryCount": 1,
"variable": {
"name": "dataset"
},
"columns": [
{
"name": "page-number",
"columnVariable": {
"name": "page-number"
}
},
{
"name": "product-title",
"columnVariable": {
"name": "product-card-title-text"
}
},
{
"name": "product-price",
"columnVariable": {
"name": "product-card-price-text"
}
}
]
},
{
"@type": "SaveVariableCommand",
"enabled": true,
"name": "save-dataset",
"description": "",
"retryCount": 1,
"variable": {
"name": "dataset"
}
}
]
},
{
"@type": "CheckElementExistsCommand",
"enabled": true,
"name": "check-next-page-link-exists",
"description": "",
"retryCount": 1,
"findBy": {
"@type": "FindByCssSelector",
"value": "a[aria-label=\"Next page\"]"
},
"variable": {
"name": "handle-current-page"
}
},
{
"@type": "IfThenCommand",
"enabled": true,
"name": "if-next-page-link-exists",
"description": "",
"retryCount": 1,
"ifVariable": {
"name": "handle-current-page"
},
"thenCommands": [
{
"@type": "FindElementCommand",
"enabled": true,
"name": "find-next-page-link-element",
"description": "",
"retryCount": 1,
"findBy": {
"@type": "FindByCssSelector",
"value": "a[aria-label=\"Next page\"]"
},
"variable": {
"name": "next-page-link-element"
}
},
{
"@type": "ClickCommand",
"enabled": true,
"name": "click-by-next-page-link",
"description": "",
"retryCount": 1,
"variable": {
"name": "next-page-link-element"
},
"clickIfInvisible": true
}
]
}
]
}
]
}
Подводя итог, стоит отметить, что “Frog Parser” представляет собой уникальный инструмент, созданный для облегчения и упрощения процесса парсинга данных из веб-сайтов. Он объединяет в себе простоту использования для пользователей с базовыми знаниями информатики и мощность необходимую для выполнения сложных задач парсинга.
Используя “Frog Parser”, вы можете упростить и ускорить процесс извлечения данных, используя его интуитивно понятный язык команд, различные представления рабочих документов и возможность экспорта данных в общепринятые форматы. Кроме того, инструмент не требует установки дополнительного программного обеспечения и доступен по подписке, что обеспечивает максимальную гибкость использования.
В целом, "Frog Parser" предлагает универсальное и гибкое решение для работы с данными, сочетая в себе лучшие практики веб-разработки и навигации по страницам, имитируя поведение реального пользователя. Создан сбалансированный по простоте использования и функциональным возможностям нишевой программный продукт, следующий философии "Low Code Solution". Я надеюсь, что данный программный продукт поможет вам повысить эффективность и качество работы с данными.
Адрес проекта: https://frog-parser.com
Facebook страница проекта: https://www.facebook.com/frogparser
Telegram: https://t.me/frog_parser_com
С Уважением,
Роман