Сравнение веб-страниц - 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:)