Frog Parser — Парсинг Web страниц без сложностей

от автора

Сегодня я хочу поделиться с вами подробностями о новаторском инструменте для работы с данными — «Frog Parser», адрес проекта: https://frog-parser.com Этот инструмент представляет собой мощный парсер, который был разработан с целью сделать процесс извлечения данных из веб-сайтов максимально удобным, понятным и эффективным. Я постарался отойти от сложных парадигм программирования, делая данный инструмент доступным для пользователей с базовыми знаниями информатики, и в то же время удерживая гибкость и мощь необходимые для выполнения сложных задач парсинга.

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

  1. Парсинг рассматривается как комплекс различных команд, объединенных в иерархические группы по смыслу, или workflow.

  2. С точки зрения конечного пользователя, процесс парсинга представляется в виде документа, именуемого «Frog Parser Workflow Document».

  3. Применяется проектный подход: документы группируются в проекты.

  4. Язык описания процесса парсинга, «Frog Parser Command Language», можно сравнить с языком ассемблера — это набор команд с параметрами.

  5. Документ «Frog Parser Workflow» может иметь различные представления: табличное, схематическое, текстовое.

  6. «Frog Parser Workflow Document» должен быть представлен в виде текстового человекопонятного файла для удобства хранения в системе контроля версий и ручного внесения правок.

  7. Язык команд «Frog Parser Command Language» должен быть простым и понятным для пользователя с базовыми знаниями информатики, при этом обеспечивая достаточную гибкость для выполнения задач, но не перегруженным сложными парадигмами из области программирования, распространенными среди профессиональных разработчиков.

  8. В результате процесса парсинга данных с веб-сайта создается «Dataset», который можно экспортировать из внутреннего представления в общепринятые форматы, такие как CSV или MS Excel.

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

  10. Навигация по веб-страницам имитирует поведение реального пользователя: клики по кнопкам, ввод данных в поля и т.д.

  11. Для работы с “Frog Parser” конечному пользователю не требуется установка дополнительного программного обеспечения — достаточно иметь доступ к Интернету и последнюю версию веб-браузера (Google Chrome, MS Edge).

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

  13. Программный продукт “Frog Parser” доступен по подписке. В случае неактивной подписки, продукт работает в демонстрационном режиме, добавляя «водяные знаки» (Watermarks) в выходные данные.»

Project list

Project list
Workflow list

Workflow list
Edit workflow as table, example example 1

Edit workflow as table, example example 1
Edit workflow as table, example example 2

Edit workflow as table, example example 2
Edit workflow as table, example example 3

Edit workflow as table, example example 3
Edit workflow a JSON

Edit workflow a JSON
Workflow execution details

Workflow execution details
Output dataset

Output dataset
Exported data to MS Excel

Exported data to MS Excel

Пример «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» предлагает универсальное и гибкое решение для работы с данными, сочетая в себе лучшие практики веб-разработки и навигации по страницам, имитируя поведение реального пользователя. Я надеюсь, что данный программный продукт поможет вам повысить эффективность и качество работы с данными.

Адрес проекта: https://frog-parser.com

Facebook страница проекта: https://www.facebook.com/frogparser

Telegram: https://t.me/frog_parser_com

С Уважением,

Роман


ссылка на оригинал статьи https://habr.com/ru/articles/745674/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *