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/


Интересные статьи

Интересные статьи

Странице подтверждения заказа часто отводится незаслуженно мало внимания. Но с ее помощью можно решить много задач и создать ценность – как для клиента, так и для компании. Как еще ее использовать? В ...
В студенческие годы я написал на заказ много парсеров магазинов и социальных сетей. Со временем парсеры усложнялись и из скриптов превращались в полноценные веб-приложения c базой данных и Rest API. В...
Как-то в процессе работы возник вопрос как на корпоративном домене в Яндексе выгрузить все контакты организации из адресной книги Яндекс.почты в файл .csv или .xls, чтобы было красиво и потом удобно р...
Ради бога, не объявляйте о своей игре и на заводите для неё страницу в Steam, как только приступите к разработке. В прошлом году я много размышлял о наилучшей стратегии объявления новой игры. Пох...
Привет! Меня зовут Георгий Бердников. Я разработчик в компании 65apps, занимаюсь созданием мобильных приложений на Android. Сегодня расскажу о том, как совместить приятное с полезным, поймать двух зай...