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

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

  1. rusalex

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

    Регистрация:
    22 мар 2018
    Сообщения:
    53
    Город:
    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 Member Пользователи

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

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

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

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

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

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

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

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

    Регистрация:
    22 мар 2018
    Сообщения:
    53
    Город:
    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
    Сообщения:
    3.297
    Много надо проверять и расписывать чтоб вы получили готовый результат от всевозможных элементов каждого товара из описания.
    Без базовых знаний регулярных выражений сложно понять, привожу примеры возможно помогут понять принцип.

    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
    Сообщения:
    9.886
    Город:
    Сочи
    Код:
    [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 Member Пользователи

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

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

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

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

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

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

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

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

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

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

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