|
|
|
| Вот код паука, может кому пригодится...
CREATE TABLE search_index (
uri varchar(255) NOT NULL default '',
title text NOT NULL,
description text NOT NULL,
text mediumtext NOT NULL,
UNIQUE KEY (uri),
FULLTEXT KEY (text)
) TYPE=MyISAM;
Паук:
<?php
$indexed=array(); // массив, где мы отмечаем уже проиндексированные страницы
// $uri - стартовый адрес
function spider($uri='/', $depth=0){
global $indexed;
// URI уже проиндексирован, пропускаем
if($indexed[$uri]) return;
// удаляем из кэша старую версию рассматриваемого URI
mysql_query("delete from search_index where uri='".mysql_real_escape_string($uri)."'");
// формируем URL для вызова страницы сайта по HTTP
$url='http://'.$_SERVER["HTTP_HOST"].$uri;
// берем мета-теги. Для упрощения работы у нас сайт заголовок записывает не только в <title>, то и <meta name="title">
$meta=@get_meta_tags($url);
// либо ошибка, либо не документ. Пропускаем
if(!$meta) return;
// тут еще один момент для оптимизации. Мы 2 раза запрашиваем страницу, т. к. get_meta_tags не может работать со строкой, только с файлом. Можно один раз вызвать страницу по HTTP и сохранить в локальный файл.
$content=file_get_contents($url);
// чистим контент от тегов и html-entity (и заодно от повторяющихся пробелов)
$text=preg_replace('/(s+)|(&[a-zA-Z0-9#]+;)/', ' ', strip_tags($content));
// записываем данные по URI в индекс
mysql_query("insert into search_index set
uri='".mysql_real_escape_string($uri)."',
title='".mysql_real_escape_string($meta['title'])."',
description='".mysql_real_escape_string($meta['description'])."',
text='".mysql_real_escape_string($meta['title']."
".$page['description']."
".$text)."'");
// отмечаем в массиве, что этот URI мы проиндексировали
$indexed[$uri]=true;
// теперь делаем обход ссылок
// тут опять поле для оптимизаторства: мы здесь удаляем все теги кроме <A> и выбираем все, что идет после href= и заключено в двойные или одинарные кавычки
if($depth<3){
// если мы не слишком глубоко углубляемся в рекурсию
$links=split("href=",strip_tags($content,'<a>'));
foreach($links as $link){
$f=substr($link,0,1);
$link=substr($link,1);
if($f=='"' || $f=="'"){
$link=substr($l,0,strpos($link,$f));
// пропускаем ссылки, начинающиеся на http://, javascript: и пр.
if(strpos($link,'http://')===0 || strpos($link,'https://')===0 || strpos($link,'javascript:')===0 || strpos($link,'mailto:')===0 || strpos($link,'#')===0) continue;
}else{
//пропускаем ссылки без кавычек
continue;
}
// приводим ссылку к абсолютному виду
// тут тоже можно пооптимизировать
$diez=strpos($link,'#');
if($diez!==null){
$link=substr($link,0,$diez);
}
if(substr($link,0,1)!='/'){
$link=$uri.$link;
}
// рекурсивный вызов паука на очередную ссылку
spider($link, $depth+1);
}
}
}
// начальный вызов паука на корень сайта. Можно начинать его работу, например, и с карты сайта.
spider('/');
// оптимизируем таблицу индекса, а то она знатно раздувается.
db_query('optimize table search_index');
?>
|
| |
|
|
|
|
|
|
|
для: JIEXA
(18.04.2005 в 23:27)
| | Вообщето это настоящий подарок для начинающих спамеров, так, что теперь к ежедневно удаляемым 40 письмам добавится еще неопределенное количество! | |
|
|
|
|
|
|
|
для: $OMEGA
(20.04.2005 в 00:34)
| | Это пример скрипта - поисковика. Типа Яndex.ru | |
|
|
|
|
|
|
|
для: JIEXA
(20.04.2005 в 00:40)
| | То на, что это похоже, я понял, но к сожалению многим хорошим вещам, очень часто находят плохое применение. К стати у себя на сайте контактное мыло храню в виде:
<SCRIPT LANGUAGE="JavaScript">
<!--
user = "your_name";
site = "your_domain.ru";
document.write('<a href=\"mailto:' + user + '@' + site + '\">');
document.write( user + '@' + site + '</a>');
-->
</SCRIPT>
| , пока бог миловал! | |
|
|
|
|
|
|
|
для: JIEXA
(18.04.2005 в 23:27)
| | сам писал?) Это как я понял индексатор? | |
|
|
|
|
|
|
|
для: isset
(20.04.2005 в 00:40)
| | нет нашёл в инете давно, а тут комп очищал от мусора и наткнулся... Да индексатор | |
|
|
|
|
|
|
|
для: JIEXA
(20.04.2005 в 00:43)
| | Плохо что он одинаковые слова заносит, хотя это исправить быстро можно... | |
|
|
|
|
|
|
|
для: isset
(20.04.2005 в 00:50)
| | JIEXA , кстати, что у тебя с сайтом http://arseniev.noda.ru/? | |
|
|
|
|
|
|
|
для: isset
(20.04.2005 в 00:51)
| | не чего я снёс все оттуда, я и друг кмс делаем, думаю через месяц закончем и сообщим об этом на форуме здесь. | |
|
|
|
|
|
|
|
для: JIEXA
(20.04.2005 в 20:17)
| | а так сайт наш http://otvali.ru | |
|
|
|