2012-01-11 2 views
2

Это еще не проблема программирования!сравнение веб-страниц - simhash и обработка узлов верхнего уровня DOM

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

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

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

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

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

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

Благодаря

+0

Вы заботитесь об изменениях в dom из javascript или просто изначально изданного html? –

+0

для моего теста, я получил html/data и работаю над возвращенным html-документом. это то, что я заинтересован в проведении сравнительного исследования .. у меня будет ~ 1000 страниц для сравнения, и из этого corpus/domain процесс должен алгоритмически определять уникальные страницы. поэтому в решении, которое я ищу, не существует jscript. Я ищу, чтобы soln находился в php/python. спасибо –

+0

Хм, я думаю, это отвечает на мой вопрос :), просто убедившись, что вам не нужно рассматривать HTML, как браузер, до извлечения DOM. –

ответ

0

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

Например, с помощью 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 для «питона simhash» при условии большого количества возможных вариантов реализации, в том числе python-hashes, который выглядит как хорошее решение меня. Тем не менее, это такая операция, которая выиграла бы от производительности на уровне C, поэтому, если вы планируете использовать это в большой степени в производстве, я бы нашел популярную реализацию C с привязками Python.

HTH :)

+0

Мэтт. Я уже создал тестовые реализации подхода simhash, а также несколько других реализаций, которые направлены на просмотр edgenode/leaves, чтобы определить, является ли несколько страниц «похожими». Я на самом деле надеялся поговорить с другими, у которых может быть опыт реализации с точки зрения их мнений относительно жизнеспособности. thanks –

+1

Возможно, вы могли бы немного изменить вопрос? Трудно понять, что именно вы ищете ... Кроме того, примечание о терминологии - «конечные узлы» обычно называется * leaf * в дереве и * погружает * в ориентированный граф. Я упоминаю это, потому что термин «край» имеет очень специфическое значение в структурах данных. –

Смежные вопросы