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

  • Автор темы Автор темы Babloman
  • Дата начала Дата начала

Babloman

A-Parser Pro License
A-Parser Pro
(осторожно многотекста)

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

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

Как пример, мы тянем тексты для магнитол
есть модель 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 минуты, в апарсере пол дня пришлось просидеть и результат... его почти нет..


Спасибо.
 
Задачу в "идеальном" варианте не решить. Предлагаю разбить большую задачу на мелкие:
1) парсинг SE по киворду, сохранение ссылок, для упрощения в будущем сохраняй в формате, который бы помещался в одну строку без разделителя, к примеру - json. 100% будут варианты, когда выбранный разделитель будет в данных и "все поломается".
2) обработчик ( скрипт) данных, который фильтрует результаты пункта 1)
3) парсер текста с сайтов ( пусть будет сырого, так тоже проще для отладки)
4) обработчик (скрипт) сырого текста
то всё равно много у кого футеры с dmca дисклеймерами, разными описаниями и другим бредом. Отследить нереально
Спасибо.
Отследить реально, если делать sent tokenize (http://www.nltk.org/_modules/nltk/tokenize.html) и строить статистику в разрезе домена донора текста, то такие предложения будут встречаться мега часто.
Задача сложная, но реализуемая, в том числе и с высоким "качеством" на выходе. Другое дело в трудоемкости.
После этапа разработки и отладки все можно сделать на автомате через API парсера.
В описании задачи не сказано, зачем все это нужно. Позволю себе пофантазировать, что для последующей генерации дорвеев. Если так, то существует вариант грубо спарсить текст, подсунуть его sphinxsearch, а дергать данные с помощью http://sphinxsearch.com/docs/current/sphinxql-call-snippets.html.
 
Последнее редактирование:
Но задача оказалась такой, чтобы контент вытягивало не в ссылки, а потом уже парсинг
А чтобы под каждый ключ был конкретный контент с 10 собранных ссылок, например.
Здравствуйте.
Решить вашу задачу можно следующим образом:
1) Делаем пресет c парсером SE::Google SE::Google или SE::Yandex SE::Yandex. Выставляем значение Page count 1, а Links per page 10.
Links%20per%20page.png

Только топ 10 ссылок.
2) Делаем пресет на основе парсера HTML::TextExtractor HTML::TextExtractor который будет собирать контент по заданным ссылкам.
3)Запустить второе задание по завершению первого с использованием файла результата первого задания в качестве запросов.
Для этого в 1 - ом пресете Нажмите Больше опций. Далее в выпадающем списке Запустить по завершению выберите второе задание и кликните на использовать файл результатов в качестве запросов.
TwoStep2.png
 
Но я так понимаю, что регулярку, о кот. написано в п.1 я там применить не смогу?
Т.е. текст залетит как есть, без ограничений с кучей мусора


=====3=====
Каким образом можно научить a-parser игнорировать футер, сайдбары и прочее?
Для очистки текста вы можете использовать конструктор результатов . Более подробно о нем вы можете почитать по ссылке
Если приведёте пример страницы, то я покажу как её очистить.А лучше несколько ссылок на страницы, чтобы решение было более универсальным.
 
Последнее редактирование:
а как в этом случае реализовать вывод ?

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


ведь пресет с HTML::TextExtractor будет уже выполняться уже после того, как закончиться 1е задание?
или ошибаюсь и первое задание берет 1й ключевик, парсит ссылки и сразу переходит к пресету2
потом ключевик2 ->пресет1->пресет2
 
Нет. Вы не ошибаетесь. Первое задание берет 1й ключевик, парсит ссылки и сразу переходит к пресету2.
Обойти этот момент можно следующим образом. Добавлять в 1 -ом пресете к ссылке через какой нибудь разделительный знак ( например ;) кейворд.
Например http://site.com;keyword
Во втором пресете через конструктор запросов разбираем запрос на собственно ссылку, по которой будет делаться запрос и keyword.
Более подробно о конструкторе запросов вы можете прочитать по этой ссылке
Querybuilder.png
 
Назад
Верх