@progect[0].parser

автор: systemiv

<?php
/*
 * Настройки
*/
$startPage = 'http://city.ukr.net/';
 
/*
 * Глобальные переменные
*/
$cityArray = array(
	'kiev' => 'Киев',
	'vinnitsa' => 'Винница',
	'dnepropetrovsk' => 'Днепропетровск',
	'donetsk' => 'Донецк',
	'zhitomir' => 'Житомир',
	'zaporozhje' => 'Запорожье',
	'ivano-frankovsk' => 'Ивано-Франковск',
	'kirovograd' => 'Кировоград',
	'crimea' => 'Крым',
	'lugansk' => 'Луганск',
	'lutsk' => 'Луцк',
	'lvov' => 'Львов',
	'nikolaev' => 'Николаев',
	'odessa' => 'Одесса',
	'poltava' => 'Полтава',
	'rovno' => 'Ровно',
	'sumy' => 'Сумы',
	'ternopol' => 'Тернополь',
	'uzhgorod' => 'Ужгород',
	'kharkov' => 'Харьков',
	'herson' => 'Херсон',
	'hmelnitskij' => 'Хмельницкий',
	'cherkassy' => 'Черкаcсы',
	'chernigov' => 'Чернигов',
	'chernovtsy' => 'Черновцы'
);
 
/*
 * Подключаем библиотеки
*/
require_once 'Snoopy.class.php';
 
/*
 * Создаём экземпляр класса
*/
$snoopy = new Snoopy();
$snoopy->agent = 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1';
$sqlConnect = mysql_connect('localhost','root', 'root');
mysql_select_db('ukr_net', $sqlConnect);
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");
 
/*
 * Получаем все категории, во всех городах
*/
foreach($cityArray as $cityKey => $cityValue){
    $urlSnoopy = $startPage.$cityKey;
	$snoopy->fetch($urlSnoopy);
	preg_match_all('@<div class="title">\n<a href="(http:\/\/city.ukr.net\/'.$cityKey.'\/.*?\/index.html)">(.*?)<\/a>@is', $snoopy->results, $categoryArray);
 
/*
 * Получаем все подкатегории, полученых категорий
*/
	for($i = 0; $i < count($categoryArray[1]); $i++){
	    $urlSnoopy = $categoryArray[1][$i];
		$snoopy->fetch($urlSnoopy);
		preg_match_all('@<div class="subtitle">\n<a href="(http:\/\/city.ukr.net\/'.$cityKey.'\/.*?\/.*?\/index.html)">(.*?)<\/a>@is', $snoopy->results, $subCategoryArray);
 
/*
 * Получаем отдельные рекламные блоки со всех страниц
*/
		for($j = 0; $j < count($subCategoryArray[1]); $j++){
		    $urlSnoopy = $subCategoryArray[1][$j];
			$snoopy->fetch($urlSnoopy);
			preg_match_all('@<h2><\!--BOT_URL_BEGIN(.*?)<div class="cl">@s', $snoopy->results, $listBlock);
			$listBlock = $listBlock[1];
 
/*
 * Каждый рекламный блок запихиваем в массив, с доп. данными о его родителях
*/
			for($k = 0; $k < count($listBlock); $k++){
				$tempResult = array();
				$tempResult['city'] = $cityValue;
				$tempResult['category'] = $categoryArray[2][$i];
				$tempResult['subcategory'] = $subCategoryArray[2][$j];
 
				preg_match('@BOT_URL_END--><span> \- (.*?)</span>@is', $listBlock[$k], $dataType);
				if(isset($dataType[1])){
				    $tempResult['type'] = $dataType[1];
				}else{
				    $tempResult['type'] = '';
				}
 
				preg_match('@BOT_URL_BEGIN-->(.*?)<\!--BOT_URL_END@is', $listBlock[$k], $dataName);
				if(isset($dataName[1])){
				    $tempResult['name'] = $dataName[1];
				}else{
				    $tempResult['name'] = '';
				}
 
				preg_match('@Телефон: (.*?)</div>@is', $listBlock[$k], $dataPhone);
				if(isset($dataPhone[1])){
				    $tempResult['phone'] = $dataPhone[1];
				}else{
				    $tempResult['phone'] = '';
				}
 
				preg_match('@<div class="contacts">(.*?), '.$cityValue.'@is', $listBlock[$k], $dataAddres);
				if(isset($dataAddres[1])){
				    $tempResult['address'] = $dataAddres[1];
				}else{
				    $tempResult['address'] = '';
				}
 
				preg_match('@<a href="(.*?)" target="_blank" onmouseup=".*?">@i', $listBlock[$k], $dataLink);
				if(isset($dataLink[1])){
				    $tempResult['link'] = $dataLink[1];
				}else{
				    $tempResult['link'] = '';
				}
 
				$sqlQuery = sprintf("INSERT INTO dataPars (`city`, `category`, `subcategory`, `type`, `name`, `phone`, `address`, `link`) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')",
				    $tempResult['city'],
				    $tempResult['category'],
				    $tempResult['subcategory'],
				    $tempResult['type'],
				    $tempResult['name'],
				    $tempResult['phone'],
				    $tempResult['address'],
				    $tempResult['link']
				);
				mysql_query($sqlQuery, $sqlConnect);
			}
		}
	}
}
mysql_close($sqlConnect);