Сравнение веб-страниц - simhash и обработка граничного узла DOM

Это еще не проблема программирования!

Но я смотрю, как бы вы сравнили веб-страницы, чтобы увидеть, являются ли страницы одинаковыми / похожими. Это личный проект, а не для работы / школы... (просто говори!)

Я нашел несколько базовых реализаций simhash, и мне было интересно, может кто-нибудь подсказать мне действительно хорошую и надежную реализацию py / php simhash. Я бы не стал изобретать велосипед на этом.

Кроме того, я заинтересован в том, чтобы потенциально иметь возможность вычислить / сгенерировать структуру DOM для данной страницы, а затем вычислить "конечные / ребристые" узлы дерева / структуры, чтобы определить, может ли это быть подходом к определению сходства страницы.

Итак, меня также интересует любой инструмент / приложение, которое можно использовать для создания списка структуры DOM для данной страницы. Я бы подумал, что поиск в сети привел бы к созданию нескольких py / php / apps для генерации такого рода графиков / списков для целей тестирования.

Я также могу понять, что я мог использовать неправильные термины в своем поиске.

Таким образом, мысли и комментарии о том, где искать, что следует учитывать, будет приветствоваться.

Спасибо

1 ответ

Итак, в вышеприведенных комментариях вы сказали, что вас не волнует, что js с сайта может сделать для DOM. Поэтому, чтобы ответить на первую часть вопроса, вам нужно проанализировать HTML, используя lxml, BeautifulSoup или один из них. других HTML-парсеров Python, производящих DOM.

Например, используя lxml, вы можете получить все элементы "листа"

>>> from lxml import etree
>>> html = etree.HTML("<html><body><div class='content'>...</div><div class='advert'>....</div></body></html>")
>>> leaves = [d for d in html.iterdescendants() if len(d.getchildren()) == 0]
>>> leaves[0].text
'...'

Быстрый Google для "python simhash" предоставил множество возможных реализаций, включая python-хэши, что для меня выглядит хорошим решением. Тем не менее, это именно та операция, которая выиграет от производительности на уровне C, поэтому, если вы планируете широко использовать ее в работе, я бы нашел популярную реализацию C с привязками Python.

HTH:)

Другие вопросы по тегам