Rodion

Рейтинг
0
Регистрация
16.01.2003

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

Если я правильно понял, то спайдер - это то, что я назвал роботом. Правильно?

А вот, что такое индексатор я не понял. Если можно, то по подробнее.Interitus, что такое классификатор

Что должен делать робот?

Робот должен индексировать сайты. У меня сущсествует ряд предложений по этому поводу.

1.1 Когда ты заглотил содержимое HTML-ки, как строку из HTTP клиента ты должен выкинуть из нее все теги. Разумеется надо соблюдать все правила HTML - выкидывать комментарии, блоки тегов типа script и т.д. обычные теги можно просто выкидывать. Потом последовательно вытаскивать из получившейся строки слова. (см. ниже).

1.2 Заноси все слова, которые только сможешь найти. За слово считать

непрерывную последовательность допустимых символов. Допустимыми считать английский алфавит, цифры, русский алфавит и некоторые спец. знаки (напр. тире). Т.е. даже "a", "но" или "варумпик-стривомнлунс" считать за слова.

1.3. Именно так работает например teleport pro. Алгоритм тоже есть - после того как заглотили HTML-ку выполняем след. дейсвтия:

1.3.а. проверяем можно ли эту html-ку индексировать вообще (мета-теги для роботов и expiration-time в заголовках http-ответа).

1.3.б. находим все ссылки, похожие на URL в тексте полученного документа. следует помнить, что ссылки бывают абсолютные (типа http://www.net.org/path/homepage.html) и относительные. следует так же помнить, что относительные в свою очередь делятся на ссылки от корня сайта (типа /dir/page.htm) и ссылки от текущего документа (типа

somepath/page2.htm). Всё это надо учитывать.

1.3.в заносим все эти полученные URL-и в список уже имеющихся в базе. Повторений не допускать. Если ссылка уже была посещена тоже не делать ничего.

1.3.г. обрабатываем страничку по пунктам 1.1 и 1.2.

1.4. переходим к следующей непосещенной страничке из списка накопленных на пункте 1.3.в.

xm я бы порекомендовал следующую структуру БД (лучше чтобы она была реляционной, но можно и без этого):

таблица "словарь":

id (index) | word (string)

таблица "страницы":

id (index) | URL (string) | expiration (datetime) | visited (boolean)

таблица "слова" (основная):

id (index) | word_id (index from "словарь") | page_id (index from

"страницы") | count (integer)

Предположим что было расчитано ниже в таблице "словарь"

накопилось 450000 записей. Пусть, на среднестатичтическом сайте находится 1000 страниц, а на каждой странице в среднем по 500 неповторяющихся слов. Т.о. получаем, что на каждый сайт мы получаем по 500000 записей в таблице "слова". Это уже серьезная нагрузка, но для индексирования только собственного сайта вполне реализуемо. Кроме того ты можешь отсекать общеупотребительные междометия, которые бы составляли 10-30% этой нагрузки типа "но", "а" и т.д. Для этого нужно было бы еще в таблицу словарь добавить поле "запрещено" типа boolean. Этим ты можешь снизить нагрузку.