1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вступайте в наш Telegram чат: https://t.me/a_parser Нас уже 2600+ и мы растем!
    Скрыть объявление

Парсинг текста по ссылкам с очисткой

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

  1. Babloman

    Babloman A-Parser Pro License
    A-Parser Pro

    Регистрация:
    19 июн 2015
    Сообщения:
    11
    Симпатии:
    3
    (осторожно многотекста)

    Столкнулся с простой казалось бы задачей:
    А) Есть ХХХ ключей
    Б) По каждому ключу парсится текст с опред кол-вом символов
    Ну и как бы в задаче получается основным моментом нужно так, чтобы результат выводился в виде:

    кейворд
    текст статьи
    разделитель

    Как пример, мы тянем тексты для магнитол
    есть модель Sony cdx-gt317ee
    хотелось бы, чтобы на выходе был ключевик и через \n статьи конкретно под эту магнитолу

    sony cdx-gt317ee
    статьи для этой магнитолы sony cdx-gt317ee текст текст текст
    === (разделитель)

    sony cdx-gt828u
    статьи для sony cdx-gt828u
    === (разделитель)

    и т.п.

    Что успешно делал раньше:
    - вытягивал ссылки по списку ключей
    - вытягивал контент с сайтов
    - регулярка по очистке текста была
    TextBlock
    (\b[A-ZА-Я](?:\w+[,;:]? ){3,}\w{2,}[.!?])


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



    =====1=====
    Начну с конца
    Заметил, что эта регулярка (если попадаются другие языки со словами вида C'onte) - режет первые 2 символа. Кроме того, TextExtractor тянул всё подряд (по ограничению блока), но залетали и футер и меню и прочее, если там был проходивший по правилу контент.

    Поискал еще другие советы на форумах и наткнулся на Подскажите парсер текста

    Там @Forbidden предложил (на просьбу про длину предложения именно, а не длину блока) фильтр такого вида
    [,\w\d]{50,}[!?.]

    Я затестил на той же странице https://a-parser.com/threads/1573/

    при
    [,\w\d]{8,}[!?.]
    Сообщение #3 следующего содержания не парсит вообще:
    "Спасибо большое! а подскажите пожалуйста, можно ли как то, сделать чтоб текст парсился не весь подряд, а чтобы каждое предложение в тексте было от 50 символов, именно предложение, а не блог текста? а то если ставить блог текста, то он и категории меню парсит с сайтов, а это получается мусор(("

    при
    [,\w\d]{14,}[!?.]
    нет результатов никаких вообще с этой страницы

    Почему?


    =====2=====
    Задача не только парсить линки, а потом контент, а именно спарсить выдачу по ключу, записать ключ, записать контент кот. прошел по параметрам, дальше разделитель между статьями и следующий ключ, следующий контент и разделитель и так по циклу.

    Начал копать на форуме, есть JS https://a-parser.com/resources/20/

    Но я так понимаю, что регулярку, о кот. написано в п.1 я там применить не смогу?
    Т.е. текст залетит как есть, без ограничений с кучей мусора


    =====3=====
    Каким образом можно научить a-parser игнорировать футер, сайдбары и прочее?
    Инструмент мегамощный и я всегда его хвалю и рекомендую всем кого знаю, но с текстами беда прям.
    Альтернативные копеечные скрипты делают это на ура, парсят выдачу по ключу, результаты предоставляют в любом виде, причем понимают где футер и не тянут оттуда контент. Т.к. даже если мы ограничим не только по chars, но и по длине предложения (как в п.1), то всё равно много у кого футеры с dmca дисклеймерами, разными описаниями и другим бредом. Отследить нереально



    =====4=====
    Открыт вопрос также по исключению ресурсов с кот. контент не тянуть (напр: википедия)
    Я понимаю, что это можно сделать регуляркой, но если например списком 20-30 ресурсов... ?



    Хотелось бы это всё сделать в a-parsere, не прибегая к сторонним софтам.
    Но по тексту как-то неопределенно всё
    Там где делается это за 3 минуты, в апарсере пол дня пришлось просидеть и результат... его почти нет..


    Спасибо.
     
    kaznokrad и woodoo нравится это.
  2. Boomerc

    Boomerc A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    15 мар 2017
    Сообщения:
    35
    Симпатии:
    16
    Задачу в "идеальном" варианте не решить. Предлагаю разбить большую задачу на мелкие:
    1) парсинг SE по киворду, сохранение ссылок, для упрощения в будущем сохраняй в формате, который бы помещался в одну строку без разделителя, к примеру - json. 100% будут варианты, когда выбранный разделитель будет в данных и "все поломается".
    2) обработчик ( скрипт) данных, который фильтрует результаты пункта 1)
    3) парсер текста с сайтов ( пусть будет сырого, так тоже проще для отладки)
    4) обработчик (скрипт) сырого текста
    Отследить реально, если делать sent tokenize (http://www.nltk.org/_modules/nltk/tokenize.html) и строить статистику в разрезе домена донора текста, то такие предложения будут встречаться мега часто.
    Задача сложная, но реализуемая, в том числе и с высоким "качеством" на выходе. Другое дело в трудоемкости.
    После этапа разработки и отладки все можно сделать на автомате через API парсера.
    В описании задачи не сказано, зачем все это нужно. Позволю себе пофантазировать, что для последующей генерации дорвеев. Если так, то существует вариант грубо спарсить текст, подсунуть его sphinxsearch, а дергать данные с помощью http://sphinxsearch.com/docs/current/sphinxql-call-snippets.html.
     
    #2 Boomerc, 2 сен 2017
    Последнее редактирование: 2 сен 2017
  3. Boomerc

    Boomerc A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    15 мар 2017
    Сообщения:
    35
    Симпатии:
    16
    Forbidden нравится это.
  4. Support Денис

    Support Денис A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    12 июн 2017
    Сообщения:
    586
    Симпатии:
    185
    Здравствуйте.
    Решить вашу задачу можно следующим образом:
    1) Делаем пресет c парсером SE::Google SE::Google или SE::Yandex SE::Yandex. Выставляем значение Page count 1, а Links per page 10.
    [​IMG]
    Только топ 10 ссылок.
    2) Делаем пресет на основе парсера HTML::TextExtractor HTML::TextExtractor который будет собирать контент по заданным ссылкам.
    3)Запустить второе задание по завершению первого с использованием файла результата первого задания в качестве запросов.
    Для этого в 1 - ом пресете Нажмите Больше опций. Далее в выпадающем списке Запустить по завершению выберите второе задание и кликните на использовать файл результатов в качестве запросов.
    [​IMG]
     
  5. Support Денис

    Support Денис A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    12 июн 2017
    Сообщения:
    586
    Симпатии:
    185
    Для очистки текста вы можете использовать конструктор результатов . Более подробно о нем вы можете почитать по ссылке
    Если приведёте пример страницы, то я покажу как её очистить.А лучше несколько ссылок на страницы, чтобы решение было более универсальным.
     
    #5 Support Денис, 4 сен 2017
    Последнее редактирование: 4 сен 2017
  6. Babloman

    Babloman A-Parser Pro License
    A-Parser Pro

    Регистрация:
    19 июн 2015
    Сообщения:
    11
    Симпатии:
    3
    а как в этом случае реализовать вывод ?

    кейворд
    текст статьи
    разделитель


    ведь пресет с HTML::TextExtractor будет уже выполняться уже после того, как закончиться 1е задание?
    или ошибаюсь и первое задание берет 1й ключевик, парсит ссылки и сразу переходит к пресету2
    потом ключевик2 ->пресет1->пресет2
     
  7. Support Денис

    Support Денис A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    12 июн 2017
    Сообщения:
    586
    Симпатии:
    185
    Нет. Вы не ошибаетесь. Первое задание берет 1й ключевик, парсит ссылки и сразу переходит к пресету2.
    Обойти этот момент можно следующим образом. Добавлять в 1 -ом пресете к ссылке через какой нибудь разделительный знак ( например ;) кейворд.
    Например http://site.com;keyword
    Во втором пресете через конструктор запросов разбираем запрос на собственно ссылку, по которой будет делаться запрос и keyword.
    Более подробно о конструкторе запросов вы можете прочитать по этой ссылке
    [​IMG]
     

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