Страницы

Поиск по вопросам

суббота, 8 февраля 2020 г.

Умный парсер контента.

#php #парсер


Здрасьте. Помогите с алгоритмом парсера. Тока надо учесть, что структура сайта не
известна. Известна нам только ссылка к странице, надо естественно выдернуть оттуда
контент. То есть надо заставить скрипт думать, как (почти как) человек.
Полагаю, без некоего общего шаблона не получится. Посему предлагаю обсудить и разработать
такой "шаблон". Скажем, выявить общность между сайтами, например. В общем, как дать
понять скрипту, что контент находиться именно "тут", а не там, где баннер. 
Например, можно взять title документа (обычно она совпадает на 90% с заголовком статьи),
найти его в документе и парсить уже ниже.
Можно ограничиться новостными сайтами.    


Ответы

Ответ 1



Серьезные вопрос. На мой взгляд парсер в лучшем случае будет работать % на 15-20. Каждый сайт построен со своими HTML архитектурными премудростями. Не факт что контент будет лежать именно в теги с ID или Class "content". Быстрее под каждый сайт парсер написать, нежели мудрить со структурой и "учить" скрипт работать с сотней другой сайтов. ps Это конкретная задача под что-то, или так просто для себя попробовать? Новостные сайты обычно выкладывают rss канал который можно спокойно забирать от них.

Ответ 2



Я бы смотрел в сторону веса каждого тега. Т.е. сколько чистого текста в каком теге, и как-то выбирать золотую середину. Т.е. допустим если в теге 60% всего текста страницы - это нужная статья. Ну или вариант 2 Если есть возможность загрузить несколько разных статей с сайта, но сделать некое сравнение. Сразу же удалить всё что на 3 и более страницах повторяется, остальное попробовать алгоритмом 1 определить. Как-то так абстрактно.

Ответ 3



Честно говоря я видел такие верстки, что там и человек хрен поймет)) Если вам нужны гарантии - то только индивидуальный шаблон, ну или хотя бы типовой. Я бы пробовал искать блоки DIVы в которых много теста, и есть тайтлы класса Н2, Н3 ... Во-вторых смотрел бы в ID, CLASS слова типа main, content )) Для этого я бы дробил всё на ДИВы. Для каждого считал: количество ссылок; количество li'шек; количество картинок; и количество слов; Если число a'шек (и возможно li'шек) соизмерима с числом слов - то это скорее всего меню. Если там вообще 1-2 картинки и пару ссылок - то это баннер. Если слов много (ощутимо больше всего остального) и есть заголовки (пару картинок, пару ссылок) и т.п. - вот это контент. Идея поиска тайтла - хороша, но есть нюанс - заголовок, который для пользователя (виден пользователю) и который для СЕО (идет в тайтл и Н1) у меня, например, очень часто отличаются. Да они отличаются не радикально, но для машинного анализа уже не пойдут.

Комментариев нет:

Отправить комментарий