Как эффективно определить, поступает ли веб-страница с веб-сайта? - PullRequest
1 голос
/ 28 августа 2009

У меня есть несколько неизвестных веб-страниц, и я хочу определить, с каких веб-сайтов они приходят. У меня есть примеры веб-страниц с каждого веб-сайта, и я предполагаю, что у каждого веб-сайта есть отличительный шаблон. Мне не нужна полная уверенность, и я не хочу использовать слишком много ресурсов, соответствующих каждой веб-странице. Поэтому о сканировании каждого веб-сайта для веб-страницы не может быть и речи.

Я думаю, что лучший способ - это сравнить древовидную структуру DOM каждой веб-страницы. Есть ли библиотеки, которые будут это делать?

В идеале мне нужно решение на основе Python, но если есть алгоритм, который я могу понять и реализовать, то мне это тоже будет интересно.

Спасибо

Ответы [ 2 ]

4 голосов
/ 28 августа 2009

Вы можете сделать это с помощью байесовской классификации. Сначала добавьте несколько страниц с каждого сайта в классификатор, а затем проверьте их на будущих страницах, чтобы увидеть, насколько они совпадают.

Библиотека байесовского классификатора доступна здесь: Преподобный (LGPL)

Упрощенный пример:

# initialisation
from reverend.thomas import Bayes
guesser = Bayes()
guesser.train('site one', site_one_page_one_data)
guesser.train('site one', site_one_page_two_data)
# ...etc...
guesser.train('site two', site_two_page_one_data)
guesser.train('site two', site_two_page_two_data)
# ...etc...
guesser.save()

# run time
guesser.load()
results = guesser.guess(page_I_want_to_classify)

Для лучших результатов сначала разбейте код на HTML. Но это не обязательно.

0 голосов
/ 28 августа 2009

Быстрый и грязный способ, которым вы можете попробовать, - разделить источник HTML на теги HTML, а затем сравнить результирующие коллекции строк. Вы должны получить коллекцию тегов и контента, скажем:

item[n] ="<p>"
item[n+2] ="This is some content"
item[n+2] ="</p>"

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

Некоторое содержимое, кроме тегов, будет таким же (меню и т. Д.). Я думаю, что числовое сравнение случаев должно быть достаточно. Вы можете улучшить, дав своего рода «очки», когда у вас есть тот же тег / контент в той же позиции. Вероятно, «комбо» из приличного количества коллекционных предметов может дать вам уверенность.

...