1. Вступайте в наш Telegram чат: https://t.me/a_parser Нас уже 2600+ и мы растем!
    Скрыть объявление

Result filter

Тема в разделе "Техническая поддержка", создана пользователем Advice, 22 мар 2018.

  1. Advice

    Advice A-Parser Pro License
    A-Parser Pro

    Регистрация:
    7 май 2015
    Сообщения:
    11
    Симпатии:
    0
    Здравствуйте, вопрос по поводу result filter, что делаю не так?
    [​IMG]
    На входе идет файл с доменами(site.com), на выходе хочу получать только те ссылки в выдаче, где в сниппетах фигурирует домен(для этого делаю Remove HTML tags у сниппетов, т.к. изначально в сниппетах было что-то вроде site<b>.com</b>), если смотрю вручную - всё есть, но с данными настройками в файл не сохраняет вообще ничего.

    P.S. почему при наличии сайтов для парсинга прокси сам проксичекер не подгружает прокси из файла proxy.txt, а только с сайтов?
     
    #1 Advice, 22 мар 2018
    Последнее редактирование: 22 мар 2018
  2. Support

    Support Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    16 мар 2012
    Сообщения:
    4.547
    Симпатии:
    2.164
    Добрый день.
    1. Переменную в фильтре нужно указывать явно (используя [% ... %]). Пример есть тут.
    2. Фильтр срабатывает до Конструктора результатов, поэтому удаление тегов в данном случае не поможет. Подробнее о порядке обработки запросов: https://a-parser.com/wiki/query-results-relation/
    В данном случае лучше реализовать фильтрацию шаблонизатором. Для этого в Общем формате результата нужно прописать шаблон, который в цикле переберет каждый результат и выведет только те, где есть совпадение. Примерно так:
    Код:
    [% FOREACH item IN p1.serp;
        regex = '(?i)' _ query.orig.replace('([\-\[\]/{}()*+?.\\\^$|])', '\\\$1'); #создаем регулярку из оригинального запроса, экранируем зарезервированные символы и добавляем игнорирование регистра
        IF item.snippet.match(regex);
            item.link _ "\n";
        END;
    END %]
     
    Advice нравится это.
  3. Advice

    Advice A-Parser Pro License
    A-Parser Pro

    Регистрация:
    7 май 2015
    Сообщения:
    11
    Симпатии:
    0
    А разве мы не можем тогда сделать фильтр по регулярке, смысл ведь тот же?Только проблема в том, что html теги то не удалятся, в итоге домен может быть в сниппетах как в явном виде(site.com), так и с html тегами(<b>site</b>.com site<b>.com</b> и т.д.). Или же шаблонизатор будет отбирать строки уже ПОСЛЕ удаления html кода?
     
  4. Support

    Support Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    16 мар 2012
    Сообщения:
    4.547
    Симпатии:
    2.164
    Врятли получится сделать такую регулярку, которая бы учитывала все комбинации тегов и запроса. Поэтому проще шаблонизатором сделать.

    Формат результата (а значит и шаблон в нем) применяется после Конструктора результатов, поэтому в нем строки уже будут без HTML тегов (если Конструктором результатов вы их убираете).
     
    Advice нравится это.
  5. Advice

    Advice A-Parser Pro License
    A-Parser Pro

    Регистрация:
    7 май 2015
    Сообщения:
    11
    Симпатии:
    0
    Спасибо, всё работает, однако есть одно но, почему-то пропускает около 18 ссылок на фоне общих 400+, пробовал и изменять ваш код таким образом:
    Код:
    [% FOREACH item IN p1.serp;
       IF item.snippet.match(query.orig);
           item.link _ "\n";
       END;
    END %]
    
    Результат один в один, но при обычном проходе результатов больше и непонятно почему он пропускает, потому что сниппеты там вполне обычные, вот один из них(которые пропустило):
    http://site.com - key 1kw9al.
    Делал несколько проходов, через шаблонизатор 428 ссылок собирает, обычными проходами получается около 496(но там еще с доменами в самом url'e, а не только сниппетах, в итоге если вычесть те, где в url'e домен встречается, а в сниппетах - нет, то получается разница около 18 доменов). В чем может быть проблема?

    upd: Проблема решена, всё дело оказалось в дублях, ведь при сохранении со сниппетами домены могут быть одинаковые, теперь всё сходится.
     
    #5 Advice, 22 мар 2018
    Последнее редактирование: 22 мар 2018
  6. Support

    Support Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    16 мар 2012
    Сообщения:
    4.547
    Симпатии:
    2.164
    Немного неправильно использовать не измененный запрос в качестве регулярки.
    В примере кода выше я показывал как экранировать зарезервированные символы, и также добавить игнорирование регистра.

    А в целом сложно ответить на ваш вопрос, не видя конкретного пресета, запросов и результатов.
     
    Advice нравится это.

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