ТОП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;
?>