Для того, чтобы понять что-либо надо создать нечто похожее. Лично таково моё мнение о познании объектов окружающего мира. Так или иначе , создав объект – мы обретаем тот нужный уровень проникновения в суть явления.Согласно философии Гегеля невозможно понять явление, не уяснив всего пути, который оно совершило в своем развитии, что развитие происходит не по замкнутому кругу, а поступательно от низших форм к высшим, что в этом процессе совершается переход количественных изменений в качественные. Вот так и будем изучать , создавая сам объект простого паука.
Создав что-либо подобное можно вырасти качественно и как результат лучше научиться пользоваться созданным своими руками. Любая деятельность вебмастера сопряжена с идексацией его творений. Проще говоря не было бы индексации – не было бы ни seo , ни простых вебмастеров. Это естественно. Поэтому я решил разобраться как устроена ПС изнутри.
Для этого я решил написать простого паука. Это конечно не полноценная ПС, но основные моменты можно будет здесь отразить. Так или иначе цель проще- создать общую схему для индексации небольшого числа html документов в начале. И впоследствии развить до функционального алгоритма.
Ну что ж, приступим. Естественно пользоваться я буду полюбившемся мне до глубины души питоном и книгой о ПС. Не из воздуха же генерить идеи.
Вот в начале поговорим об общей схеме создания паука. Создадим файл searchengine.py. Добавим в него класс spider и описание методов, которые будут описаны дальше.
class spider:
Следующуя строчка производит инициализацию паука и передаёт ему имя базы данных.
def __init__(self,dbname): pass
Следующая строчка производит удаления класса
def __del__(self): pass
Обработка базы данных:
def dbcommit(self): pass
Вспомогательная функция для получения идентификатора и добавления записи в случае отсутствия таковой
def getentryid(self,table,field ,value,createnew=True): return None
Индексирование одной страницы:
def addtoindex(self,url,soup): print "Indexing %s" % url
Извлечение текста из html-страницы (без тегов) Вполне терпимая к ошибкам в коде и неверных отработках javascript скриптов
def gettextonly(self,soup): return None
Разбиение текста на слова
def separatewords(self,text): return None
Проверка УРЛ документа на проиндексированность , исключение из индекса повторов.
def isindexed(self,url): return False
Следующая функция добавляет ссылки между страницами. Впоследствии может быть использовано в ранжировании.
def addlinkref(self,urlFrom,urlTo,linkText): pass
Вот непосредственно и сам паук. Он как раз и занимается индексированием информации на странице, индексируя всё до заданной глубины
def spide(self,pages,depth=2): pass
Создание таблиц в базе данных с записями о числе ссылок и о словах принадлежищих данному хтмл документу.
def createindextables(self): pass
Впоследствие конечно надо ещё построить нейронную сеть для создания наиболее эффективной схемы ранжирования. Ну вообщем общая схема в принципе проста. Только дальнейшей анализ собранной информации и является основной задачей таких ПС как Яндекс и Гугл. В целом дальше я более подробно остановлюсь на том как эти функции устроены. Но пока на этом всё.
lifephysic
21.09.2010 - 17:02
Первый комментарий будет моим. Что ж потом конечно выложу полный код в файле питона….
[Translate]