Фух вроде доделал скрипт.
Код
<?php
// Задаем заголовки чтобы по русски отображалось нормально
echo '<html xml:lang="ru-ru" lang="ru-ru" >';
echo '<head><meta http-equiv="content-type" content="text/html; charset=utf-8" /></head>';
echo "Парсер от t800 :-) <br/><br/>";
set_time_limit(0); // это для того чтобы скрипт не отвалился через 30 секунд
//подгружаем библиотеку Simple HTML Dom
require_once 'library/simplehtmldom.php';
/* Теперь сам скрипт */
$i=1;
// Указваем количество страниц сколько хочем спарсить
$n=5;
// Пишем дату сверху в файл куда пишем то что будем парсить
$time = date('Y:m:d:H:i');
$fp = fopen("parse.txt", "w"); // Открываем файл в режиме записи
$test = fwrite($fp,$time . "\r\n");
fclose($fp); //Закрытие файла
// Указываем адрес карты сайта (файла sitemap.xml) откуда берем ссылки страниц которые надо парсить
$sitemap = "http://site.ru/sitemap.xml";
// загружаем файл sitemap
$xml = simplexml_load_file($sitemap);
// Извлекаем ссылки из файла sitemap.xml
foreach ($xml->url as $url_list) {
$url = $url_list->loc;
// вызываем нашу функцию parse() с указанием url страницы которую надо спарсить
parse($url);
// Выводим инфу о загрузке
echo " *** Загружено: ".$i." из ".$n." страниц *** \r\n ";
echo "<br>";
echo str_pad('',4096)."\n";
echo str_pad('',4096)."\n";
flush();
// Тут проверка условия на то сколько спрарсили страниц и выход из скрипта если уже спарсили сколько задано
if($i++>=$n){
echo " *** Готово! *** ";
exit;
}
}
// Здесь парсим страницу с url нашей фукцией parse()
// А это код нашей функция parse()
function parse($url)
{
$data = @file_get_contents($url); // собачка нужна в если сервер нам вернул 404, это вызовет Warning:, поэтому экранируем ошибки
if(trim($data)=='')return false; // бывает что сайт недоступен, тогда страницy не грузим а выходим из функции
//создаём новый объект
$html = new simple_html_dom();
//загружаем в него данные
$html = @file_get_html($url); // собачка нужна в если сервер нам вернул 404, это вызовет Warning:, поэтому экранируем ошибки
//проверяем что спарсили страничу с товаром (проверку делаем по цене) если цены нету то выходим из функции
$ret = $html->find('div[class=item_current_price]', 0);
if ($ret==null) return false;
//находим путь категории на странице ...
foreach($html->find('ul[class=breadcrumb-navigation]') as $ul)
{
foreach($ul->find('li') as $li)
{
foreach($li->find('a') as $a)
{
echo $a->plaintext . '/';
$catalog = $a->plaintext . '/';
$fp = fopen("parse.txt", "a"); // Открываем файл в режиме дописывания
$test = fwrite($fp, $catalog ); // Запись в файл
fclose($fp); //Закрытие файла
}
}
}
//echo '<br/>';
$fp = fopen("parse.txt", "a"); // Открываем файл в режиме дописывания
// находим название
foreach($html->find('h1[class=header_grey]') as $element) echo $element->plaintext;
//echo '<br>';
$test = fwrite($fp, $element->plaintext ); // Запись в файл
if ($test) echo '';
else echo 'Ошибка при записи в файл.';
// находим цену
foreach($html->find('div[class=item_current_price]') as $element) echo '';
$test = fwrite($fp, $element->plaintext ); // Запись в файл
if ($test) echo '';
else echo 'Ошибка при записи в файл.';
// находим картинку
foreach($html->find('a[class=fancy bx_bigimages_aligner]') as $element) echo '';
$url_img = "http://site.ru/" . $element->href;
// извелкаем имя файла картинки из url картинки
$file_name= substr($url_img, strrpos($url_img,"/")+1, strlen($url_img)-strrpos($url_img,"/")); //Retrive file name from url
// задаем папку куда картинку сохранять
$img_path = "./images/".$file_name;
$test = fwrite($fp, $img_path ); // Запись в файл
if ($test) echo '';
else echo 'Ошибка при записи в файл.';
// Закачиваем и сохраняем изображение
grab_image($url_img,$img_path);
// находим краткие характеристики
foreach($html->find('div[class=props_top]') as $element) $test = fwrite($fp, $element); // Запись в файл
// находим полные характеристики
foreach($html->find('div[class=left_prop]') as $element) $test = fwrite($fp, $element); // Запись в файл
foreach($html->find('div[class=left_value]') as $element) $test = fwrite($fp, $element); // Запись в файл
// Записываем концы строк
$test = fwrite($fp, "\r\n" );
fclose($fp); //Закрытие файла
//в конце освобождаем ресурсы (не знаю зачем это надо, но говорят, что надо, иначе скрипт может зависнуть)
$html->clear();
unset($html);
}
// Это функция grub_image() че картинки скачивает сurl-ом и сохраняет (взята из комментариев на Stack Overflow)
// ЗЫ сurl-ом потому что curl-ом быстрее скачивается
function grab_image($url,$saveto){
$ch = curl_init ($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
$raw=curl_exec($ch);
curl_close ($ch);
if(file_exists($saveto)){
unlink($saveto);
}
$fp = fopen($saveto,'x');
fwrite($fp, $raw);
fclose($fp);
}
?>
Скрипт работает вот так:
http://wiki.kvkozyrev.org/parser/parser7.php