Грабберы контента с других сайтов
Грабберы контента - это специальные скрипты или программы, которые получают некоторую информацию напрямую из текста html-страниц других сайтов, чаще всего без их ведома или разрешения. Название произошло от транскрипции английского глагола "to grab" - "захватывать", "использовать", хотя и русский вариант корня "грабить" тоже иногда подходит. Вообще, тырить чужой контент и использовать его на своих сайтах нехорошо. Но в некоторых случаях считаю это допустимым, например, когда для мобильных устройств требуется получить облегченные версии страниц сайтов, которые не имеют такой штатной функции. Или же надо удалить со страницы всякую рекламу, а то некоторые ублюдочные сайты умудряются заталкивать баннеры даже в RSS-ленты. Или, например, если требуется получать информацию с сайтов, у которых нет собственных API для выгрузки контента.Самый простой способ получить текст нужной html-страницы сайта - при помощи функции PHP file_get_contents. Текст загруженной страницы разбирается регулярными выражениями. Вот пример граббера для Цитатника Рунета. После извлечения цитат с главной страницы можно вывести их все списком, как сделано в этом примере, или показать случайным образом одну из них.
Code (PHP) : Убрать нумерацию
- <?
- //-----------------------------------------------------------
- // Граббер цитат с Цитатника Рунета bash.org.ru
- // Загружает и парсит главную страницу, цитаты помещает в массив
- //-----------------------------------------------------------
- // Получить html-страницу
- $grab=@file_get_contents("http://bash.org.ru");
- if ($grab) {
- // Заменить теги переноса строки на простые переносы строки
- $grab=str_replace("<br>","\n",$grab);
- // Получить регулярным выражением тексты цитат
- preg_match_all("/<div class=\"vote\">([^>]*>){12}([^<]*)/",$grab,$matches);
- // В массиве содержатся все найденные строки
- for ($i=0; $i<count($matches[2]); $i++) {
- echo nl2br($matches[2][$i]);
- echo '<hr>';
- }
- }
- else {
- echo "Connection Error";
- }
- ?>
Еще один простой граббер курса доллара с Яндекса. Там хранятся данные о курсе аж с 1998 года и по сегодняшнюю дату включительно. Но в этом случае список упорядочен в CSV-файле. Такой список удобнее всего загрузить функцией file и обработать полученный массив.
Code (PHP) : Убрать нумерацию
- <?
- //-----------------------------------------------------------
- // Граббер курса доллара с Яндекса
- // Загружает в массив курс доллара за период с 01.01.1998 по
- // сегодняшнее число
- //-----------------------------------------------------------
- // Получить csv-файл и занести его в массив
- $grab=@file("http://www.yandex.ru/s/1.csv");
- if (count($grab)) {
- for ($i=0; $i<count($grab); $i++) {
- // Разобрать строку массива на дату и курс
- list($v_date, $v_kurs)=explode(";",$grab[$i]);
- echo "Дата: ".$v_date." - Курс: ".$v_kurs;
- echo '<hr>';
- }
- }
- else {
- echo "Connection Error";
- }
- ?>
Code (PHP) : Убрать нумерацию
- <?
- //-----------------------------------------------------------
- // Граббер ссылок с премиум-аккаунта RapidShare.com
- // Загружает в массив список файлов, хранящихся на аккаунте
- //-----------------------------------------------------------
- // Логин и пароль от вашего премиум-аккаунта
- $login="тут_ваш_логин";
- $password="тут_ваш_пароль";
- // Установить URL для загрузки
- $url="https://ssl.rapidshare.com/cgi-bin/premiumzone.cgi?export=1";
- // Установить Cookies для авторизации
- $cookie="user=".$login."-".urlencode($password);
- // Инициализация CURL
- $ch=curl_init();
- // Установка URL и всех необходимых значений
- curl_setopt($ch,CURLOPT_URL, $url);
- curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch,CURLOPT_HEADER,0);
- curl_setopt($ch,CURLOPT_COOKIE,$cookie);
- curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);
- // Выполнить запрос и получить результат
- $output=curl_exec($ch);
- $info=curl_getinfo($ch);
- if ($output!==false) {
- // В массиве $links список ссылок
- $links=explode("\n",$output);
- }
- else {
- echo "Connection Error: ".curl_error($ch);
- }
- ?>
Как защититься от автоматического извлечения контента? Если используются только функция file_get_contents или file, то достаточно проверять поле USER_AGENT и блокировать доступ на сайт, если это поле пустое. К сожалению (или к счастью?) этот способ не будет работать при использовании граббером библиотеки CURL или сокетов с эмуляцией всех заголовков браузера, тут поможет только бан по ip сервера, с которого выполняется граббинг. Это, кстати, практикует Яндекс, блокируя ip-адреса, с которых слишком часто вызываются одни и те же страницы.
Просмотров: 50413 | Комментариев: 17
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(02.07.2013 в 15:31):
Разве мой предыдущий комментарий непонятен?
Александр
(02.07.2013 в 15:25):
Помогите пожалуйста сделать так что бы получать только варианты
[del]
а то парсится всё что есть
[del]
а то парсится всё что есть
ManHunter
(13.01.2013 в 23:07):
Я НИКОМУ не пишу ни на скайп, ни на почту, никуда. Кому чо надо - отправляете письмо на обратную связь с подробнейшим описанием задачи и ТОЧНОЙ СУММОЙ, которую вы заплатите. А дальше посмотрим.
Максим
(12.12.2012 в 11:49):
ManHunter, Привет! Напиши мне в скайп договоримся.
Арутр
(08.11.2011 в 19:52):
а как еще можно вывести дату
Максим
(04.01.2011 в 15:04):
А я вот для парсинга использую DOM модель.
Deregan
(01.12.2010 в 20:35):
Спасибо Вам!!! Очень полезная информация!
ManHunter
(30.06.2010 в 12:36):
Руками. Если не умеешь руками, то платишь деньги тому, кто умеет.
Алексей
(30.06.2010 в 12:32):
Как можно сделать граббер для прокси? Например, с сайта http://fineproxy.ru/.
ManHunter
(14.03.2010 в 17:44):
Заплатить денег, например.
Oleg
(14.03.2010 в 17:28):
А как сделать так чтобы первый парсер сам создавал xml файл и записывал туда награбленное.
effrit
(11.03.2010 в 13:18):
спасибо, добрый человек, очень полезная статья и сопутствующие ссылки.
Гошка
(22.11.2009 в 18:36):
А можно ли по подробней (или линку на эту тему) про случай, когда надо обработать несколько страниц. Я пробую на mail.ru, отсылаю данные авторизации на соответствующую страницу, приходит заголовок с редиректом, кукисами и разной другой инфой. Вторым шагом перехожу с указанными кукисами и редиректу - возвращается тоже самое, что отправил. А если при переходе кукисы не указывать, то возвращается пустая стандартная форма для авторизации.
В общем, как я понял, для корректной работы граббера нужно грамотно сымулировать работу кукисов, но я кокрентно пока не знаю как это сделать.
В общем, как я понял, для корректной работы граббера нужно грамотно сымулировать работу кукисов, но я кокрентно пока не знаю как это сделать.
ManHunter
(22.09.2009 в 19:35):
за 20$ сделаю
alex
(22.09.2009 в 19:33):
сделаешь мне граббер текста с одно сайта?
Vitalij
(13.08.2009 в 02:30):
Заибок статья! Помогла сграббить 10 000 новостей. Осталось разобраться с 3 вариантом.
Жека
(08.08.2009 в 20:31):
Ну, я пользуюсь прогой поудобней да и ссылки берет не только с рапиды но и с других обменников всё в одном окне вот скрин http://s42.radikal.ru/i097/090...6195d5e3.jpg
а вот сама прога http://rapidshare.com/files/26...etriever.rar
а вот сама прога http://rapidshare.com/files/26...etriever.rar
Добавить комментарий
Заполните форму для добавления комментария