Возможно ли написать универсальный парсер сайтов?

Добрый день.
Возникла необходимость написать парсер сайтов, универсальный.
Задача в следующем.
Пользователь вводит адрес сайта в поле формы, через cURL получают содержимое сайта, выделить из выдачи только текст(из div, p, table, span и т.д.).
Но вот вопрос. Каждый сайт, это индивидуальная структура. Как в этом случае, настроив парсер только раз, получать данные с любого сайта, не меняя настройки парсера под каждый сайт? Возможно ли это?
Сейчас использую php, cUrl, htmlpurifier для получения текста с сайта.

p.s. Что необходимо получить?
Необходимо получить только текст, сохранив орфографию и пунктуацию. Никаких тегов быть не должно. Js/Jquery тоже не надо получать, единственное, что надо получить из данных, подгружаемых js/jquery - содержание слайдеров, если там есть текст.
В идеале надо получить весь текст от <body> до </body> и только текст. Если текст, например, находится в таблице, то надо выбрать текст из td, записать в одну строку и сохранить в файл(базу). Следующая строка в таблице tr > все td - сформировать строку и добавить в файл(базу). В итоге должно получится, что всё содержимое одной таблицы является одним абзацем в файле. Так же и с остальными тегами.
Вот как-то так)

p.s.s попытка реализации задачи
  • Вопрос задан
  • 1620 просмотров
Пригласить эксперта
Ответы на вопрос 5
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
И да, и нет: у вас очень расплывчатая формулировка. Непонятно, насколько осмысленным и обработанным должен быть итоговый результат, насколько допустим мусор.

Скачать страницу, построить дерево документа и какими-то элементарными эвристиками вырезать ненужное (меню, сайдбары, подвалы, рекламу и т.п.) относительно просто, но результат будет довольно грубый с неудовлетворительным соотношением сигнал/шум.

Для повышения универсальности инструмента, потребуется увеличивать количество и сложность этих эвристик. А ещё можно подключить туда машинное обучение, чтобы они сами себя улучшали.
И вот вы уже хотите написать что-то вроде поискового паука. Представьте, сколько сил вложено в разработку паука Яндекса или Гугла. У вас есть такие возможности? А ведь мало его просто написать, надо поддерживать, следить за новыми стандартами...

Парсинг сайтов - это задача, которая легко решается людьми, но плохо даётся роботам. Если смотреть с точки зрения бизнеса, то гораздо дешевле и эффективнее будет посадить джуниора, который будет писать отдельные правила парсинга под каждый сайт, чем пытаться конкурировать с Гуглом.
Ответ написан
@omichkun
Очень сомневаюсь, что это возможно.
Вам же нужны структурированные данные, а не просто сплошной текст того, что есть на сайте/странице. А чтобы получить структурированные данные, необходимо знать и настроить структуру для парсера, чтобы он знал, что брать, а что пропускать.
Ну и curl - не панацея от всех проблем. Например, он не сможет получить данные, которые подгружаются на сайте, используя JavaScript (подсказка: в этом случае поможет только PhantomJS).
Ответ написан
@fetis26
Ну, за фронтенд!
Этим поисковые системы уже второе десятилетие занимаются. Вроде получается, но оцените трудозатраты.
Ответ написан
Rou1997
@Rou1997
Конечно, возможно, стандарт DOM предусматривает document.body.textContent как и у других DOM-элементов.
Ответ написан
@3569291
Как вариант - можно уйти в сторону специализированных сервисов, наподобие https://lateral.io/docs/article-extractor
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы