Можно ли изменить интенсивность чтения страниц сервера пауком?

1 23
Elizov
На сайте с 17.06.2007
Offline
1
#21
XPraptor:
Нет, прерывать не вздумайте - это будет приравнено к 404. А как игнорирует? Снова заходит на эту страницу? А период захода не удлинился? Может он постепенно начнет снижать период захода, нужно просто попасти несколько страниц с отдачей 304, а остальные пока не трогать.

Вот и я так подумал, что прерывать исполнение скрипта слишком опасно.

А период захода паука не изменился (1-2 секунды). Мало того, почему-то на этот раз, паук остался на большее время: не 7 а целых 14 минут он беспрерывно сдергивал страницы (400 подряд, время генерации каждой где-то 0.4-2 сек), из-за чего поставил рекорд нагрузки:

2007-06-18 01:45:01 2007-06-18 02:00:00 14.18 % 4.25 min 3.14

В общем убрал я эту вставку с кодом 304 потому как ничего хорошего она не даст явно, скорее наоборот. В общем, делать тут нечего, пусть индексирует, только бы ночью он не напакостил. В любом случае придется как видно объясняться завтра с хостером.

Ещё раз ОГРОМНОЕ спасибо товарищам горе-разработчикам из яндекса за это чудо инженерной мысли 🙅

XPraptor
На сайте с 15.10.2004
Offline
333
#22

Что то мне подсказывает, что яндекс реагирует на 304 только на запрос HEAD а на обычный GET нет. В принципе тогда его нельзя отучить, можно попробывать если у вас php страницы и вы в заголовках отдаете дату создания/модификации автоматом - поставить статичную, может тогда он подумает подумает да изменит скорость обхода таких страниц.

А я вот на днях на всех сайтах своих убил в роботе Yahoo слурпа - тоже грузил по полной своими заходами. Теперь смотрю логи - красота, IP роботов не выскакаивают из 50-и, а с yahoo каждый день зашкаливали за 900.

Elizov
На сайте с 17.06.2007
Offline
1
#23

XPraptor, какие-либо попытки влиять на яндекс я отбросил - это бесполезно. Пока он не "насытится", всё будет по-прежнему.

XPraptor:
А я вот на днях на всех сайтах своих убил в роботе Yahoo слурпа - тоже грузил по полной своими заходами. Теперь смотрю логи - красота, IP роботов не выскакаивают из 50-и, а с yahoo каждый день зашкаливали за 900.

У меня Yahoo и Рамблер ведут себя вполне культурно, они тоже появляются на этих доменах, но интенсивность "поедания" страниц несравненно ниже. И хотя Рамблер поедает до 10 страниц в минуту, он делает паузы и в итоге нагрузок нет. Yahoo ещё скромнее - в минуту считывает не больше 5 файлов, видимо следует директивам файла robots.txt

User-Agent: *

Crawl-Delay: 10

A
На сайте с 12.04.2007
Offline
9
#24
john2007:
Кажется это Crawl-Delay в robots.txt, которая, работает в Yahoo и MSN, но к большому сожалению (если ничего не изменилось) ни в Яндексе ни в Гугле она не работает.

В гугле со страницы вэбмастера, можно замедлить скорость индексации.

seo.adman.com: покупка/продажа ссылок, рекламный брокер (http://seo.adman.com) vads.adman.com: свой рекламный брокер за 5 минут (http://vads.adman.com)
Elizov
На сайте с 17.06.2007
Offline
1
#25
adman:
В гугле со страницы вэбмастера, можно замедлить скорость индексации.

Правильно, но мы здесь не о "Большом брате" говорим, а о яндексе, в котором со стороны вебмастера нет НИКАКИХ возможностей изменить скорость индексации, кроме прямого запрета на индексирование :(

D
На сайте с 19.05.2006
Offline
38
#26

Господа, при 304 как раз ОБЯЗАТЕЛЬНО делать exit !

Но надо учитывать что 304 отдаётся в ответ на запрос содержащий заголовок If-Modified-Since. Примеров правильной логики обработки такого запроса масса.

Вот например кусочек кода... по мотивам обсуждения на xpoint.ru

В начале разбираемся какой заголовок отдать...

А в конце отдаём...


// Conditional GET

// Если Conditional Get не задан - просто отдаем файл.
if (!isset($_SERVER['HTTP_IF_NONE_MATCH']) && !isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
$return=200;
//echo "<br>_none";
// Conditional GET задан, проверка только по If-Modified-Since:
} elseif (!isset($_SERVER['HTTP_IF_NONE_MATCH']) && isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
//echo "<br>_first";
$unix_ims = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']);
//echo "<br>".$unix_ims;
// если ошибка Conditional GET - просто отдаем файл.
if ($unix_ims > time() || !is_int($unix_ims)) {
$return=200;
//echo "<br>bad date";
// Conditional GET корректен.
} else {
//echo "<br>good date";
if ($unix_ims >= $main['timestamp']) {
$return=304;
} else {
$return=200;
}
}
// Conditional GET задан, проверка только по If-None-Match:
} elseif (isset($_SERVER['HTTP_IF_NONE_MATCH']) && !isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
//echo "<br>_second";
$INM = split('[,][ ]?', $_SERVER['HTTP_IF_NONE_MATCH']); // массив значений If-None-Match
foreach($INM as $enity) {
// если копия файла в кеше клиента не устарела
if ($enity == "\"$page_hash\"") {
$return=304;
}
}
// проверка и по If-Modified-Since, и по If-None-Match:
} elseif (isset($_SERVER['HTTP_IF_NONE_MATCH']) && isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
$unix_ims = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']); // значение If-Modified-Since в UNIX формате
$INM = split('[,][ ]?', $_SERVER['HTTP_IF_NONE_MATCH']); // массив значений If-None-Match
// Ошибка Conditional Get - просто отдаем файл.
if ($unix_ims > time() || !is_int($unix_ims)) {
//echo "<br>bad get";
$return=200;
// Conditional GET корректен.
} else {
foreach($INM as $enity) {
// если копия файла в кеше клиента не устарела
if ($enity == "\"$page_hash\"" && $unix_ims >= $FILE_INFO[2]) {
$return=304;
}
}
}
}
session_write_close();

header("X-Powered-By: chetyre tarakana i sverchok");

// может и зря пыжились, вдруг это вообще 404 ?
if ( $template=='404' ) {
$return=404;
header("Content-Type: text/html; charset=utf-8");
header("Last-Modified: " . gmdate("D, d M Y H:i:s",time())." GMT");
header("HTTP/1.1 404 Not Found");
ob_end_flush();
} elseif ( $return==304 ) {
header("HTTP/1.1 304 Not Modified");
header('ETag: "'.$page_hash.'" ');
// сброс буфера
while(ob_get_level()) ob_end_clean();
exit;
//по умолчанию 200
} else {
header("Content-Type: text/html; charset=utf-8");
header('ETag: "'.$page_hash.'" ');
header("Last-Modified: " . gmdate("D, d M Y H:i:s",$main['timestamp'])." GMT");
header('Expires: '.gmdate("D, d M Y H:i:s", $expiries).' GMT');
ob_end_flush();
}

Для правильной обработки надо знать реальное время последнего изменения страницы. Как дополнительная мера - для роботов отдавать заголовок Expiries с текущим временем+скажем неделя. На проиндексированность сайта не влияет, а вот трафик экономит прилично.

Elizov
На сайте с 17.06.2007
Offline
1
#27
djatell:
Господа, при 304 как раз ОБЯЗАТЕЛЬНО делать exit !
Но надо учитывать что 304 отдаётся в ответ на запрос содержащий заголовок If-Modified-Since. Примеров правильной логики обработки такого запроса масса.
...
Вот например кусочек кода... по мотивам обсуждения на xpoint.ru
В начале разбираемся какой заголовок отдать...
А в конце отдаём...
...
Для правильной обработки надо знать реальное время последнего изменения страницы. Как дополнительная мера - для роботов отдавать заголовок Expiries с текущим временем+скажем неделя. На проиндексированность сайта не влияет, а вот трафик экономит прилично.

Благодарю за помощь, попробую установить подобный код в движок.

1 23

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий