Блог фрилансера - сайты под ключ

Парсер Liveinternet

Просмотров: 7288Комментарии: 0
Полезное

парсер liveinternetНа тему парсера самой разной информации я уже писал не раз. Но, как и обещал в прошлом месяце, для тех кто хочет разобраться как работает простейший парсер, а не просто использовать уже готовый продукт, выкладываю фрагменты кода с пояснениями – что как работает. За основу взял один из моих пробных парсеров под Liveinternet который я набросал в свободное от фриланса время. Была идея вытаскивать ключевые слова, по которым переходят с поисковиков. Потом эти ключевики можно использовать либо для перелинковки, либо для облака тегов, либо как то ещё, в целях увеличения количества релевантных страниц.

Что бы не загружать сервис статистики запросами, а то ведь могут и по IP забанить, решил, что одного запроса в сутки будет достаточно. То есть, записываем содержание страницы, с которой будем вытаскивать нужную информацию, в текстовый файл и дальше работаем уже с ним. Для примера возьмем страницу, на которой выводятся позиции в Яндексе. Адрес этой страницы liveinternet.ru/stat/ваш_сайт/yandex.html. Вместо ваш_сайт вставляете свой url без http и www.

$filename = 'yandex.txt';
$url = 'http://www.liveinternet.ru/stat/ваш_сайт/yandex.html';
    // Закачка страницы
   	// Произвести проверку на то, что файл уже закачен
	if (!file_exists($filename)) {
		// Закачать и сохранить
		download($url, $filename);
	}
	
	// Проверка времени и обновление если устарел
	if (time() > filemtime($filename) + 60*60*24) {
		// Закачать и сохранить
		download($url, $filename);	
	}
   function download($url, $filename) {
		// Закачать файл с указанного URL и сохранить с определенным именем
		$file = file_get_contents($url);
		if ($file) file_put_contents($filename, $file);
	}

Итак, мы получили файл yandex.txt в котором записана запрошенная нами страница, и в течении 24 часов этот файл не будет перезаписываться при повторных обращениях скрипта (например при многократном открытии страницы на которую будет выводить инфу скрипт парсера). Далее работаем только с этим файлом. Для того что бы вытащить только ключевики и номер позиции в ТОП Яндекса, нам нужно убрать всё лишнее.

$content = file_get_contents('yandex.txt');
// Определяем позицию строки, до которой нужно все отрезать (используем функцию strpos()).
$pos = strpos($content, "<tr align=right bgcolor=\"#dddddd\">");
/*Отрезаем все, что идет до нужной нам позиции (функция substr в данном случае принимает два параметра: строка для обработки и //номер позиции. Функция вернет строку, НАЧИНАЯ с указанной позиции) */
$content = substr($content, $pos);
// Точно таким же образом находим позицию второй строки
$pos = strpos($content, "<td bgcolor=#ffffff colspan=10>");
// Отрезаем нужное количество символов от нулевого
$content = substr($content, 0, $pos);
//Вырезаем всё что нам не нужно функцией поиск-замена
$content = preg_replace('/<input type=checkbox.*?[>^]/i', '', $content);
$content = preg_replace('/<label.*?[>^]/i', '', $content);
$content = str_replace('</label>', '', $content);
//добавляем редирект, нам ведь лишние исходящие ссылки не нужны
$content = str_replace('href="http://www.', 'target="_blank" href="http://ваш_сайт/redirect.php?http://', $content);

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

<tr align=right bgcolor="#dddddd">
- начало первой строки таблицы вывода ключевиков. То же самое и со строкой, до которой нам нужно вывести информацию, что бы все, что идёт дальше не выводить.

Функция

str_replace('1позиция', '2позиция', переменная);
и preg_replace ищут то что мы указываем в первой позиции, заменяют на то что мы указываем во второй позиции и выводят в переменную получившийся результат. Если во второй позиции ничего не указать то найденный код будет просто вырезан. Как, например, в этой строчке
str_replace('</label>', '', $content);
Все найденные
</label>
будут удаленны в выводе результатов работы скрипта. Эти функции практически одинаковы, но preg_replace используется для поиска с заменой по регулярным выражениям, а str_replace для поиска с заменой по фрагментам кода или текста.

Теперь нам осталось только оформить вывод позиций в удобочитаемом виде, например в виде таблицы, как в оригинале. Для этого добавляем ещё немного кода

echo '<center><table border="1"><tr align="center" bgcolor="#E8FFD1"><td  colspan="6"><strong>Позиции в Яндекс</strong></td></tr><tr><td></td><td>Поисковая фраза</td><td>позиция сегодня</td><td>позиция вчера</td><td>позиция за 2 дня</td><td>позиция за 7 дней</td></tr>';
echo $content;

freelance

Вот в принципе и весь парсер. Кстати, на подобного рода скрипты, только конечно же намного сложнее и функциональнее, большой спрос на биржах фрилансеров. По такому же принципу можно вывести позиции в Гугле, точки входа, заголовки страниц и ещё много разной информации. И всё это применяя всего лишь несколько стандартных функций php. Во многих случаях можно обойтись и меньшим набором, а в некоторых случаях придётся прилично повозиться, используя регулярки и двойные замены одного кода на другой. Так например у меня в выводе страниц входа присутствуют лишние точки, а к заголовкам страниц не мешало бы прикрутить прямые ссылки на эти самые страницы.

Оставьте комментарий!

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question


Комментарий будет опубликован после проверки

     

  

(обязательно)