ТОП10 Волгоград -

Исторический материал из архива сайта. Указанные услуги и контакты относятся ко времени публикации и не являются действующим предложением.

ТОП10 Волгоград -

Парсинг выдачи Яндекс

Парсинг выдачи Яндекс

Парсинг - это сбор информации с интернет страницы. В этой статье мы рассмотрим парсинг страниц выдачи Яндекса средствами PHP.

Получать содержимое строки будет функцией PHP file_get_contents, в справочнике её синтаксис выглядит вот так:

string file_get_contents ( string filename [, bool use_include_path [, resource context [, int offset [, int maxlen]]]] )

Отсюда мы видим, что функция возвращает переменную строкового типа, однако в случае не удачи будет булев тип false, что удобно использовать в условиях.

В качестве первого параметра необходимо указать имя файла, в нашем случае это URL нужной страницы.

Теперь посмотрим, как нам парсить выдачу Яндекса, попробуем в поисковый запрос ввести "ТОП10 Создание и продвижение сайтов", получим ссылку такого вида:

http://yandex.ru/yandsearch?text=%D2%CE%CF10+%D1%EE%E7%E4%E0%ED%E8%E5+%E8+%EF%F0%EE%E4%E2%E8%E6%E5%ED%E8%E5+%F1%E0%E9%F2%EE%E2&lr=38

Итак, можно сделать вывод, что строка "ТОП10 Создание и продвижение сайтов" преобразовалась в "%D2%CE%CF10+%D1%EE%E7%E4%E0%ED%E8%E5+%E8+%EF%F0%EE%E4%E2%E8%E6%E5%ED%E8%E5+%F1%E0%E9%F2%EE%E2", а меняя параметр lr можно догадаться, что это код региона, при чем 38 соответствует Волгограду.

Но парсить ТОП 10 не имеет смысла, мало сайтов попадают в выдачу, максимум, что может выдать Яндекс - 50 результатов, для этого в URL запроса добавим "numdoc=50".

Таким образом формат URL выглядит вот так:

http://yandex.ru/yandsearch?text=[строка запроса в формате RFC1738]&lr=[код региона]&numdoc=50

Для поиска на нужной странице используется параметр "p", когда он равен 0, мы на первой странице, 1 - на второй.

В начале PHP сценария создадим 4 переменные с использованием тернарных операторов, ищущих значения в массиве $_POST, это пригодится нам позднее, для создания ajax запросов.

$sTextSearh = (empty($_POST['text_search'])) ? 'ТОП 10 Создание и продвижение сайтов' : $_POST['text_search'];

$iRegion = (empty($_POST['region'])) ? 38 : $_POST['region'];

$iPage = (empty($_POST['page'])) ? 0 : $_POST['page'];

Что бы преобразовать русские буквы в строку вида %3D, здесь перед каждой буквой стоит знак процента и код символа в 16-ричном формате воспользуемся функцией rawurlencode(). Однако, здесь есть одно "но". Яндекс в качестве пробелов подставляет знак плюс, а данная функция "%20", хотя, судя по экспериментам, Яндексу все равно какой "пробел" использовать в строке URL. Получается, что формируем строку запроса следющими строками PHP кода:

$sSearch1738 = rawurlencode($sTextSearh);

$sQueryString = "http://yandex.ru/yandsearch?text=".$sSearch1738."&lr=".$iRegion."&p=".$iPage;

Выводить результат будем через echo, это опять же поможет при ajax запросах. В целом весь код получается такого вида:

<?

//Если передана переменная $_POST['text_search'], то сохраняем её, иначе текст по умолчанию

$sTextSearh = (empty($_POST['text_search'])) ? 'ТОП 10 Создание и продвижение сайтов' : $_POST['text_search'];

$iRegion = (empty($_POST['region'])) ? 38 : $_POST['region'];

$iPage = (empty($_POST['page'])) ? 0 : $_POST['page'];

//Формирование URL документа

$sSearch1738 = rawurlencode($sTextSearh);

$sQueryString = "http://yandex.ru/yandsearch?text=".$sSearch1738."&lr=".$iRegion."&p=".$iPage;

//Загружаем страничку в строковую переменную

$sContentPage = file_get_contents("http://ya.ru/", 1);

$sContentPageNC = iconv("UTF-8", "CP1251", $sContentPage);

//Выводим результат в нормальной кодировке

echo $sContentPageNC;

?>