Фильтрация WEB-документов содержащих ключевые слова при парсинге контента

Тема в разделе "Функции и интерфейс программы", создана пользователем cyoshi, 6 апр 2019.

  1. cyoshi

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

    Регистрация:
    4 апр 2019
    Сообщения:
    69
    Добрый день.
    есть задача спарсить сайт с вакансиями. на сайте есть как вакансии от прямых работодателей так и от агентств. Понятно, что вакансии от агентств не интересны. от кого вакансия написано в специальном поле и хорошо собирается при парсинге.

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

    p.s. понятно что это можно сделать потом в excel но хочется получить сразу файл готовый для импорта
     
    Последнее редактирование: 7 апр 2019
  2. Djahat

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

    Регистрация:
    14 янв 2013
    Сообщения:
    529
    Город:
    Мордор
    Добрый ночь

    Можно так

    [CHECKENTRY(кадровое агентство)]<CD_GRAN_1!>[THENTEXT][FILTERDOCUMENT][/CHECKENTRY]

    Логика понятна ?
     
    cyoshi нравится это.
  3. cyoshi

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

    Регистрация:
    4 апр 2019
    Сообщения:
    69
    проверяет в вхождение слов в скобках в нужном макросе... [THENTEXT][FILTERDOCUMENT] вот эти функции надо посмотреть в мануале..... Спасибо!
     
  4. cyoshi

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

    Регистрация:
    4 апр 2019
    Сообщения:
    69
    если честно чуть не понятно ((
    я понял что при совпадении CHECKENTRY выдаст текст FILTERDOCUMENT...
    а вот по FILTERDOCUMENT почему то нет информации.

    и еще извините, за глупый вопрос. Этот код надо вставить в шаблон вывода макроса? в начало?
     
  5. aresa

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

    Регистрация:
    17 окт 2015
    Сообщения:
    169
    Здравствуйте
    используйте фильтрацию ctrl+shift+f
     
    kagorec, cyoshi и Djahat нравится это.
  6. Djahat

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

    Регистрация:
    14 янв 2013
    Сообщения:
    529
    Город:
    Мордор
    Лучше это вставить в поле с названием резюме:
    Допустим название резюме берется в границе 2 то есть <CD_GRAN_2!>
    Вы выводите <CD_GRAN_2!> в первое поле шаблона вывода.
    А в границу один, назначаете , брать кусок кода в котором на страницах указано от кого вакансия, Вы говорите это написано в специальном поле то есть это будет <CD_GRAN_1!>
    И получается в первом поле, шаблона вывода будет такой код:
    <CD_GRAN_2!>[CHECKENTRY(кадровое агентство)]<CD_GRAN_1!>[THENTEXT][FILTERDOCUMENT][/CHECKENTRY]

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


    Аналог такого же действия это указать в меню ctrl+shift+f , что если в границе <CD_GRAN_1!>, есть ключевое слово "кадровое агентство" то такой документ отфильтровывать.
     
    inotoxic, cyoshi, Root и ещё 1-му нравится это.
  7. cyoshi

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

    Регистрация:
    4 апр 2019
    Сообщения:
    69
    Спасибо большое за помощь!
    буду пробовать)
     
    Root нравится это.
  8. cyoshi

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

    Регистрация:
    4 апр 2019
    Сообщения:
    69
    Все работает! большое спасибо!
     
    Root нравится это.
  9. andreyat64

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

    Регистрация:
    14 дек 2016
    Сообщения:
    6
    Нигде не нашёл описание (или видео), как пользоваться фильтрацией ctrl+shift+f (фильтрация документов по списку ключевиков).
    М.б. кто подскажет ?
     
  10. Root

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

    Регистрация:
    10 мар 2010
    Сообщения:
    13.534
    Город:
    Барнаул
    Что именно непонятно? Там должно быть все понятно исходя из прочтения названий элементов интерфейса.

    Зачем делать инструкцию, где она не нужна.
     
  11. andreyat64

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

    Регистрация:
    14 дек 2016
    Сообщения:
    6
    Для простой фильтрации понятно.
    Для более сложной непонятно.
    Как использовать и/или ?
    Как относятся 3 строки "Где применять фильтрацию" ?
    Можно ли использовать какие либо операции в в поле ключевиков (если Да, то как) ?
    Как относятся Фильтр 1 и Фильтр 2 ?
    ...

    Лучше объясню, что мне надо:
    у меня парсятся 2 поля: "Раздел" и "Бренд"
    Надо спарсить только
    - из "Раздел 1" взять только товары с определенными Брендами (несколько определённых мной Брендов)
    или
    - из "Раздел 2" взять все товары (с любым Брендом)
    (по отдельности, за два прохода могу, за один проход не получается сделать)
     
    Последнее редактирование: 21 июн 2019
  12. andreyat64

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

    Регистрация:
    14 дек 2016
    Сообщения:
    6
    p/s/ сдаётся мне, что тут надо какое-то регулярное выражение.
    Но как его составить - мне не понятно.
    Хотя бы какой нибудь пример ?
     
  13. Root

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

    Регистрация:
    10 мар 2010
    Сообщения:
    13.534
    Город:
    Барнаул
    Для вашей задачи нужно использовать макрос математических/логических операций [MATH] (вернет число, если операции арифметические, или {TRUE} или {FALSE}, если операции в нем логические).

    Результат работы макроса [MATH] сравнивается c {TRUE} или {FALSE} в макросе [IF1].

    Код:
    [IF1][MATH](раздел2=<CD_GRAN_1!>) or ((раздел1=<CD_GRAN_1!>) and ((бренд1=<CD_GRAN_2!>) or (бренд2=<CD_GRAN_2!>)))[/MATH][TEXTEQUAL]{TRUE}[THEN]СЮДА ПОМЕСТИТЕ КОД ШАБЛОНА ВЫВОДА[ELSE][FILTERDOCUMENT][/IF1]
    Где:
    <CD_GRAN_1!> - граница парсинга с разделом
    <CD_GRAN_2!> - граница парсинга с брендом

    Если результат работы макроса [MATH] будет равен {FALSE}, то макрос [IF1] выведет [FILTERDOCUMENT], который отфильтрует документ.

    Для пополнения списка брендов просто добавьте нужное количество or (брендn=<CD_GRAN_2!>)
    Код:
    [IF1][MATH](раздел2=<CD_GRAN_1!>) or ((раздел1=<CD_GRAN_1!>) and ((бренд1=<CD_GRAN_2!>) or (бренд2=<CD_GRAN_2!>) or (бренд3=<CD_GRAN_2!>)))[/MATH][TEXTEQUAL]{TRUE}[THEN]СЮДА ПОМЕСТИТЕ КОД ШАБЛОНА ВЫВОДА[ELSE][FILTERDOCUMENT][/IF1]
     
  14. Root

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

    Регистрация:
    10 мар 2010
    Сообщения:
    13.534
    Город:
    Барнаул
    Для удобства добавления брендов, чтобы не запутаться в скобках, можно надобавлять символов переносов строк таким образом:
    Код:
    [IF1][MATH](раздел2=<CD_GRAN_1!>) or ((раздел1=<CD_GRAN_1!>) and (
    
    (бренд1=<CD_GRAN_2!>)
    or (бренд2=<CD_GRAN_2!>)
    or (бренд3=<CD_GRAN_2!>)
    or (бренд4=<CD_GRAN_2!>)
    or (бренд5=<CD_GRAN_2!>)
    or (бренд6=<CD_GRAN_2!>)
    or (бренд7=<CD_GRAN_2!>)
    
    ))[/MATH][TEXTEQUAL]{TRUE}[THEN]СЮДА ПОМЕСТИТЕ КОД ШАБЛОНА ВЫВОДА[ELSE][FILTERDOCUMENT][/IF1]
     
  15. andreyat64

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

    Регистрация:
    14 дек 2016
    Сообщения:
    6
    Понял принцип - фильтрацией ctrl+shift+f (фильтрация документов по списку ключевиков) не пользуемся.
    А фильтруем в шаблоне вывода.
    Спасибо !!!
     
    Root нравится это.
  16. Root

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

    Регистрация:
    10 мар 2010
    Сообщения:
    13.534
    Город:
    Барнаул
    Пожалуйста.
     
  17. cyoshi

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

    Регистрация:
    4 апр 2019
    Сообщения:
    69
    а можно ли применить такой вид фильтрации к повторяющейся границе парсинга.
    то есть
    XML файл с объявлениями.
    если значение определенного поля в товаре есть то такой товар фильтруется а остальные продолжают обрабатываться

    [CHECKENTRY(битый)][GRAN15][THENTEXT][FILTERDOCUMENT][/CHECKENTRY][GRAN1][CSVCS]

    если использую такую конструкцию то фильтруется весь xml
     
  18. Root

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

    Регистрация:
    10 мар 2010
    Сообщения:
    13.534
    Город:
    Барнаул
    Можно. Но без [FILTERDOCUMENT]. Макрос [CHECKENTRY] позволяет выводить или не выводить текст в зависимости от условия.
     
  19. cyoshi

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

    Регистрация:
    4 апр 2019
    Сообщения:
    69
    спасибо за Ваш ответ.
    дело в том что
    мне при присутствии текста в одной из границ парсинга надо пропускать весь цикл динамческой границы парсинга.
    надо чтобы какую то команду макрос [CHECKENTRY] выдал?
     
  20. Root

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

    Регистрация:
    10 мар 2010
    Сообщения:
    13.534
    Город:
    Барнаул
    Изучите, как работает макрос [CHECKENTRY] (инструкция по нему есть) и используйте его в шаблоне повторяющихся границ. Тут проблем быть не должно.
     

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