Решил выложить скриптик что мы делали для своих нужд как-то. Уже раздавал в личку, пусть в теме наверное будет.
Инструкция:
1. Создаем файл index.php и кладем в какую-нибудь папку на сервере.
2. Запускаем и ждем, в папке начнут появляться отпарсенные страницы...
PHP код:
<?
error_reporting(0); // не показываем ошибки
set_time_limit(1800); // таймаут работы скрипта
ini_set('user_agent','Opera/9.52 (Macintosh; Intel Mac OS X; U; en)'); // Маскируемся
ini_set('default_socket_timeout','10'); // Исключаем большие таймауты запросов
if(@!$_GET['domen']){ // Форма
?>
<form name=f method=get action="index.php" onSubmit="if(f.domen.value!=''){if(confirm('Внимание! Удостоверьтесь, что адрес введён верно ('+f.domen.value+')\nВ кеше может оказать очень много страниц!\nВы уверены, что готовы дождаться результата копирования сраниц, это может занять много времени!')){self.location='?domen='+f.t.value}else{return false;}}else{alert('Не введён адрес сайта!');return false;}">
Введите домен для поиска и копирований результатов, сохранённых в кеше<br>
http://<input type=text name=domen size=40> <input type=submit value=" GO "></form>
<?
exit();
}
$domen = htmlspecialchars(trim($_GET['domen'])); if(substr($domen, 0, 4)=="www."){$domen=substr($domen,4);} // Домен
// Начальная страница
$firstpage = "http://www.google.com/search?num=100&hl=en&newwindow=1&safe=off&q=allinurl:".$domen."+site:".$domen."&start=0&sa=N&filter=0";
$dump = file_get_contents($firstpage);
// Ищем кол-во результатов
$phrase = "</b> of about <b>";
if(strstr($dump, $phrase)){
$pos = strpos($dump, $phrase);
}else{
$phrase = "</b> of <b>";
$pos = strpos($dump, $phrase);
}
if(!$pos){exit("Не найдено!");}
// Ищем кол-во страниц
$num = substr($dump, $pos+strlen($phrase));
$num = substr($num, 0, strpos($num, "</b> "));
$num = str_replace(",", "", $num);
$num = ceil($num/100);
if($num>100){$num=100;} // обрабатываем сотню страниц, ограничение в сотню страниц = хотя бы 10'000 сохранённых страниц
for($i=0;$i<$num;$i++){ // Генерим ссылки
$starturls[]="http://www.google.com/search?num=100&hl=en&newwindow=1&safe=off&q=allinurl:".$domen."+site:".$domen."&start=".($i*100)."&sa=N&filter=0";
}
array_unique($starturls); // Убираем дубликаты, на всякий случай
$data=''; $totnum=0; $cached=array(); $totsize=0;
$googledata = '</div></div></div><div style="position:relative">';
foreach($starturls as $starturl){ // Обрабатываем по страницам, по 100 ссылок на каждой
$data = file_get_contents($starturl);
$find="<span class=gl>"; // Строка для поиска
$num=substr_count($data, $find); // Кол-во найденных строк
$totnum+=$num;
echo "<br><br><b>".round(strlen($data)/1024, 3)." кб</b><br><b>$num вхождений</b><br>";
if($num==0){exit("нет вхождений");}
for($i=0;$i<$num;$i++){
$data = substr($data, strpos($data, $find)+1); // Находим начало строки
$url = substr($data, strpos($data, 'href="')+6); // находим в ней ссылку
$url = substr($url, 0, strpos($url, '"')); // вырезаем ссылку
$page = $url;
$page = substr($page, strpos($page, "cache:")+6); // находим название страницы
$page = substr($page, strpos($page, ":")+1); // вырезаем от начала
$page = substr($page, 0, strpos($page, "+")); // и до конца
$page = str_replace("/", "-", $page); // заменяем символы для записи
if(in_array($page, $cached)){ // Если уже сохраняли, пропускаем
$res="<font color=blue>Already copied!!!</font>";
$size=0;
$totnum--;
}else{
if($pagedata=file_get_contents($url)){ // Получаем файл
if($gpos=strpos($pagedata, $googledata)){$pagedata = substr($pagedata, $gpos+strlen($googledata)+1);} // Убираем гугловскую шапку
file_put_contents($page, $pagedata); // Сохраняем файл
$res="<font color=green>OK</font>";
$size=round(filesize($page)/1024,3);
$totsize+=$size;
}else{ // Если не удалось скачать
$res="<font color=red>ERROR</font>";
$size=0;
}
}
echo ($i+1).") ".$page." - ".$res." (".$size." кб)<br>\n";
$cached[]=$page; // Сохраняем адреса скачанных страниц, чтоб не повторяться
}
array_unique($cached); // Убираем дубликаты
}
echo "<hr>Всего ".$totnum." страниц, ".$totsize." кб.";
?>
Если кто доработает или оптимизирует, буду только рад, писалось как обычно на скорую руку за полчаса. Но вроде всё нормально работает..