8-900-374-94-44
[email protected]
Slide Image
Меню

Модуль парсер: Битрикс — Сотбит: Парсер контента – сайты, excel, xml, yml, csv, rss

Содержание

Инструкция пользователя при работе с модулем «Парсер контента» в режиме каталога

Станислав Шашалевич

03 февраля 2014

Инструкция пользователя при работе с модулем «Парсер контента» в режиме каталога

Модуль «Парсер контента» с версии 4.0.0. "научился" парсить каталоги, что значительно расширяет его функциональность. Но и настройка самого парсера в режиме каталога стала на первый взгляд сложнее. Но это лишь на первый взгляд. Данная инструкция разрушит все ваши сложности и возникшие вопросы. И так. Поехали!

Внимание!!! Чтобы работа с парсером была легкой и простой, необходимо знать азы верстки и css, а именно селектора: классы, идентификаторы, атрибуты. Так же будут полезны базовые знания работы с JQuery, например: .image img:eq(0). Без этих базовых знаний нет смысла читать далее! Если вы еще не знаете таких понятий, то с ними можно легко ознакомиться по ссылке: http://habrahabr.ru/post/123949/

Парсер в режиме каталога состоит из 13 вкладок при установленном модуле Торговый Каталог, в ином случае - из 11, т.к. вкладка Торговый каталог и Торговые предложения отсутствуют.

Сотбит - Битрикс - Парсер каталога

Теперь рассмотрим каждую вкладку подробнее.

Основная и вкладка по-умолчанию - Парсер:

Сотбит - Битрикс - Парсер каталога

Тип парсера – соответственно и есть тип парсера. На данный момент это rss, page, catalog. Нас же интересует catalog.

Внимание! Если не использовать вкладку Торговый каталог, то парсер будет просто работать в расширенном режиме парсинга без создания товаров. Удобно для парсинга сложных новостных страниц или статей.

Режим парсера – режим, в котором работает парсер. Существует два режима работы: debug и work. По умолчанию для отладки используется debug режим. Именно в этом режиме необходимо настраивать парсер. В дебаг режиме парсится три страницы и по три товара с каждой страницы. В рабочий режим work парсер необходимо переводить, если он полностью настроен и отлажен.

Стоит отметить, что, если вы используете модуль «Парсер контента» в триал версии, то парсер работает только в дебаг режиме.

URL раздела каталога – страница, содержащая непосредственно товары.

Дополнительные урлы разделов - вы можете также включить в выгрузку и другие урлы. Для этого просто укажите их с новой строки.

ID инфоблока-каталога – инфоблок, в который будет осуществляться загрузка товаров.

ID раздела – раздел инфоблока, в который будет осуществляться загрузка товаров.

Количество товаров, выгружаемых за один шаг парсера – количество товаров, который парсер обрабатывает за один шаг.

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

Активен, Сортировка, Название, Время последнего запуска – интуитивно понятные поля и в комментариях не нуждаются.

Кодировка - кодировка сайт донора. Устаревшее поле. На данный момент кодировка определяется автоматически, но, если возникают какие-то проблемы с кодировкой, то рекомендуется указать в ручную.

Вкладка Постраничная навигация:

Сотбит - Битрикс - Парсер каталога

Селектор навигации – селектор контейнера навигации.

Селектор пункта навигации – селектор пункта навигации, содержащий ссылки на страницы. Как правило это элемент ссылки a. Указывается относительно предыдущего параметра.

Удалить элементы навигации – список элементов, которые необходимо удалить из навигации. Например, иногда нужно удалить лишние элементы из навигации, такие как След, Предыд, Показать все и подобное. Указывается относительно селектора навигации.

На картинке ниже подробная схема селекторов Пагинации.

Сотбит - Битрикс - Парсер каталога

Стоить отметить, что если Селектор навигации не указан, то парсинг осуществляется только по одной странице.

Вкладка превью:

Сотбит - Битрикс - Парсер каталога

Селектор товара на странице каталога – селектор контейнера товара на странице списка товаров.

Сотбит - Битрикс - Парсер каталога

Селектор ссылки товара – как правило, обычная ссылка a, содержащая атрибут href. Если пусто, то используется a:eq(0), то есть первая ссылка. Указывается относительно предыдущего параметра.

Селектор названия товара – селектор, в котором содержится название товара. Если пустое, то равно предыдущему параметру.

Селектор превью описания – селектор, в котором содержится превью описание товара.

Селектор цены – селектор, в котором содержится цена товара.

Удалять элементы

– элементы, которые необходимо удалить из описания. Указываются относительно селектора товара на странице каталога.

Удалять атрибуты элементов – атрибуты элементов, которые необходимо удалить. Пример написания: a[href], a[rel].

Селектор-атрибут превью картинки – указывается селектор и атрибут превью картинки. Пример: img[src], a[href]

Вкладка Детально:

Сотбит - Битрикс - Парсер каталога

Поля аналогичны полям во вкладке Детально. Поэтому подробно рассматривать не будем.

Вкладка Свойства:

Сотбит - Битрикс - Парсер каталога

Свойство доп. картинок – если есть доп. картинки, то необходимо указать поля, в которые будет осуществляться выгрузка картинок.

Селектор-атрибут перечисления доп. картинок – указывается селектор и атрибут доп. картинок. Пример .images

img[src]. Указывается относительно селектора товара на детальной странице.

Парсинг свойств по селектору из деталки – производится парсинг свойств по конкретному селектору на детальной странице товара. Поле используется, если свойства имеют свои селектора.

Удалять символы – удаляются символы из свойств, описанных выше. Как правило, это двоеточия, запятые, многоточия и подобное.

Парсинг свойств по названию из деталки – требует более детального описания. Парсинг свойств в этом случае осуществляется по селектору списка свойств и по названию свойства из детальной страницы товара.

Селектор перечисления свойств – общий селектор свойств в списке.

Сотбит - Битрикс - Парсер каталога

Удалять символы – удалять лишние символы, такие как: запятые, двоеточия, многоточия и подобное.

Еще необходимо указать названия свойств. Именно по этому названию и общему селектору будет производиться парсинг свойств.

Парсинг свойств по селектору из превью -

поле аналогичное для деталки, но только селектора указываются относительно селектора товара в списке товаров.

Парсинг свойств по названию из превью – поле аналогичное для деталки, но только селектора указываются относительно селектора товара в списке товаров.

Хочу обратить внимание, что на данный момент возможен парсинг свойств только типов: строка, число, список, привязка к элементам, справочник, html, файлы. Множественность не поддерживается.

Также, возможно создать новое свойство прямо из интерфейса парсера. Для этого необходимо в селекте выбрать значение [Создать] и нажать кнопку добавить.

Вкладка Торговый каталог(если установлен модуль Торговый каталог):

Сотбит - Битрикс - Парсер каталога

Тип цены, Ставка НДС, Включать НДС в цену, Валюта, Единица измерения, коэффициент единицы измерения – эти поля интуитивно понятны и не требует дополнительного разъяснения.

Работа с ценами – предоставляется возможность работы с ценами: конвертация, округление цены, формат цены, изменение цены.

Конвертировать в валюту – в какую валюту необходимо конвертировать цену.

Округление цены - три режима округления цены: округлять с указанной точностью(можно указать точно округления после запятой), округлять до целого в большую сторону, округлять до целого в меньшую сторону.

Формат цены - если цена имеет сложные разделители, например 5.990,00 . В этом случае вы должны указать символы разделителей. В большинстве случаев можно оставить пустым.

Изменить цену – возможные значения: Не изменять, Увеличить, уменьшить.

Условие изменения цены – обозначается условие, при выполнении которого будет изменена цена. Словесный пример: Увеличить цену, если цена выше 600. 600 – цена в исходной валюте.

Тип изменения – возможные варианты: Проценты и Абсолютная величина. То есть изменения цены будет в процентном соотношении или в абсолютной величине.

Величина изменения – величина изменения цены. Указывается в зависимости от предыдущего поля.

Парсинг размеров по селектору – логика аналогична логике парсинга свойств из вкладки Свойства.

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

Вкладка Торговые предложения(если установлен модуль Торговый каталог):

Торговые предложения - Парсер - Сотбит

Выгружать офферы - выбор типа выгружаемых торговых предложений. На данный момент поддерживается два вида: Табличный вид и Офферы с одиночными характеристиками.

Офферы табличного вида

Параметр уникализации – важный параметр, определяющий по каким параметрам будет происходить уникализация офферов. 
Особенности: 
1. Указанные свойства добавляются в название оффера. 
2. Если название оффера отсутствует, то название полностью будет состоять из значений указанных свойств. 
3. По данному параметру происходит уникализации офферов. 

4. Если ничего не указано, то уникальность будет определяться по названию оффера.


Главный селектор контейнера торговых предложений – селектор контейнера офферов относительно селектора детальной страницы. Например: table. 


  
Селектор блока шапки таблицы – селектор шапки таблицы относительно предыдущего параметра. Это поле требуется, если поиск параметров идет по названию. Например: thead tr 


  
Селектор наименования параметра в шапке таблицы – селектор конкретного наименования параметра относительно предыдущего параметра. Это поле требуется, если поиск параметров идет по названию. Например: th 

Селектор отдельного оффера – селектор блок торгового предложения относительно главного селектора офферов. Например: tbody tr 

Селектор значения параметра в теле таблицы – селектор конкретного значения параметра относительно предыдущего параметра. Например: td 


  
Далее следует блок полей, связанных непосредственно с парсингом значений а таблице 
Парсинг полей по селектору - 
Удалять символы – какие символы необходимо удалять из значений параметров. Перечисление идет через || 
Наименование – селектор названия оффера 
Цена – селектор цены оффера 
Парсинг полей и свойств по названию – происходит поиск значений параметров по наименованию в шапке таблицы. 
Удалять символы – удалять лишние символы. Перечисление через || 
Далее идут параметры, которые необходимо найти. Для этого нужно указать название параметра в шапке таблицы

Офферы с одиночными характеристиками

Параметр уникализации – см. выше. 
Селектор контейнера отдельной характеристики оффера  - если выбор оффера осуществляется кликом по блоку, то нужно указать селектор как раз этого блока. Пример: select option, #charect div.size

Торговые предложения - Парсер - Сотбит

Атрибут цены – атрибут предыдущего параметра(селектора). Используется, если цена заносится в атрибут.

Торговые предложения - Парсер - Сотбит 

Вкладка Дополнительные настройки:

Сотбит - Битрикс - Парсер каталога

Парсить при возникновении 404 ошибки – при парсинге страниц в случае возникновения 404 ошибки продолжать парсинг. Пункт актуален из-за СЕО заморочек.

Запускать по агенту – запуск парсера по агенту. Рекомендуется агенты запускать из под крона.

Время задержки(сек) – время между запросами к страницам каталога. Иногда сайты используют контроль активности за единицу времени. Этот пункт как раз позволяет обойти вышеуказанный контроль.

Прокси-сервер – адрес прокси-сервера, через который будет осуществляться парсинг. Применяется для сохранения анонимности.

Остальные поля интуитивно понятны и не требуют разъяснения.

Вкладка Обновление/Уникальность:

Сотбит - Битрикс - Парсер каталога

Обновлять товары – чекбокс, который включает и выключает обновление товаров.

Проверка уникальности – изначально для уникализации использует поле XML_ID, в которое заносит md5 от названия товара и урла страницы товара. Если вы не хотите заполнять и перетирать поле XML_ID, то необходимо переопределить уникализацию. Например, вы можете уникализировать по названию или свойству(Артикул), либо по тому и другому по логике И.

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

Теперь появилась возможность отслеживания товаров выгруженных в текущей и прошлой выгрузке. Для этого во вкладку «Обновление / Уникальность» добавились доп. поля. 
  
Существует три значения данного режима: 
- ничего не делать – если товар отсутствует в текущей выгрузке, то с ним ничего происходить не будет 
- деактивировать – если товар отсутствует в текущей выгрузке и присутствовал в предыдущей, то он будет деактивирован 
- удалить – товар будет удален, если он отсутствует в текущей выгрузке

Вкладка Авторизация:

Парсер контента - авторизация

Производить авторизацию на стороннем сайте - если необходимо парсить сайт из под авторизованного пользователя, то необходимо отметить это поле.

URL авторизационной страницы - если авторизацию происходит на отдельной странице, то необходимо заполнить данное поле. По умолчанию идет страницы раздела, которые собираемся парсить.

Селектор формы авторизации - селектор формы авторизации. Пример на картинке ниже:

Парсер контента - Авторизация - Селектор формы

Логин - логин на стороннем сайте.

Пароль - пароль на стороннем сайте.

Проверить авторизацию - позволяет проверить авторизацию. Если вы уверены, что доступы и все параметры к стороннему сайту верны, а авторизация не проходит, то обратитесь в службу поддержки компании «Сотбит».

Вкладка Логи:

Сотбит - Битрикс - Парсер каталога

На данном этапе осуществляется простое логирование ошибок в файл последней выгрузки. Вкладка Сервисы.

Перевод текста


Сотбит - Битрикс - Парсер каталога

Тип перевода - выбор сервиса, который будет отвечать за перевод текста. На данный момент реализован только Яндекс.Переводчик.

Параметры для Яндекс.Переводчика

Ключ от API Яндекс.Переводчик - ключ, позволяющий пользоваться API Яндекс.Переводчика. Его вы можете получить совершенно бесплатно по адресу: https://tech.yandex.ru/keys/get/?service=trnsl

Направление перевода - в каком направлении будет осуществляться перевод текста. Языки разделяются тире. Пример: en-ru

Отправлять уникальный текст в Яндекс

Сотбит - Битрикс - Парсер каталога

Выбрать домены - выбрать домен, относительно которого будет отправляться уникальный текст в Яндекс.

Вкладка Видео-инструкция.

Предоставлена видео-инструкция, что облегчит понимание работы и настройки Парсера.

Данная инструкция будет поддерживаться в актуальном состоянии и обновляться по мере развития модуля «Парсер контента».

Компания «Сотбит» работает для Вас.

Универсальный парсер для ИМ OpenCart (ОпенКарт) и ocStore

Совместимость OpenCart 2.0, OpenCart 2.1, OpenCart 2.2, OpenCart 2.3, OpenCart 3.0, OCStore 2.1, OCStore 2.3, OCStore 3.0, Opencart.pro 2.0.3.х, Opencart.pro 2.1, Opencart.pro 2.3
Модуль SimplePars предназначен для парсинга и наполнения интернет магазина.

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


Возможности модуля SimplePars

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

В двух словах не описать что умеет делать модуль, по этому обозначу только основные моменты.

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

  •     Код товара [model]
  •     Артикул [sku]
  •     Название
  •     Цена
  •     Количество
  •     Производитель
  •     Описание
  •     Категории
  •     Изображения
  •     Атрибуты
  •     Опций
  •     Данные - товара.

Более подробно можете увидеть на скриншотах модуля.

- Кроме загрузки возможно настройка обновления существующих товаров, цен, остатков и многое другое.
- Идентификация товара по артикулу, модели или имени товара.
- Доступна установка наценок любой сложности.
- Парсинг / Составление SEO шаблонов и заполнение Мета данных товара, категорий, производителей. Заполнение SEO_URL
- Формировать прайс csv с данными что вы парсите. Так же прайсы можно составлять в готовом формате для загрузки через АОП или любого другого загрузчика прайс листов.
- Поиск замена, мощный инструмент позволяющий вам налету изменять информацию. То есть, при парсинге вы можете вырезать или заменять определенные слова или целые блоки текста. Удалять или заменять в тексте названия сайта донора на ваш. И многое другое.
- Поиск замена полностью поддерживает регулярные выражения.
- Модуль способен парсить в многопоточном режиме. Что делает парсинг максимально быстрым.
- Поддерживается парсинг с авторизацией.
- Поддержка работы с прокси.
- Собственный прокси чекер, позволяющий отобрать прокси сервера котороые будут работать с конкретным донором.
- Возможна индивидуальная настройка запросов, Указание Cookies, User-Agent, Отправка собственных заголовков Headers
- Система логирования позволяющая контролировать процесс парсинга на любом этапе.
- Система кеширования сайта донора для безопасного парсинга.
- NEW - Полноценная работа парсинга по расписанию через CRON
- NEW- Добавлен универсальный редактор товаров который позволяет производить финальные изменения в товаре. Так же редактор товара способен выполнять задания по расписанию. Инструкция к редактору товаров

Вы можете указать любое количество границ парсинга, на любые данные что есть в html коде сайта донора.
SimplePars это универсальный инструмент который поможет вам наполнить ваш интернет магазин.
Обратите внимание что вы можете настроить парсинг на любые данные, и необязательно они должны быть совместимы с opencart. Вы можете парсить статьи, отзывы, блоги.

В данном модуле есть возможность парсить все данные не только в магазин но и CSV файл
Можно формировать прайс листы для загрузки их через популярные дополнения.
Такие как:
Автоматическая обработка прайс листов.
CSV Price Pro import/export

И это малая часть тех задач которые может выполнить данный модуль.

SimplePars разрабатывается как универсальный парсер, у него нету четких задач, у него есть только набор инструментов.
А что вы построите имея эти инструменты, уже зависит только от вас.

Инструкция к модулю доступна по ссылке
Инструкция

Демо сайт для ознакомления с интерфейсом и возможностями модуля[/size] Обратите внимание что на демо сайте парсинг недоступен.
http://demo.simplepars.top/admin/
Логин
- demo
Пароль - demo

Лицензионное соглашение.
Ознакомится

Инструкция по установке.
Установка SimplePars
1. Зайдите в директорию вашей версии модуля и скопируйте все в корень сайта с заменой.
2. Введите в строке браузера ваш_сайт/inst.php и нажмите Enter.
3. Далее перейдите в раздел Система->Пользователи->Группы пользователей->Администратор нажмите выделить все в двух разделах:

  • Разрешить просмотр
  • Разрешить редактировать
Затем нажмите сохранить.
4. Зайдите в "Модификаторы" или "Менеджер дополнений", и нажмите Обновить.
5. После этого удалите в корне сайта файл inst.php
Все, модуль установлен. В разделе Каталог под пунктом Производители появится пункт SimplePars это вход в модуль.   Инструкция по обновлению
1. Загрузить содержимое директории c названием вашей версии  в корень сайта.
2. Выполнить ваш_сайт/inst.php
3. Удалить с корня сайта файл inst.php  После установки или обновления я вижу белый экран или ошибку 500 Если видите белый экран, то вам необходимо перейти в архив с модулем в директорию Other versions of PHP и там будут лежать файлы под все версии php. Открываете папку с именем вашей версии php и загружаете содержимое в корень магазина.

SimplePars - Универсальный парсер для ИМ

Внимание! Для получения лицензионного ключа напишите личное сообшение автору на данной плошадке.

Модуль SimplePars предназначен для парсинга и наполнения интернет магазина.

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

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

В двух словах не описать что умеет делать модуль, по этому обозначу только основные моменты.

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

  •     Код товара [model]
  •     Артикул [sku]
  •     Название
  •     Цена
  •     Количество
  •     Производитель
  •     Описание
  •     Категории
  •     Изображения
  •     Атрибуты
  •     Опций
  •     Данные - товара.


Более подробно можете увидеть на скриншотах модуля.

- Кроме загрузки возможно настройка обновления существующих товаров, цен, остатков и многое другое.
- Идентификация товара по артикулу, модели или имени товара.
- Доступна установка наценок любой сложности.
- Парсинг / Составление SEO шаблонов и заполнение Мета данных товара, категорий, производителей. Заполнение SEO_URL
- Формировать прайс csv с данными что вы парсите. Так же прайсы можно составлять в готовом формате для загрузки через АОП или любого другого загрузчика прайс листов.
- Поиск замена, мощный инструмент позволяющий вам налету изменять информацию. То есть, при парсинге вы можете вырезать или заменять определенные слова или целые блоки текста. Удалять или заменять в тексте названия сайта донора на ваш. И многое другое.
- Поиск замена полностью поддерживает регулярные выражения.
- Модуль способен парсить в многопоточном режиме. Что делает парсинг максимально быстрым.
- Поддерживается парсинг с авторизацией.
- Поддержка работы с прокси.
- Собственный прокси чекер, позволяющий отобрать прокси сервера котороые будут работать с конкретным донором.
- Возможна индивидуальная настройка запросов, Указание Cookies, User-Agent, Отправка собственных заголовков Headers
- Система логирования позволяющая контролировать процесс парсинга на любом этапе.
- Система кеширования сайта донора для безопасного парсинга.
- NEW - Полноценная работа парсинга по расписанию через CRON
- NEW- Добавлен универсальный редактор товаров который позволяет производить финальные изменения в товаре. Так же редактор товара способен выполнять задания по расписанию. Инструкция к редактору товаров

Вы можете указать любое количество границ парсинга, на любые данные что есть в html коде сайта донора.
SimplePars это универсальный инструмент который поможет вам наполнить ваш интернет магазин.
Обратите внимание что вы можете настроить парсинг на любые данные, и необязательно они должны быть совместимы с opencart. Вы можете парсить статьи, отзывы, блоги.

В данном модуле есть возможность парсить все данные не только в магазин но и CSV файл
Можно формировать прайс листы для загрузки их через популярные дополнения.
Такие как:
Автоматическая обработка прайс листов.
CSV Price Pro import/export

И это малая часть тех задач которые может выполнить данный модуль.

SimplePars разрабатывается как универсальный парсер, у него нету четких задач, у него есть только набор инструментов.
А что вы построите имея эти инструменты, уже зависит только от вас.

Инструкция к модулю доступна по ссылке
Инструкция

Демо сайт для ознакомления с интерфейсом и возможностями модуля[/size]Обратите внимание что на демо сайте парсинг недоступен.
http://demo.simplepars.top/admin/
Логин - demo
Пароль - demo

Лицензионное соглашение.
Ознакомится

Инструкция по установке.
Установка SimplePars
1. Зайдите в директорию вашей версии модуля и скопируйте все в корень сайта с заменой.
2. Введите в строке браузера ваш_сайт/inst.php и нажмите Enter.
3. Далее перейдите в раздел Система->Пользователи->Группы пользователей->Администратор нажмите выделить все в двух разделах:

  • Разрешить просмотр
  • Разрешить редактировать

Затем нажмите сохранить.
4. Зайдите в "Модификаторы" или "Менеджер дополнений", и нажмите Обновить.
5. После этого удалите в корне сайта файл inst.php
Все, модуль установлен.В разделе Каталог под пунктом Производители появится пункт SimplePars это вход в модуль.  Инструкция по обновлению
1. Загрузить содержимое директории c названием вашей версии  в корень сайта.
2. Выполнить ваш_сайт/inst.php
3. Удалить с корня сайта файл inst.php После установки или обновления я вижу белый экран или ошибку 500

Если видите белый экран, то вам необходимо перейти в архив с модулем в директорию Other versions of PHP и там будут лежать файлы под все версии php.Открываете папку с именем вашей версии php и загружаете содержимое в корень магазина.

10 инструментов, позволяющих парсить информацию с веб-сайтов, включая цены конкурентов + правовая оценка для России


Инструменты web scraping (парсинг) разработаны для извлечения, сбора любой открытой информации с веб-сайтов. Эти ресурсы нужны тогда, когда необходимо быстро получить и сохранить в структурированном виде любые данные из интернета. Парсинг сайтов – это новый метод ввода данных, который не требует повторного ввода или копипастинга.

Такого рода программное обеспечение ищет информацию под контролем пользователя или автоматически, выбирая новые или обновленные данные и сохраняя их в таком виде, чтобы у пользователя был к ним быстрый доступ. Например, используя парсинг можно собрать информацию о продуктах и их стоимости на сайте Amazon. Ниже рассмотрим варианты использования веб-инструментов извлечения данных и десятку лучших сервисов, которые помогут собрать информацию, без необходимости написания специальных программных кодов. Инструменты парсинга могут применяться с разными целями и в различных сценариях, рассмотрим наиболее распространенные случаи использования, которые могут вам пригодиться. И дадим правовую оценку парсинга в России.

1. Сбор данных для исследования рынка

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

2. Извлечение контактной информации

Инструменты парсинга можно использовать, чтобы собирать и систематизировать такие данные, как почтовые адреса, контактную информацию с различных сайтов и социальных сетей. Это позволяет составлять удобные списки контактов и всей сопутствующей информации для бизнеса – данные о клиентах, поставщиках или производителях.

3. Решения по загрузке с StackOverflow

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

4. Поиск работы или сотрудников

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

5. Отслеживание цен в разных магазинах

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

В обзор ниже не попал Российский сервис парсинга сайтов и последующего мониторинга цен XMLDATAFEED (xmldatafeed.com), который разработан в Санкт-Петербурге и в основном ориентирован на сбор цен с последующим анализом. Основная задача — создать систему поддержки принятия решений по управлению ценообразованием на основе открытых данных конкурентов. Из любопытного стоит выделить публикация данные по парсингу в реальном времени 🙂

10 лучших веб-инструментов для сбора данных:


Попробуем рассмотреть 10 лучших доступных инструментов парсинга. Некоторые из них бесплатные, некоторые дают возможность бесплатного ознакомления в течение ограниченного времени, некоторые предлагают разные тарифные планы.

1. Import.io

Import.io предлагает разработчику легко формировать собственные пакеты данных: нужно только импортировать информацию с определенной веб-страницы и экспортировать ее в CSV. Можно извлекать тысячи веб-страниц за считанные минуты, не написав ни строчки кода, и создавать тысячи API согласно вашим требованиям.

Для сбора огромных количеств нужной пользователю информации, сервис использует самые новые технологии, причем по низкой цене. Вместе с веб-инструментом доступны бесплатные приложения для Windows, Mac OS X и Linux для создания экстракторов данных и поисковых роботов, которые будут обеспечивать загрузку данных и синхронизацию с онлайновой учетной записью.

2. Webhose.io

Webhose.io обеспечивает прямой доступ в реальном времени к структурированным данным, полученным в результате парсинга тысяч онлайн источников. Этот парсер способен собирать веб-данные на более чем 240 языках и сохранять результаты в различных форматах, включая XML, JSON и RSS.

Webhose.io – это веб-приложение для браузера, использующее собственную технологию парсинга данных, которая позволяет обрабатывать огромные объемы информации из многочисленных источников с единственным API. Webhose предлагает бесплатный тарифный план за обработку 1000 запросов в месяц и 50 долларов за премиальный план, покрывающий 5000 запросов в месяц.

3. Dexi.io (ранее CloudScrape)

CloudScrape способен парсить информацию с любого веб-сайта и не требует загрузки дополнительных приложений, как и Webhose. Редактор самостоятельно устанавливает своих поисковых роботов и извлекает данные в режиме реального времени. Пользователь может сохранить собранные данные в облаке, например, Google Drive и Box.net, или экспортировать данные в форматах CSV или JSON.

CloudScrape также обеспечивает анонимный доступ к данным, предлагая ряд прокси-серверов, которые помогают скрыть идентификационные данные пользователя. CloudScrape хранит данные на своих серверах в течение 2 недель, затем их архивирует. Сервис предлагает 20 часов работы бесплатно, после чего он будет стоить 29 долларов в месяц.

4. Scrapinghub

Scrapinghub – это облачный инструмент парсинга данных, который помогает выбирать и собирать необходимые данные для любых целей. Scrapinghub использует Crawlera, умный прокси-ротатор, оснащенный механизмами, способными обходить защиты от ботов. Сервис способен справляться с огромными по объему информации и защищенными от роботов сайтами.

Scrapinghub преобразовывает веб-страницы в организованный контент. Команда специалистов обеспечивает индивидуальный подход к клиентам и обещает разработать решение для любого уникального случая. Базовый бесплатный пакет дает доступ к одному поисковому роботу (обработка до 1 Гб данных, далее — 9$ в месяц), премиальный пакет дает четырех параллельных поисковых ботов.

5. ParseHub

ParseHub может парсить один или много сайтов с поддержкой JavaScript, AJAX, сеансов, cookie и редиректов. Приложение использует технологию самообучения и способно распознать самые сложные документы в сети, затем генерирует выходной файл в том формате, который нужен пользователю.

ParseHub существует отдельно от веб-приложения в качестве программы рабочего стола для Windows, Mac OS X и Linux. Программа дает бесплатно пять пробных поисковых проектов. Тарифный план Премиум за 89 долларов предполагает 20 проектов и обработку 10 тысяч веб-страниц за проект.

6. VisualScraper

VisualScraper – это еще одно ПО для парсинга больших объемов информации из сети. VisualScraper извлекает данные с нескольких веб-страниц и синтезирует результаты в режиме реального времени. Кроме того, данные можно экспортировать в форматы CSV, XML, JSON и SQL.

Пользоваться и управлять веб-данными помогает простой интерфейс типа point and click. VisualScraper предлагает пакет с обработкой более 100 тысяч страниц с минимальной стоимостью 49 долларов в месяц. Есть бесплатное приложение, похожее на Parsehub, доступное для Windows с возможностью использования дополнительных платных функций.

7. Spinn3r

Spinn3r позволяет парсить данные из блогов, новостных лент, новостных каналов RSS и Atom, социальных сетей. Spinn3r имеет «обновляемый» API, который делает 95 процентов работы по индексации. Это предполагает усовершенствованную защиту от спама и повышенный уровень безопасности данных.

Spinn3r индексирует контент, как Google, и сохраняет извлеченные данные в файлах формата JSON. Инструмент постоянно сканирует сеть и находит обновления нужной информации из множества источников, пользователь всегда имеет обновляемую в реальном времени информацию. Консоль администрирования позволяет управлять процессом исследования; имеется полнотекстовый поиск.

8. 80legs

80legs – это мощный и гибкий веб-инструмент парсинга сайтов, который можно очень точно подстроить под потребности пользователя. Сервис справляется с поразительно огромными объемами данных и имеет функцию немедленного извлечения. Клиентами 80legs являются такие гиганты как MailChimp и PayPal.

Опция «Datafiniti» позволяет находить данные сверх-быстро. Благодаря ней, 80legs обеспечивает высокоэффективную поисковую сеть, которая выбирает необходимые данные за считанные секунды. Сервис предлагает бесплатный пакет – 10 тысяч ссылок за сессию, который можно обновить до пакета INTRO за 29 долларов в месяц – 100 тысяч URL за сессию.

9. Scraper

Scraper – это расширение для Chrome с ограниченными функциями парсинга данных, но оно полезно для онлайновых исследований и экспортирования данных в Google Spreadsheets. Этот инструмент предназначен и для новичков, и для экспертов, которые могут легко скопировать данные в буфер обмена или хранилище в виде электронных таблиц, используя OAuth.

Scraper – бесплатный инструмент, который работает прямо в браузере и автоматически генерирует XPaths для определения URL, которые нужно проверить. Сервис достаточно прост, в нем нет полной автоматизации или поисковых ботов, как у Import или Webhose, но это можно рассматривать как преимущество для новичков, поскольку его не придется долго настраивать, чтобы получить нужный результат.

10. OutWit Hub

OutWit Hub – это дополнение Firefox с десятками функций извлечения данных. Этот инструмент может автоматически просматривать страницы и хранить извлеченную информацию в подходящем для пользователя формате. OutWit Hub предлагает простой интерфейс для извлечения малых или больших объемов данных по необходимости.

OutWit позволяет «вытягивать» любые веб-страницы прямо из браузера и даже создавать в панели настроек автоматические агенты для извлечения данных и сохранения их в нужном формате. Это один из самых простых бесплатных веб-инструментов по сбору данных, не требующих специальных знаний в написании кодов.

Самое главное — правомерность парсинга?!

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

В соответствии с действующим в Российской Федерации законодательством разрешено всё, что не запрещено законодательством. Парсинг является законным, в том случае, если при его осуществлении не происходит нарушений установленных законодательством запретов. Таким образом, при автоматизированном сборе информации необходимо соблюдать действующее законодательство. Законодательством Российской Федерации установлены следующие ограничения, имеющие отношение к сети интернет:

1. Не допускается нарушение Авторских и смежных прав.
2. Не допускается неправомерный доступ к охраняемой законом компьютерной информации.
3. Не допускается сбор сведений, составляющих коммерческую тайну, незаконным способом.
4. Не допускается заведомо недобросовестное осуществление гражданских прав (злоупотребление правом).
5. Не допускается использование гражданских прав в целях ограничения конкуренции.
Из вышеуказанных запретов следует, что организация вправе осуществлять автоматизированный сбор информации, размещенной в открытом доступе на сайтах в сети интернет если соблюдаются следующие условия:
1. Информация находится в открытом доступе и не защищается законодательством об авторских и смежных правах.
2. Автоматизированный сбор осуществляется законными способами.
3. Автоматизированный сбор информации не приводит к нарушению в работе сайтов в сети интернет.
4. Автоматизированный сбор информации не приводит к ограничению конкуренции.
При соблюдении установленных ограничений Парсинг является законным.

p.s. по правовому вопросу мы подготовили отдельную статью, где рассматривается Российский и зарубежный опыт.

Какой инструмент для извлечения данных Вам нравится больше всего? Какого рода данные вы хотели бы собрать? Расскажите в комментариях о своем опыте парсинга и свое видение процесса…

30 бесплатных программ для парсинга сайтов в 2020 году — Сервисы на vc.ru

Моя компания занимается парсингом сайтов в России уже более трёх лет, ежедневно мы парсим более 500 крупнейших интернет-магазинов в России. На выходе мы, как правило, отдаем данные в формате Excel/CSV. Но существуют и другие решения — готовые сервисы (конструкторы) для запуска парсинга практически без программирования. Ниже их список, краткая аннотация и рейтинг к каждому.

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

Программное обеспечение для парсинга веб-страниц используется большинством компаний, занимаются они маркетингом, исследованиями или анализом данных. Парсинг полезен для сравнения продуктов и цен, поиска отзывов о товарах ваших конкурентов, поиска информации для размещения на вашем сайте или извлечения огромных объемов данных с веб-сайтов для проведения соответствующих маркетинговых исследований и так далее.

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

1. Mozenda

Mozenda помогает компаниям в сборе и организации данных наиболее экономичным и эффективным способом. Компания предлагает облачную архитектуру, которая обеспечивает масштабируемость, простоту использования и быстрое развертывание.

Внедрить Mozenda можно довольно быстро, к тому же развернуть это ПО можно за считанные минуты на уровне бизнес-подразделения без какого-либо участия ИТ-отдела. Его простой point-and-click интерфейс помогает пользователям создавать проекты и быстро экспортировать результаты, самостоятельно или по расписанию.

Благодаря простоте интеграции пользователи могут публиковать полученные результаты в формате CSV, TSV, XML или JSON.

  • Лучшая функция: безопасная облачная среда.
  • Сайт: mozenda.com.
  • Минусы: крутая кривая обучения.
  • Рейтинг Capterra: 4,5/5.
  • Рейтинг G2 Crowd: 4/5.
  • Рейтинг TrustRadius: 9,5/10.
  • Награды: один из «200 лучших программных продуктов для бизнес-аналитики» от FinancesOnline.

Что говорят пользователи (упоминания в социальных сетях): «Мне понравилось, как быстро можно настроить программу и собрать данные с сайтов. Я мог бы начать новый проект, задать параметры и начать собирать данные за несколько часов. Данные почти всегда собираются в правильном формате, без каких-либо пробелов. Инструмент прост в использовании и ограничен только тарифным планом».

2. Automation Anywhere

Компания Automation Anywhere состоит из группы экспертов, которые сосредоточены на предоставлении полностью понимаемых и гибких процессов создания ботов, предназначенных для автоматизации задач.

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

Drupal: Модуль Parser — парсинг сайтов

Описание

Модуль Parser предназначен для парсинга любых html страниц в сущности (ноды, термины, юзеры и т.д.). Собственно на этом описание модуля можно закончить =)

Принцип работы парсера похож на работу поисковиков — он загружает одну из страниц сайта, ищет на ней ссылки и начинает ходить по ним в глубь. Встретив страницу, которая попадает под условие "распарсить эту страницу", модуль создает объект сущности и начинает выполнять пользовательский php код, заполняя поля и свойства. Картинки выкачиваются на сервер, создаются отсутствующие термины, значения приводятся к нужному типу.

Использование

Сразу хочу предупредить, что без знаний php работать с модулем будет крайне затруднительно.

Задания парсера находятся по адресу admin/structure/parser_jobs. По умолчанию там есть только одно — Парсинг шаблонов с drupal.org, которое можно использовать как мануал.

Как начать парсить сайт:

  1. Создаём задание admin/structure/parser_jobs/add.
  2. В поле Стартовый URL указываем начальный адрес. С него парсер начнёт работу.
  3. В поле URL тестовой страницы указываем адрес любой страницы, которая в будущем будет распарсена в ноду. HTML код этой страницы будет использован в качестве полигона.
  4. В поле Глубина указываем глубину, до которой парсер будет шагать по найденным ссылкам (простыми словами, глубина — это количество кликов, которые надо сделать относительно страницы указанной в Стартовый URL, чтобы добраться до страницы с контентом).
  5. Заполняем белый и чёрный список адресов.
  6. В поле Код проверки для дальнейшего парсинга страницы пишем код, который должен вернуть TRUE, если текущая страница попадает под условие "распарсить страницу в ноду".
  7. Указываем тип сущности, которая будут создаваться модулем.
  8. Для каждого поля пишем php код, возвращающий значение поля. В коде можно использовать весь функционал библиотеки phpQuery, парсинг с которой превращается в удовольствие 🙂 С помощью кнопок "проверить" смотрим результат работы кода.
  9. Делаем полный бэкап базы и файлов! При неправильной конфигурации модуль может насоздавать много лишних нод.
  10. Начинаем парсинг.

Модуль запоминает адреса и идентификаторы нод, созданные из этих адресов. При повторном парсинге, модуль лишь обновляет уже существующие ноды.

Скриншот 1
Скриншот 2
Скриншот 3

— Скачать модуль
— Пример парсинга сайта drupalsn.ru

Написанное актуально для Parser 7.x-2.x Похожие записи

Parser. Практическое применение / Хабр

Прямо перед новым годом некто Лебедев сообщил в новостях Студии о том, что вышла новая версия Parser. Сразу после этого некто fuksitofuksito запостил тему «Объектно-ориентированный язык от „Студии Артемия Лебедева“». Тема вызвала бурную дискуссию: кто-то просто высказывался, кто-то умудрился опустить ближнего своего ниже плинтуса, кто-то… В общем атмосфера накалилась по самое нехочу.

Так вот, чтобы не говорить что-то типа «Прочитал новость. Прочитал комменты. 160 страниц руководства. Пришёл к выводу -> Дерьмо полное», я откинулся в кресле, поёрзал недвижимостью так, чтобы найти наиболее удобное положение для долгого сидения и принялся вчитываться в документацию Парсера.

Мой вердикт? (Зал замер в ожидании.) Всё просто — я нашёл для себя практическое применение этого замечательного шаблонизатора, как его уже успели окрестить.

Практическое применение

Пару месяцев назад мой товарищ рассказал мне про партнёрку Геймбосс (ссылок умышленно не ставлю), а я человек азартный на всякие изобретения, и всё это время меня мучило желание сделать с ней что-то эдакое. Чем-то эдаким оказалось желание настроить дёргалку партнёрского XML, чтобы генерить из него статичный HTML. Сделать это на PHP, как два байта переслать, но не нравилось мне то, что вся структура файлов, при этом, будет генерится на лету и даже тупо поставить счётчик на страницы — гемор ещё тот. Думаю, вы уже поняли, к чему я клоню 🙂

Шаг первый
Написал небольшой скрипт на PHP, который дёргает XML с каталогом игр и складывает нужные кусочки в нужные HTML-файлы. Скрипт именно на PHP, потому что в нём я соображаю куда больше, чем в Парсере.

Шаг второй
Установил Парсер на самый обычный хостинг. К слову сказать, если бы мой интернет-провайдер не глючил (привет, Новотелеком!), и я бы лучше соображал в установке чего бы там ни было на сервер — установка заняла бы минут 10.

Шаг третий
Залил на сервер нужные для работы сайта файлы и сам скрипт дёргалки XML.

Шаг четвёртый
Запустил скрипт и по результатам его работы кое-что подкорректировал. Да, пришлось, потому что на локальном сервере стоит Виндоус, а на боевом Линукс.

Шаг пятый
В двух местах — файл auto.p для главной страницы и для страниц игр — настроил оформление сайта. Парсером собирается шапка, меню, тело, и подвал страницы.

Итог

Получил то, что хотел: статичный HTML с возможностью оперативного внесения изменений в оформление страниц. Посмотреть работающий сайт? Пожалуйста, play.likegroof.ru.

Уверен, что дёргалку можно и на Парсере написать, но так глубоко я нырять не стал. Да и зачем? Необходимый для моей задачи набор знаний я получил и сделал то, что хотел, использовав две разных технологии. Я счастлив 🙂

Литературный бонус!

Чему-нибудь да научила
Детей своих природа мать.
Кто ничего создать не может,
Умеет тот критиковать.

Игорь Губерман, «Гарики»

32,1. parser - Доступ к деревьям синтаксического анализа Python - документация Python 2.7.18

Модуль синтаксического анализа предоставляет интерфейс для внутреннего синтаксического анализатора Python и компилятор байт-кода. Основная цель этого интерфейса - позволить Python код для редактирования дерева синтаксического анализа выражения Python и создания исполняемого кода из этого. Это лучше, чем пытаться разобрать и изменить произвольный Python. фрагмент кода в виде строки, поскольку синтаксический анализ выполняется аналогично код, образующий приложение.Это также быстрее.

Примечание

Начиная с Python 2.5, гораздо удобнее переходить к реферату Этап генерации и компиляции синтаксического дерева (AST) с использованием ast модуль.

Модуль синтаксического анализа экспортирует имена, задокументированные здесь, также с «st» заменено на «аст»; это наследие тех времен, когда не было другого AST и не имеет ничего общего с AST из Python 2.5. Это тоже причина того, что аргументы ключевого слова функций называются ast , а не st .Функции «ast» были удалены в Python 3.

Следует отметить несколько важных моментов, связанных с этим модулем. использование созданных структур данных. Это не руководство по редактированию синтаксического анализа деревья для кода Python, но некоторые примеры использования модуля парсера : представлены.

Самое главное, хорошее понимание грамматики Python, обрабатываемой требуется внутренний парсер. Для получения полной информации о синтаксисе языка см. к Справочнику по языку Python.Парсер сам создается на основе грамматической спецификации, определенной в файле Грамматика / Грамматика в стандартном дистрибутиве Python. Деревья разбора хранящиеся в объектах ST, созданных этим модулем, являются фактическим выходом из внутренний парсер при создании функциями expr () или suite () , описано ниже. Объекты ST, созданные sequence2st () , точно моделируйте эти структуры. Имейте в виду, что значения последовательностей, которые считается «правильным», будет варьироваться от одной версии Python к другой, поскольку переработана формальная грамматика языка.Однако перенос кода из одного Версия Python для другой в качестве исходного текста всегда будет позволять правильные деревья синтаксического анализа должен быть создан в целевой версии, с единственным ограничением: переход на более старую версию интерпретатора не будет поддерживать более свежие языковые конструкции. Деревья синтаксического анализа обычно несовместимы с одним версия к другой, тогда как исходный код всегда был совместим с продвижением вперед.

Каждый элемент последовательностей, возвращаемых функцией st2list () или st2tuple () имеет простую форму.Последовательности, представляющие нетерминальные элементы грамматики всегда иметь длину больше единицы. Первый элемент - это целое число, которое идентифицирует продукцию в грамматике. Этим целым числам даны символические имена. в заголовочном файле C Include / graminit.h и модуле Python символ . Каждый дополнительный элемент последовательности представляет собой компонент продукции, как распознано во входной строке: это всегда последовательности которые имеют ту же форму, что и родитель.Важный аспект этой структуры Следует отметить, что ключевые слова, используемые для идентификации типа родительского узла, такие как ключевое слово , если в if_stmt , включены в дерево узлов без какой-либо специальной обработки. Например, , если ключевое слово представлен кортежем (1, 'if') , где 1 - числовое значение связаны со всеми токенами NAME , включая имена переменных и функций определяется пользователем. В альтернативной форме возвращается, когда информация о номере строки запрашивается, тот же токен может быть представлен как (1, 'if', 12) , где 12 представляет собой номер строки, в которой был найден символ терминала.

Терминальные элементы представлены примерно так же, но без дочерних элементов. элементы и добавление исходного текста, который был идентифицирован. Пример из , если ключевое слово выше репрезентативно. Различные типы символы терминала определены в файле заголовка C Include / token.h и токен модуля Python .

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

Модуль синтаксического анализатора определяет функции для нескольких различных целей. В наиболее важными целями являются создание объектов ST и преобразование объектов ST в другие представления, такие как деревья синтаксического анализа и объекты скомпилированного кода, но есть также являются функциями, которые служат для запроса типа дерева синтаксического анализа, представленного СТ объект.

См. Также

Модуль символ

Полезные константы, представляющие внутренние узлы дерева синтаксического анализа.

Модуль токен

Полезные константы, представляющие конечные узлы дерева синтаксического анализа и функции для значения узлов тестирования.

32.1.1. Создание объектов ST

объектов ST могут быть созданы из исходного кода или из дерева синтаксического анализа. При создании объект ST из источника, различные функции используются для создания 'eval' и 'exec' форм.

парсер. expr ( источник )

Функция expr () анализирует параметр source , как если бы это был вход для компиляции (источник, 'файл.py ',' eval ') . Если синтаксический анализ успешен, объект ST создается для хранения внутреннего представления дерева синтаксического анализа, в противном случае возникает соответствующее исключение.

парсер. люкс ( источник )

Функция suite () анализирует параметр source , как если бы это был вход до компиляция (исходный код, 'file.py', 'exec') . Если синтаксический анализ успешен, объект ST создается для хранения внутреннего представления дерева синтаксического анализа, в противном случае возникает соответствующее исключение.

парсер. последовательность 2-я ( последовательность )

Эта функция принимает дерево синтаксического анализа, представленное как последовательность, и строит внутреннее представительство, если возможно. Если он может подтвердить, что дерево соответствует к грамматике Python, и все узлы являются допустимыми типами узлов в версии узла Python, объект ST создается из внутреннего представления и возвращается к вызываемому. Если есть проблема с созданием внутреннего представления, или если дерево не может быть проверено, возникает исключение ParserError .An Не следует предполагать, что объект ST, созданный таким образом, правильно компилируется; нормальный исключения, вызванные компиляцией, могут все еще инициироваться, когда объект ST передано в compilest () . Это может указывать на проблемы, не связанные с синтаксисом (например, исключение MemoryError ), но также может быть связано с такими конструкциями в результате синтаксического анализа del f (0) , который ускользает от синтаксического анализатора Python, но является проверяется компилятором байт-кода.

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

парсер. tuple2st (последовательность )

Это та же функция, что и sequence2st () . Эта точка входа поддерживается для обратной совместимости.

32.1.2. Преобразование объектов ST

.Парсер

- доступ к деревьям синтаксического анализа Python - документация Python 3.8.5


Модуль синтаксического анализа предоставляет интерфейс для внутреннего анализатора Python и компилятор байт-кода. Основная цель этого интерфейса - позволить Python код для редактирования дерева синтаксического анализа выражения Python и создания исполняемого кода из этого. Это лучше, чем пытаться разобрать и изменить произвольный Python. фрагмент кода в виде строки, поскольку синтаксический анализ выполняется аналогично код, образующий приложение.Это также быстрее.

Примечание

Начиная с Python 2.5, гораздо удобнее переходить к реферату Этап генерации и компиляции синтаксического дерева (AST) с использованием ast модуль.

Следует отметить несколько важных моментов, связанных с этим модулем. использование созданных структур данных. Это не руководство по редактированию синтаксического анализа деревья для кода Python, но некоторые примеры использования модуля парсера : представлены.

Самое главное, хорошее понимание грамматики Python, обрабатываемой требуется внутренний парсер.Для получения полной информации о синтаксисе языка см. к Справочнику по языку Python. Парсер сам создается на основе грамматической спецификации, определенной в файле Грамматика / Грамматика в стандартном дистрибутиве Python. Деревья разбора хранящиеся в объектах ST, созданных этим модулем, являются фактическим выходом из внутренний парсер при создании функциями expr () или suite () , описано ниже. Объекты ST, созданные sequence2st () , точно моделируйте эти структуры.Имейте в виду, что значения последовательностей, которые считается «правильным», будет варьироваться от одной версии Python к другой, поскольку переработана формальная грамматика языка. Однако перенос кода из одного Версия Python для другой в качестве исходного текста всегда будет позволять правильные деревья синтаксического анализа должен быть создан в целевой версии, с единственным ограничением: переход на более старую версию интерпретатора не будет поддерживать более свежие языковые конструкции. Деревья синтаксического анализа обычно несовместимы с одним версия к другой, хотя исходный код обычно был совместим с основная серия релизов.

Каждый элемент последовательностей, возвращаемых функцией st2list () или st2tuple () имеет простую форму. Последовательности, представляющие нетерминальные элементы грамматики всегда иметь длину больше единицы. Первый элемент - это целое число, которое идентифицирует продукцию в грамматике. Этим целым числам даны символические имена. в заголовочном файле C Include / graminit.h и модуле Python символ . Каждый дополнительный элемент последовательности представляет собой компонент продукции, как распознано во входной строке: это всегда последовательности которые имеют ту же форму, что и родитель.Важный аспект этой структуры Следует отметить, что ключевые слова, используемые для идентификации типа родительского узла, такие как ключевое слово , если в if_stmt , включены в дерево узлов без какой-либо специальной обработки. Например, , если ключевое слово представлен кортежем (1, 'if') , где 1 - числовое значение связаны со всеми токенами NAME , включая имена переменных и функций определяется пользователем. В альтернативной форме возвращается, когда информация о номере строки запрашивается, тот же токен может быть представлен как (1, 'if', 12) , где 12 представляет собой номер строки, в которой был найден символ терминала.

Терминальные элементы представлены примерно так же, но без дочерних элементов. элементы и добавление исходного текста, который был идентифицирован. Пример из , если ключевое слово выше репрезентативно. Различные типы символы терминала определены в файле заголовка C Include / token.h и модуль Python , токен .

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

Модуль синтаксического анализатора определяет функции для нескольких различных целей. В наиболее важными целями являются создание объектов ST и преобразование объектов ST в другие представления, такие как деревья синтаксического анализа и объекты скомпилированного кода, но есть также являются функциями, которые служат для запроса типа дерева синтаксического анализа, представленного СТ объект.

См. Также

Модуль символ

Полезные константы, представляющие внутренние узлы дерева синтаксического анализа.

Модуль токен

Полезные константы, представляющие конечные узлы дерева синтаксического анализа и функции для значения узлов тестирования.

Создание объектов ST

Объекты

ST могут быть созданы из исходного кода или из дерева синтаксического анализа. При создании объект ST из источника, различные функции используются для создания 'eval' и 'exec' форм.

парсер. expr ( источник )

Функция expr () анализирует параметр source , как если бы это был вход для компиляции (исходный код, 'file.py ',' eval ') . Если синтаксический анализ успешен, объект ST создается для хранения внутреннего представления дерева синтаксического анализа, в противном случае возникает соответствующее исключение.

парсер. люкс ( источник )

Функция suite () анализирует параметр source , как если бы это был вход до компиляция (исходный код, 'file.py', 'exec') . Если синтаксический анализ успешен, объект ST создается для хранения внутреннего представления дерева синтаксического анализа, в противном случае возникает соответствующее исключение.

парсер. последовательность 2-я ( последовательность )

Эта функция принимает дерево синтаксического анализа, представленное как последовательность, и строит внутреннее представительство, если возможно. Если он может подтвердить, что дерево соответствует к грамматике Python, и все узлы являются допустимыми типами узлов в версии узла Python, объект ST создается из внутреннего представления и возвращается к вызываемому. Если есть проблема с созданием внутреннего представления, или если дерево не может быть проверено, возникает исключение ParserError .An Не следует предполагать, что объект ST, созданный таким образом, правильно компилируется; нормальный исключения, вызванные компиляцией, могут все еще инициироваться, когда объект ST передано в compilest () . Это может указывать на проблемы, не связанные с синтаксисом (например, исключение MemoryError ), но также может быть вызвано такими конструкциями в результате синтаксического анализа del f (0) , который ускользает от синтаксического анализатора Python, но является проверяется компилятором байт-кода.

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

парсер. tuple2st ( последовательность )

Это та же функция, что и sequence2st () . Эта точка входа поддерживается для обратной совместимости.

Преобразование объектов ST

объектов ST, независимо от входных данных, используемых для их создания, могут быть преобразованы в деревья синтаксического анализа, представленные в виде деревьев списков или кортежей, или могут быть скомпилированы в объекты исполняемого кода.Дерево синтаксического анализа может быть извлечено с линией или без нее информация о нумерации.

парсер. st2list ( st , line_info = False ,
.

30,1. parser - Доступ к деревьям синтаксического анализа Python - документация Python v3.1.5

Модуль синтаксического анализатора предоставляет интерфейс для внутреннего анализатора Python и компилятор байт-кода. Основная цель этого интерфейса - позволить Python код для редактирования дерева синтаксического анализа выражения Python и создания исполняемого кода из этого. Это лучше, чем пытаться разобрать и изменить произвольный Python. фрагмент кода в виде строки, поскольку синтаксический анализ выполняется аналогично код, образующий приложение.Это также быстрее.

Примечание

Начиная с Python 2.5, гораздо удобнее переходить к реферату Этап генерации и компиляции синтаксического дерева (AST) с использованием ast модуль.

Следует отметить несколько важных моментов, связанных с этим модулем. использование созданных структур данных. Это не руководство по редактированию синтаксического анализа деревья для кода Python, но некоторые примеры использования модуля парсера представлены.

Самое главное, хорошее понимание грамматики Python, обрабатываемой требуется внутренний парсер.Для получения полной информации о синтаксисе языка см. to Справочник по языку Python . Парсер сам создается на основе грамматической спецификации, определенной в файле Грамматика / Грамматика в стандартном дистрибутиве Python. Деревья разбора хранящиеся в объектах ST, созданных этим модулем, являются фактическим выходом из внутренний парсер при создании функциями expr () или suite (), описано ниже. Объекты ST, созданные с помощью sequence2st (), добросовестно моделируйте эти структуры. Имейте в виду, что значения последовательностей, которые считается «правильным», будет варьироваться от одной версии Python к другой, поскольку переработана формальная грамматика языка.Однако перенос кода из одного Версия Python для другой в качестве исходного текста всегда будет позволять правильные деревья синтаксического анализа должен быть создан в целевой версии, с единственным ограничением: переход на более старую версию интерпретатора не будет поддерживать более свежие языковые конструкции. Деревья синтаксического анализа обычно несовместимы с одним версия к другой, тогда как исходный код всегда был совместим с продвижением вперед.

Каждый элемент последовательностей, возвращаемых st2list () или st2tuple () имеет простую форму.Последовательности, представляющие нетерминальные элементы грамматики всегда иметь длину больше единицы. Первый элемент - это целое число, которое идентифицирует продукцию в грамматике. Этим целым числам даны символические имена. в заголовочном файле C Include / graminit.h и модуле Python условное обозначение. Каждый дополнительный элемент последовательности представляет собой компонент продукции, как распознано во входной строке: это всегда последовательности которые имеют ту же форму, что и родитель. Важный аспект этой структуры Следует отметить, что ключевые слова, используемые для идентификации типа родительского узла, такие как ключевое слово if в if_stmt, включены в дерево узлов без какой-либо специальной обработки.Например, ключевое слово if представлен кортежем (1, 'if'), где 1 - числовое значение связаны со всеми токенами NAME, включая имена переменных и функций определяется пользователем. В альтернативной форме возвращается, когда информация о номере строки запрашивается, тот же токен может быть представлен как (1, 'if', 12), где 12 представляет номер строки, в которой был найден символ терминала.

Терминальные элементы представлены примерно так же, но без дочерних элементов. элементы и добавление исходного текста, который был идентифицирован.Пример ключевого слова if выше является репрезентативным. Различные типы терминальные символы определены в заголовочном файле C Include / token.h и токен модуля Python.

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

Модуль синтаксического анализатора определяет функции для нескольких различных целей. В наиболее важными целями являются создание объектов ST и преобразование объектов ST в другие представления, такие как деревья синтаксического анализа и объекты скомпилированного кода, но есть также являются функциями, которые служат для запроса типа дерева синтаксического анализа, представленного СТ объект.

См. Также

Обозначение модуля
Полезные константы, представляющие внутренние узлы дерева синтаксического анализа.
Токен модуля
Полезные константы, представляющие листовые узлы дерева синтаксического анализа и функции для значения узлов тестирования.

30.1.1. Создание объектов ST

объектов ST могут быть созданы из исходного кода или из дерева синтаксического анализа. При создании объект ST из источника, различные функции используются для создания 'eval' и формы exec.

parser.expr ( исходный код )
Функция expr () анализирует параметр source , как если бы это был вход для компиляции (источник, 'файл.py ',' eval '). Если синтаксический анализ успешен, объект ST создается для хранения внутреннего представления дерева синтаксического анализа, в противном случае возникает соответствующее исключение.
parser.suite ( исходный код )
Функция suite () анализирует параметр source , как если бы это был вход для компиляции (источник, 'file.py', 'exec'). Если синтаксический анализ успешен, объект ST создается для хранения внутреннего представления дерева синтаксического анализа, в противном случае возникает соответствующее исключение.
parser.sequence2st ( последовательность )

Эта функция принимает дерево синтаксического анализа, представленное как последовательность, и строит внутреннее представительство, если возможно. Если он может подтвердить, что дерево соответствует к грамматике Python, и все узлы являются допустимыми типами узлов в версии узла Python, объект ST создается из внутреннего представления и возвращается к вызываемому. Если есть проблема с созданием внутреннего представления, или если дерево не может быть проверено, возникает исключение ParserError.An Не следует предполагать, что объект ST, созданный таким образом, правильно компилируется; нормальный исключения, вызванные компиляцией, могут все еще инициироваться, когда объект ST передается в compilest (). Это может указывать на проблемы, не связанные с синтаксисом (например, исключение MemoryError), но также может быть вызвано такими конструкциями в результате синтаксического анализа del f (0), который избегает синтаксического анализа Python, но является проверяется компилятором байт-кода.

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

parser.tuple2st ( последовательность )
Это та же функция, что и sequence2st (). Эта точка входа поддерживается для обратной совместимости.

30.1.2. Преобразование объектов ST

объектов ST, независимо от входных данных, используемых для их создания, могут быть преобразованы в деревья синтаксического анализа, представленные в виде деревьев списков или кортежей, или могут быть скомпилированы в объекты исполняемого кода.Дерево синтаксического анализа может быть извлечено с линией или без нее информация о нумерации.

parser.st2list ( st [, line_info ])

Эта функция принимает объект ST от вызывающей стороны в st и возвращает Список Python, представляющий эквивалентное дерево синтаксического анализа. Результирующий список представление может использоваться для проверки или создания нового дерева синтаксического анализа в форма списка. Эта функция не дает сбоев, пока доступна память для сборки. представление списка.Если дерево синтаксического анализа будет использоваться только для проверки, Вместо этого следует использовать st2tuple (), чтобы уменьшить потребление памяти и фрагментация. Когда требуется представление списка, эта функция значительно быстрее, чем получение представления кортежа и преобразование этого во вложенные списки.

Если line_info истинно, информация о номере строки будет включена для всех токены терминала как третий элемент списка, представляющего токен. Заметка что предоставленный номер строки указывает строку, на которой маркер заканчивается .Эта информация опускается, если флаг ложный или опущен.

parser.st2tuple ( st [, line_info ])

Эта функция принимает объект ST от вызывающей стороны в st и возвращает Кортеж Python, представляющий эквивалентное дерево синтаксического анализа. Помимо возврата tuple вместо списка, эта функция идентична st2list ().

Если line_info истинно, информация о номере строки будет включена для всех токены терминала как третий элемент списка, представляющего токен.это информация опускается, если флаг ложный или опущен.

parser.compilest ( st [, filename = '' ])

Компилятор байтов Python может быть вызван для объекта ST для создания объектов кода который можно использовать как часть звонка на встроенный

.Парсер

- доступ к деревьям синтаксического анализа Python - документация Python v3.0.1

Модуль синтаксического анализатора предоставляет интерфейс для внутреннего анализатора Python и компилятор байт-кода. Основная цель этого интерфейса - позволить Python код для редактирования дерева синтаксического анализа выражения Python и создания исполняемого кода из этого. Это лучше, чем пытаться разобрать и изменить произвольный Python. фрагмент кода в виде строки, поскольку синтаксический анализ выполняется аналогично код, образующий приложение.Это также быстрее.

Примечание

Начиная с Python 2.5, гораздо удобнее переходить к реферату Этап генерации и компиляции синтаксического дерева (AST) с использованием ast модуль.

Следует отметить несколько важных моментов, связанных с этим модулем. использование созданных структур данных. Это не руководство по редактированию синтаксического анализа деревья для кода Python, но некоторые примеры использования модуля парсера представлены.

Самое главное, хорошее понимание грамматики Python, обрабатываемой требуется внутренний парсер.Для получения полной информации о синтаксисе языка см. to Справочник по языку Python . Парсер сам создается на основе грамматической спецификации, определенной в файле Грамматика / Грамматика в стандартном дистрибутиве Python. Деревья разбора хранящиеся в объектах ST, созданных этим модулем, являются фактическим выходом из внутренний парсер при создании функциями expr () или suite (), описано ниже. Объекты ST, созданные с помощью sequence2st (), добросовестно моделируйте эти структуры. Имейте в виду, что значения последовательностей, которые считается «правильным», будет варьироваться от одной версии Python к другой, поскольку переработана формальная грамматика языка.Однако перенос кода из одного Версия Python для другой в качестве исходного текста всегда будет позволять правильные деревья синтаксического анализа должен быть создан в целевой версии, с единственным ограничением: переход на более старую версию интерпретатора не будет поддерживать более свежие языковые конструкции. Деревья синтаксического анализа обычно несовместимы с одним версия к другой, тогда как исходный код всегда был совместим с продвижением вперед.

Каждый элемент последовательностей, возвращаемых st2list () или st2tuple () имеет простую форму.Последовательности, представляющие нетерминальные элементы грамматики всегда иметь длину больше единицы. Первый элемент - это целое число, которое идентифицирует продукцию в грамматике. Этим целым числам даны символические имена. в заголовочном файле C Include / graminit.h и модуле Python условное обозначение. Каждый дополнительный элемент последовательности представляет собой компонент продукции, как распознано во входной строке: это всегда последовательности которые имеют ту же форму, что и родитель. Важный аспект этой структуры Следует отметить, что ключевые слова, используемые для идентификации типа родительского узла, такие как ключевое слово if в if_stmt, включены в дерево узлов без какой-либо специальной обработки.Например, ключевое слово if представлен кортежем (1, 'if'), где 1 - числовое значение связаны со всеми токенами NAME, включая имена переменных и функций определяется пользователем. В альтернативной форме возвращается, когда информация о номере строки запрашивается, тот же токен может быть представлен как (1, 'if', 12), где 12 представляет номер строки, в которой был найден символ терминала.

Терминальные элементы представлены примерно так же, но без дочерних элементов. элементы и добавление исходного текста, который был идентифицирован.Пример ключевого слова if выше является репрезентативным. Различные типы терминальные символы определены в заголовочном файле C Include / token.h и токен модуля Python.

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

Модуль синтаксического анализатора определяет функции для нескольких различных целей. В наиболее важными целями являются создание объектов ST и преобразование объектов ST в другие представления, такие как деревья синтаксического анализа и объекты скомпилированного кода, но есть также являются функциями, которые служат для запроса типа дерева синтаксического анализа, представленного СТ объект.

См. Также

Обозначение модуля
Полезные константы, представляющие внутренние узлы дерева синтаксического анализа.
Токен модуля
Полезные константы, представляющие листовые узлы дерева синтаксического анализа и функции для значения узлов тестирования.

Создание объектов ST

объектов ST могут быть созданы из исходного кода или из дерева синтаксического анализа. При создании объект ST из источника, различные функции используются для создания 'eval' и формы exec.

parser.expr ( исходный код )
Функция expr () анализирует параметр source , как если бы это был вход для компиляции (источник, 'файл.py ',' eval '). Если синтаксический анализ успешен, объект ST создается для хранения внутреннего представления дерева синтаксического анализа, в противном случае выбрасывается соответствующее исключение.
parser.suite ( исходный код )
Функция suite () анализирует параметр source , как если бы это был вход для компиляции (источник, 'file.py', 'exec'). Если синтаксический анализ успешен, объект ST создается для хранения внутреннего представления дерева синтаксического анализа, в противном случае выбрасывается соответствующее исключение.
parser.sequence2st ( последовательность )

Эта функция принимает дерево синтаксического анализа, представленное как последовательность, и строит внутреннее представительство, если возможно. Если он может подтвердить, что дерево соответствует к грамматике Python, и все узлы являются допустимыми типами узлов в версии узла Python, объект ST создается из внутреннего представления и возвращается к вызываемому. Если есть проблема с созданием внутреннего представления, или если дерево не может быть проверено, выдается исключение ParserError.An Не следует предполагать, что объект ST, созданный таким образом, правильно компилируется; нормальный исключения, вызванные компиляцией, могут все еще инициироваться, когда объект ST передается в compilest (). Это может указывать на проблемы, не связанные с синтаксисом (например, исключение MemoryError), но также может быть вызвано такими конструкциями в результате синтаксического анализа del f (0), который избегает синтаксического анализа Python, но является проверяется компилятором байт-кода.

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

parser.tuple2st ( последовательность )
Это та же функция, что и sequence2st (). Эта точка входа поддерживается для обратной совместимости.

Преобразование объектов ST

объектов ST, независимо от входных данных, используемых для их создания, могут быть преобразованы в деревья синтаксического анализа, представленные в виде деревьев списков или кортежей, или могут быть скомпилированы в объекты исполняемого кода.Дерево синтаксического анализа может быть извлечено с линией или без нее информация о нумерации.

parser.st2list ( st [, line_info ])

Эта функция принимает объект ST от вызывающей стороны в st и возвращает Список Python, представляющий эквивалентное дерево синтаксического анализа. Результирующий список представление может использоваться для проверки или создания нового дерева синтаксического анализа в форма списка. Эта функция не дает сбоев, пока доступна память для сборки. представление списка.Если дерево синтаксического анализа будет использоваться только для проверки, Вместо этого следует использовать st2tuple (), чтобы уменьшить потребление памяти и фрагментация. Когда требуется представление списка, эта функция значительно быстрее, чем получение представления кортежа и преобразование этого во вложенные списки.

Если line_info истинно, информация о номере строки будет включена для всех токены терминала как третий элемент списка, представляющего токен. Заметка что предоставленный номер строки указывает строку, на которой маркер заканчивается .Эта информация опускается, если флаг ложный или опущен.

parser.st2tuple ( st [, line_info ])

Эта функция принимает объект ST от вызывающей стороны в st и возвращает Кортеж Python, представляющий эквивалентное дерево синтаксического анализа. Помимо возврата tuple вместо списка, эта функция идентична st2list ().

Если line_info истинно, информация о номере строки будет включена для всех токены терминала как третий элемент списка, представляющего токен.это информация опускается, если флаг ложный или опущен.

parser.compilest ( st [, filename = '' ])
.

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

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