| |
|
|
| | реально ли сделать, чтобы зайдя на страницу скрипт просканил ее на наличие ссылок, сохранил их и потом открыл бы их? (хотя бы сохранил) | |
| |
|
|
|
| |
|
|
| |
для: Unkind™
(04.05.2006 в 19:55)
| | | вот :
<?
for ($start=0, $end=9; $start <= $end; $start++) {
file_get_contents("http://www.site.ru/index.php");
}
?> | |
| |
|
|
| |
|
|
| |
для: ZetRider
(04.05.2006 в 20:17)
| | | Вот паук, непомню кто-то уже выкладывал его на этом форуме =)
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#]+icon_wink.gif/', ' ', 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://, ja<b>
if(strpos($link,'http://')===0 || strpos($link,'https://')===0 || strpos($link,'ja<b>
}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');
?>
|
| |
| |
|
|
| |
|
|
| |
для: CrazyAngel
(05.05.2006 в 03:35)
| | | CrazyAngel, что то в этом есть | |
| |
|
|
| |
|
|
| |
для: ZetRider
(04.05.2006 в 20:17)
| | | ZetRider, начало положено:) | |
| |
|
|
| |
|
|
| |
для: Unkind™
(04.05.2006 в 19:55)
| | | это совсем другое!!! | |
| |
|
|
| |
|
|
| |
для: P@Sol
(05.05.2006 в 09:48)
| | | Как? он собирает все ссылки с адруса, все емайлы, потом по ссылкам переходит | |
| |
|
|
| |
|
|
| |
для: CrazyAngel
(05.05.2006 в 10:24)
| | | это предложение было для Unkind™ | |
| |
|
|
| |
|
|
| |
для: P@Sol
(05.05.2006 в 11:09)
| | | =), понятно | |
| |
|
|
| |
|
|
| |
для: CrazyAngel
(05.05.2006 в 11:25)
| | |
// пропускаем ссылки, начинающиеся на http://, ja<b>
if(strpos($link,'http://')===0 || strpos($link,'https://')===0 || strpos($link,'ja<b>
}else{
//пропускаем ссылки без кавычек
continue;
}
|
1.тут что то пропущено..
2.при запуске пишет, что конец у этого кода не ожиданный:( по скобкам все ок...где ошибка не понимаю:( | |
| |
|
|
| |
|
|
| |
для: P@Sol
(05.05.2006 в 11:09)
| | | P@Sol, я ваш первый пост не читал фактически...=)) | |
| |
|
|