Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: скрипт - паук
 
 автор: JIEXA   (18.04.2005 в 23:27)   письмо автору
 
 

Вот код паука, может кому пригодится...
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://')===|| strpos($link,'https://')===|| strpos($link,'javascript:')===|| strpos($link,'mailto:')===|| 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'); 
?>  

   
 
 автор: $OMEGA   (20.04.2005 в 00:34)   письмо автору
 
   для: JIEXA   (18.04.2005 в 23:27)
 

Вообщето это настоящий подарок для начинающих спамеров, так, что теперь к ежедневно удаляемым 40 письмам добавится еще неопределенное количество!

   
 
 автор: JIEXA   (20.04.2005 в 00:40)   письмо автору
 
   для: $OMEGA   (20.04.2005 в 00:34)
 

Это пример скрипта - поисковика. Типа Яndex.ru

   
 
 автор: $OMEGA   (20.04.2005 в 00:58)   письмо автору
 
   для: 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>
, пока бог миловал!

   
 
 автор: isset   (20.04.2005 в 00:40)   письмо автору
 
   для: JIEXA   (18.04.2005 в 23:27)
 

сам писал?) Это как я понял индексатор?

   
 
 автор: JIEXA   (20.04.2005 в 00:43)   письмо автору
 
   для: isset   (20.04.2005 в 00:40)
 

нет нашёл в инете давно, а тут комп очищал от мусора и наткнулся... Да индексатор

   
 
 автор: isset   (20.04.2005 в 00:50)   письмо автору
 
   для: JIEXA   (20.04.2005 в 00:43)
 

Плохо что он одинаковые слова заносит, хотя это исправить быстро можно...

   
 
 автор: isset   (20.04.2005 в 00:51)   письмо автору
 
   для: isset   (20.04.2005 в 00:50)
 

JIEXA , кстати, что у тебя с сайтом http://arseniev.noda.ru/?

   
 
 автор: JIEXA   (20.04.2005 в 20:17)   письмо автору
 
   для: isset   (20.04.2005 в 00:51)
 

не чего я снёс все оттуда, я и друг кмс делаем, думаю через месяц закончем и сообщим об этом на форуме здесь.

   
 
 автор: JIEXA   (20.04.2005 в 20:18)   письмо автору
 
   для: JIEXA   (20.04.2005 в 20:17)
 

а так сайт наш http://otvali.ru

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования