PHP парсинг – парсер яндекс каталога
Привет, друзья! Сегодня я хочу вам показать, как написать скрипт который будет проверять наличие сайта в Яндекс каталоге или говоря проще – парсер яндекс каталога. Для всего этого мы будем пользоваться стандартными функциями PHP.
И так, приступим!
Первым делом мы будем получать содержимое страницы, которое формируется исходя из результата поиска в ЯК. Для этого мы будем пользоваться функцией – file_get_contents. В качестве параметра, которое мы будем передавать функции, используется ссылка на поиск в ЯК с нашим доменом.
Пример получения содержимого страницы:
$url = "makarou.com";
$file = file_get_contents('http://search.yaca.yandex.ru/yandsearch?text='.$url.'&rpt=rs2');
$url – домен нашего сайта.
После того как мы получили содержимое страницы, нам нужно распарсить нужное нам значение и получить вывод: есть сайт в ЯК или нет его там совсем. Для этого мы воспользуемся регулярным выражением.
Пример регулярного выражения:
preg_match('!нигде\sне\sвстречается!ism',$file);
Как видно из примера мы ищем в содержимом страницы строку – нигде не встречается.
Вот теперь мы можем соединить весь код воедино и поглядеть, что из этого получилось.
Полный код – парсер яндекс каталога:
$url="makarou.com";
$file = file_get_contents('http://search.yaca.yandex.ru/yandsearch?text='.$url.'&rpt=rs2');
if (preg_match('!нигде\sне\sвстречается!ism',$file)){
echo 'Сайта <b>'.$url.'</b> нет в каталоге';
}else{
echo 'Сайт <b>'.$url.'</b> есть в каталоге';
}
Посмотреть – demo.
Как видно из примера, если регулярное выражение находит строку – нигде не встречается, то мы выводим надпись “сайта нет в каталоге” и если надпись не находит, то соответственно выводим надпись “сайт есть в каталоге”.
Этот способ подходит для проверки максимум 5 сайтов одновременно. Но чтобы решить проблему массовой проверки сайтов, я решил написать новый парсер, который может делать одиночную и массовую проверку.
Полный код – новый парсер яндекс каталога:
$url="makarou.com";
$xml=simplexml_load_file("http://bar-navig.yandex.ru/u?ver=2&url=http://".$url."/&show=1");
if(!$xml->topics->topic['title'] and !$xml->topics->topic['url']){
echo 'Сайта <b>'.$url.'</b> нет в каталоге';
}else{
echo 'Сайт <b>'.$url.'</b> есть в каталоге';
}
Посмотреть - demo.
Вот и всё дорогие друзья, надеюсь, вам окажется это полезным, ну или вашим друзьям.

че-то у меня не получается…
На практике все намного хуже чем в данной статье. После нескольких запросов Яндекс возвращает не результат, а капчу.. ПОэтому…
Сам лично делал массовую проверку, и яндекс возвращал нужный результат.
А ты попробуй запросов 10 отправить.. с маленьким интервалом… посмотрим что тебе Яндекс в ответ выведет.
Я делал проверку по 4-5 сайтов, с интервалом в 1 секунду для каждого сайта. Яндекс возвращал нужный результат.
Мое мнение: Должны быть рамки разумного для применения этого скрипта, так как массовая проверка от 10 и выше сайтов с низким интервалом под силу только Curl или сокетам. Так же можно проверку сделать с помощью парсинга XML (яндекс – бара).
acsy, правильно ты заметил, такой скрапт можна использлваь где угодно
А есть парсер всех сайтов с Яка? То есть мне нужна база всех сайтов находящихся в Яке. И сколько стоит написать его?
Лично у меня его нет, можете поискать в гугле готовое решение. А вот написать готовый скрипт я даже незнаю сколько точно. Фрилансеры возьмут не меньше 60-70$
А зачем это нужно? Можно просто зайти и посмотреть каталог