Парсинг хаотично расположенных, написанных, отдельных характеристик

Тема в разделе "Решение различных задач по парсингу", создана пользователем rusalex, 13 май 2018.

  1. rusalex

    rusalex Active Member Пользователи

    Регистрация:
    22 мар 2018
    Сообщения:
    133
    Город:
    Kiev
    Здравствуйте форумчане, может кто- то поможет?

    Нужно спарсить характеристика товара, примерно такого формата
    • Medium rise, sits at hips
    • 12"" inseam
    • Measurements taken from a size medium
    • 100% Cotton
    • Machine wash
    Задача:
    1. Спасрить не все, только некоторые (например здесь: в Состав: 100% Cotton и в Чистка: Machine wash) в других примерах также 2-3 шт. - это я решил
    - контент заключил в повторяющуюся границы парсинга
    - с помощью макроса [CHECKENTRY(%|wash)][VALUE][/CHECKENTRY] оставил только нужные

    Проблема
    1. на сайте строки постоянно меняются, то есть нужная стока (например: 100% Cotton или Machine wash) могут быть и в первой, и третьей, и пятой, и восьмой строке и т. д., в таком же порядке они и выводятся в прайсе
    2. также и содержимое характеристик может по разному прописываться и с разными разделителями..., то есть макрос [EXTRACTATTR][NAME][/NAME][END];|,|{br}|[MARK][/END][/EXTRACTATTR] и тем более др. макросы для парсинга Характеристик у меня не работают!

    Подскажите как систематизировать и выводить в нужную строку, заданную в прайсе, например 100% Cotton из 1 или 2 или 3 или 4-й... строки сайта - выводить только в 6-ю колонку прайса, а Machine wash только в 7-ю строку?

    Применял макрос [COMBO_2] выводит, но смещается на строчку и через строку вниз, а надо чтобы на одной строке и один раз?

    Пока приходится в ручную систематизировать в EXEL, но парсить надо каждую неделю, а товаров под 3 000 и еще в каждом опций 3-12 шт, с размером и цветом, варианты которых прописываются в каждую строку отдельно, которых в итоге до 20 -24 тысяч шт. в прайсе!

    Спасибо за ответ, буду признателен!
     
    Последнее редактирование: 14 май 2018
  2. rusalex

    rusalex Active Member Пользователи

    Регистрация:
    22 мар 2018
    Сообщения:
    133
    Город:
    Kiev
    Ув. администрация и форумчане, никто не откликнится? Нужна помощь? Хотя бы напишите, что это не решаемо, чтобы не ждал?
     
  3. Root

    Root Администратор Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    Есть очередь и вы не одни.
     
    rusalex нравится это.
  4. rusalex

    rusalex Active Member Пользователи

    Регистрация:
    22 мар 2018
    Сообщения:
    133
    Город:
    Kiev
    ОК. Не подумал об этом.
     
  5. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.429
    Адрес:
    Latvia
    Отдельной границей выделить область кода где присутствуют характеристики в таком виде.
    В поиск замена добавить маркирования по совпадению, желательно через регулярные выражения.
    Далее в шаблоне вывода через макрос REPLACE выбирать из созданных маркеров значения с помощью {get}
     
    rusalex нравится это.
  6. rusalex

    rusalex Active Member Пользователи

    Регистрация:
    22 мар 2018
    Сообщения:
    133
    Город:
    Kiev
    Премного благодарен Вам за ответ, но прочитав его понимаю, что слабо владею терминологией и пониманием правильности действий ( я недавной купил программу еще не до конца освоился). Радует, что это все же возможно сделать, так как потратил на э то уже более 4-х дней!)))

    Могли бы вы скинуть какие-то примеры, для наглядности, так будет легче! Или проверить правильность моего понимания Ваших слов и моих действий?

    Примера возьму тот же.

    <ul>
    <li>Medium rise, sits at hips</li>
    <li>12"" inseam</li>
    <li>Measurements taken from a size medium</li>
    <li>100% Cotton</li>
    <li>Machine wash</li>
    </ul>

    Напомню, что 1) очередность и номера строк постоянно меняются и 2) также сам текст тоже частенько меняется!

    Мне нужно взять три значения из пяти и постоянно прописывать их в отдельную, одну и ту же колонку:
    1 колонка - 100% Cotton
    2 колонка - Machine wash
    3 колонка - 12"" inseam

    По вашей схеме!

    1. Границы парсина - я так понимаю в обычных граница (не в повторяющихся?) - это понятно

    2.
    - С этим сталкиваюсь в первый раз, прочитал шпаргалки на форуме и в справке программы и если честно очень не понимаю, но хочу понять и научиться!!))

    Правильно? (взял на основе http://forum.sbfactory.ru/threads/regexp-shpargalka-po-reguljarnym-vyrazhenijam.272/)?

    re: (%)|<cifri>$1</cifri>
    re: (wash)|<cifri>$1</cifri>
    re: (inseam)|<cifri>$1</cifri>

    Не пойму, что это дает мне? Если есть ссылка на объяснения или пример скиньте пожалуйста?

    3.
    - Здесь вообще "темный лес" !!!))

    Если я вытащу контент и маркера
    <cifri>{get}</cifri>|{multiget}, то выведет маркированные слова и символы % wash и inseam, а мне нужна вся строка??

    И как ее вставить в нужную ячейку прайса и так всегда чтобы автоматически вставлялась?
    ____________________________

    Я делал через повторяющуюся границу (установлено 10 мин и 10 мах колонок) в поиск замене

    [CHECKENTRY(wash||clean||%||inseam)][VALUE][/CHECKENTRY] но мне выводит так

    1 колонка - (пусто)
    2 колонка - 12"" inseam
    3 колонка - (пусто)
    4 колонка - 100% Cotton
    5 колонка - Machine wash

    в прайсе

    1 колонка 2 колонка 3 колонка 4 колонка 5 колонка
    (пусто) 12"" inseam (пусто) 100% Cotton Machine wash

    А нужно всегда

    1 колонка - 100% Cotton
    2 колонка - Machine wash
    3 колонка - 12"" inseam

    Тоже самое вывел с помощью поиск замена в границе

    >{get}<|[MINLENGTH:2][MAXLENGTH:100][CHECKENTRY(wash||clean||%||inseam)]{multiget}[/CHECKENTRY][/MAXLENGTH][/MINLENGTH]

    удалил переносы строк
    re:[\t\r\n]+|

    характеристики по очереди и в одну строку!1 но что дальше делать не знаю!!)))
    _____________________
    При смене в тексте все поменяется и не нашел макроса который сделает так, чтобы выводилось в одну и туже нужную колонку прайса. Может можно по моей логики парсинга получить нужный результат! С того момента можно решить проблему?

    Спасибо за ответ!
     
    Последнее редактирование: 15 май 2018
  7. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.429
    Адрес:
    Latvia
    Много надо проверять и расписывать чтоб вы получили готовый результат от всевозможных элементов каждого товара из описания.
    Без базовых знаний регулярных выражений сложно понять, привожу примеры возможно помогут понять принцип.

    1. Есть содержимое границы над которыми будут производиться замены
    Код:
    <ul>
    <li>Medium rise, sits at hips</li>
    <li>12"" inseam</li>
    <li>Measurements taken from a size medium</li>
    <li>100% Cotton</li>
    <li>Machine wash</li>
    </ul>
    2. Пробуем маркировать информацию о ткани, там есть слово Cotton
    Код:
    re:>([^<>]{2,50}) (Cotton)([^<>]{2,50})<|<mtrl>$1$2$3</mtrl>
    получится
    Код:
    ...
    <li><mtrl>100% Cotton</mtrl></li>
    ...
    3. В шаблоне вывода вывести в нужной ячейке значение из маркера mtrl, макросом замены через гет
    Код:
    [REPLACE(<mtrl>{get}</mtrl>|{get})]<CD_GRAN_5!>[/REPLACE]
    В вашей ситуации надо спарсить сначала сайт, потом в документе посмотреть какие вхождения есть чтоб иметь общую картину что и как маркировать. К примеру , стирку можно так выбрать
    Код:
    [REPLACE(<li>Machine {get}</li>|{get})]<CD_GRAN_5!>[/REPLACE]
     
    Последнее редактирование: 15 май 2018
    xLime, Root и rusalex нравится это.
  8. Root

    Root Администратор Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    Код:
    [LINEMODE][FILTERSTRINGS]вхождение для взятия строки 1{fsep}вхождение для взятия строки 2{fsep}вхождение для взятия строки 3|keep
    {break_if_nil}
    {br}{skip}|
    {br}{skip}|
    {br}{skip}|
    [LINEMODE]{get}|Что добавить в начало результата: {get}
    2018-05-15_19-28-36.png

    2018-05-15_19-35-43.png
     
    rusalex, kagorec и xLime нравится это.
  9. rusalex

    rusalex Active Member Пользователи

    Регистрация:
    22 мар 2018
    Сообщения:
    133
    Город:
    Kiev
    Супер!!! Гениально!!! Ооооооооооооооооооогромное спасибо!!! Жаль, что уезжал и раньше не увидел!!! Я только времени потратил и мозги свои так напрягал, уже и не знал что делать!!!!))) Еще раз Огромное Спасибо!!!
     
  10. rusalex

    rusalex Active Member Пользователи

    Регистрация:
    22 мар 2018
    Сообщения:
    133
    Город:
    Kiev
    Еще раз спасибо! Будьте любезны еще подскажите!

    Каким макрасом вытащить (или оставить) последнее слово в предложении (названии товара)?

    Например из названия
    BRIA COLOR-BLOCK SATCHEL оставить только SATCHEL ?

    Спасибо заранее.
     
  11. Root

    Root Администратор Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    Код:
     {textend}
    {br}{textend}
     {textend}
    {br}{textend}
     {textend}
    {br}{textend}
     {get}|{get}
     
    napserious и rusalex нравится это.
  12. rusalex

    rusalex Active Member Пользователи

    Регистрация:
    22 мар 2018
    Сообщения:
    133
    Город:
    Kiev
    Спасибо большое! Все работает, отлично. За предыдущий код еще раз хочу поблагодарить, очень много сайтов в последнее время с такими характеристиками.
     
    Root нравится это.
  13. masrub

    masrub Well-Known Member Пользователи

    Регистрация:
    29 июн 2018
    Сообщения:
    194
    Подскажите пожалуйста, как можно вывести характеристики различных товаров в следующий вид:
    Дано:
    Товар 1:
    Характеристика1
    Характеристика2
    Характеристика3

    Товар 2:
    Характеристика1
    Характеристика2

    Товар 3:
    Характеристика1
    Характеристика2
    Характеристика3
    Характеристика5

    Товар 4:
    Характеристика1
    Характеристика2
    Характеристика3
    Характеристика4
    Характеристика5

    Товар 5:
    Характеристика1
    Характеристика2
    Характеристика3
    Характеристика4
    Характеристика5
    Характеристика6

    Нужно получить:

    [​IMG]


    Т.е. у меня к примеру 1000 товаров,
    Самое большое число характеристик например будет 10, мы добавляем 10 столбцов и в последний 11 выводим данные из других границ. Как найти среди тысячи товаров последний столбец?
     
  14. masrub

    masrub Well-Known Member Пользователи

    Регистрация:
    29 июн 2018
    Сообщения:
    194
    Какая концепция для данной задачи? Нужно использовать какой то макрос?
    Если просто через вывод то столбцы для каждого товар разедутся.
     
  15. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.429
    Адрес:
    Latvia
    Через повторяющиеся границы выбирайте каждый товарный блок, и макросом DYNAMICVALUE каждый блок (цикл) обрабатывайте. Выйдет точно как на скриншоте.
     
  16. masrub

    masrub Well-Known Member Пользователи

    Регистрация:
    29 июн 2018
    Сообщения:
    194
    Оценил возможности DYNAMICVALUE спасибо!
    А как можно внутри DYNAMICVALUE размножить вывод характеристик, т.е. имеем
    [DYNAMICVALUES]Вес[VALUE]:87 кг[NEXTPAIR]Высота[VALUE]:187 см[NEXTPAIR]Размер[VALUE]:один, два, три[NEXTPAIR]Параметр[VALUE]:158[/DYNAMICVALUES]
    что бы получилось вот так:
    [​IMG]
    Использовать поиск замена? На названия необходимых столбцов? Или может есть другой вариант в настройках DYNAMICVALUES?
     
  17. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.429
    Адрес:
    Latvia
    Все также само как в шаблоне вывода но в настройках повторяющихся границ и заметьте что там будет не [VALUE] а {VALUE}
     
  18. masrub

    masrub Well-Known Member Пользователи

    Регистрация:
    29 июн 2018
    Сообщения:
    194
    Немного не понял, где что поправить, сделал через поиск замену в повторяющихся границах, привел к виду
    [DYNAMICVALUES]Вес[VALUE]:87 кг[NEXTPAIR]Высота[VALUE]:187 см[NEXTPAIR]Размер[VALUE]:один[NEXTPAIR]Размер[VALUE]:два[NEXTPAIR]Размер[VALUE]:три[NEXTPAIR]Параметр[VALUE]:158[/DYNAMICVALUES]
    При выводе в предпросмотре значения столбца Размер сливаются в оду ячейку с новой строчки каждое значение.
    Где нужно указывать {VALUE}
     
  19. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.429
    Адрес:
    Latvia
    Ссылки недоступны для гостей - Читайте справку, там все описано.
     
  20. Ametist_A

    Ametist_A New Member Пользователи

    Регистрация:
    13 июн 2020
    Сообщения:
    10
    Здравствуйте!
    У меня вопрос по данной теме.
    У товаров есть разное количество групп характеристик, состоящих из названия группы и самой характеристики.
    То есть при использовании макроса [DYNAMICVALUES] есть

    Код:
    [DYNAMICVALUES][GROUPNAME]имя группы характеристик 1[/GROUPNAME]имя характеристики 1[VALUE]:имя характеристики 2[VALUE]:...[/DYNAMICVALUES]
    название группы
    имя характеристики[VALUE],
    а вот значения характеристики [NEXTPAIR] нет.
    Как быть?
    Не получается ни оставить пустым [NEXTPAIR], ни удалить его из конструкции.
    Или как-то иначе нужно задать шаблон?
     

Поделиться этой страницей