ini_set('max_execution_time', 600);
//замеряем время начала работы скрипта
$st_time = microtime(true);
//устанавливаем переменные...
$url = $_POST['url'];
$types = $_POST['types'];
$maxPages = (int)$_POST['max'];
$host = explode('/', substr($url, 7));
$host = substr($url, 0, 7).$host[0].'/';
//про последние 2 строчки подробней: таким вот образом получаем Адрес сайта (на случай, если ввели
//адрес странички сайта) - разбиваем на массив по слешу и берём первую часть...
//для удобства работы с КУРЛом, напишем простенькую функцию
//параметры: $host - адрес, $referer - откуда пришли (можно подделать, в статистике парсимого сайта будет отображаться, что мы пришли, например, с Яндекса :))
//$file - идентификатор файла (если мы хотим скачать файл, то передаём его идентификатор)
function curl_get($host, $referer = null, $file = null){
//инициализация curl и задание основных параметров
$ch = curl_init($host);
curl_setopt($ch, CURLOPT_USERAGENT, 'KOZ1024 Site Parser');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_REFERER, $referer);
//если дали ссылку на файл
if (!is_null($file)){
//то устанавливаем опцию записи в файл,
curl_setopt($ch, CURLOPT_FILE, $file);
//и выполняем
curl_exec($ch);
//не забываем закрыть соединение
curl_close($ch);
}else{
//если же ссылку на файл не дали, то возвращаем страничку
ob_start();
curl_exec($ch);
print(curl_error($ch));
curl_close($ch);
return ob_get_clean();
}
}
//получаем html-код исходной страницы
$page = curl_get($url);
//регулярным выражением ищем вхождение ссылок
preg_match_all('#href="([A-z0-9.-]+)"#', $page, $matches);
//получаем массив всех-всех ссылок с этой старницы
$links = $matches[1];
$cnt = 0;
//цикл: пока не прошли весь массив ссылок, либо пока не скачали макс. количество файлов (не действет в случае 0)
for($i=0; ($i<sizeof($links)&&($cnt<$maxPages||$maxPages==0)); $i++){
//если в ссылке есть нужное нам расширение
if (strpos($links[$i], $types)!==false){
//то открываем файл, "курлим" в него содержимое файла на сервере, закрываем, увеличиваем счётчик
$fp = fopen($links[$i], 'w');
curl_get($host.$links[$i], $url, $fp);
fclose($fp);
$cnt++;
}else{
//иначе это ещё одна ссылка, перейдём по ней, найдём все ссылки и занесём их в массив
$page = curl_get($links[$i], $url);
preg_match_all('#href="([A-z0-9.-]+)"#', $page, $matches);
$links = array_merge($links, $matches[1]);
}
}
//замеряем время окончания работы и выводим...
$en_time = microtime(true);
print 'Скачано файлов: '.$cnt.'<br />Время выполнения: '.($en_time-$st_time);
в частности вот этот кусок
//то открываем файл, "курлим" в него содержимое файла на сервере, закрываем, увеличиваем счётчик
$fp = fopen($links[$i], 'w');
curl_get($host.$links[$i], $url, $fp);
fclose($fp);
$cnt++;
вообщем ошибок он не выдает но мне не совсем понятно где результаты его работы хранятся :huh:
Спустя 1 час, 51 минута, 39 секунд (22.04.2012 - 18:41) walerus написал(а):
Сделай вывод
print_r( $links [$i] );и тебе сразу все станет ясно...
Спустя 51 минута, 21 секунда (22.04.2012 - 19:32) Bodich написал(а):
какой бы адрес не вводил
preg_match_all('#href="([A-z0-9.-]+)"#', $page, $matches);
print_r( $matches );
дает
Array ( [0] => Array ( ) [1] => Array ( ) )
preg_match_all('#href="([A-z0-9.-]+)"#', $page, $matches);
print_r( $matches );
дает
Array ( [0] => Array ( ) [1] => Array ( ) )
Спустя 6 минут, 48 секунд (22.04.2012 - 19:39) Игорь_Vasinsky написал(а):
паттерн не верный.
универсального паттерна для всех сайтов ещё не придумали))) обещают тока в php5.4
универсального паттерна для всех сайтов ещё не придумали))) обещают тока в php5.4
Спустя 2 минуты, 33 секунды (22.04.2012 - 19:41) Bodich написал(а):
http://koz1024.net/curl-site-parser/
а пишет - проверен в боевых условиях
ну хорошо может подскажешь как научится парсить на курле , может ссылку на ресурс хороший ..
а пишет - проверен в боевых условиях
ну хорошо может подскажешь как научится парсить на курле , может ссылку на ресурс хороший ..
Спустя 2 минуты, 22 секунды (22.04.2012 - 19:44) Игорь_Vasinsky написал(а):
парсеры сайтов - хрупкая дорожка))0 сменили вёрстку - полетела вся конструкция
если платил - связывайся с разрабом. было у меня пару случаев - корректировал. клиент всегда прав!!
если платил - связывайся с разрабом. было у меня пару случаев - корректировал. клиент всегда прав!!
Спустя 1 минута, 29 секунд (22.04.2012 - 19:45) Игорь_Vasinsky написал(а):
Цитата |
ну хорошо может подскажешь как научится парсить на курле , может ссылку на ресурс хороший .. |
у меня в подписи надпись парсеры - мой хлеб. так что извеняй.
поиск на форуме "CURL" - есть топик от winston
Спустя 1 минута, 10 секунд (22.04.2012 - 19:46) Игорь_Vasinsky написал(а):
может
preg_match_all('#href="(.*)iusU"#', $page, $matches);
Спустя 3 минуты, 54 секунды (22.04.2012 - 19:50) Bodich написал(а):
Цитата (Игорь_Vasinsky @ 22.04.2012 - 17:45) |
у меня в подписи надпись парсеры - мой хлеб. так что извеняй. |
я тебе не конкурент по опыту не дошел.
Цитата (Игорь_Vasinsky @ 22.04.2012 - 17:45) |
поиск на форуме "CURL" - есть топик от winston |
это там где он пишет как ПОСТ отсылать, про парс там мало (
Спустя 3 минуты, 36 секунд (22.04.2012 - 19:54) Игорь_Vasinsky написал(а):
проблема в паттерне - подтягивай регулярные выражения
Спустя 2 часа, 43 минуты, 7 секунд (22.04.2012 - 22:37) Bodich написал(а):
вот рабочий нашел
Игорь_Vasinsky, скажи в чем преимущества курл парсера, скажем от phpQuery парсера ??
preg_match_all('#<a\s+href\s*=\s*["\']?([^\s>]+?)["\']?[.]*?>(.*?)</a>#i',$page, $matches);
Игорь_Vasinsky, скажи в чем преимущества курл парсера, скажем от phpQuery парсера ??
Спустя 7 часов, 8 минут, 38 секунд (23.04.2012 - 05:46) Игорь_Vasinsky написал(а):
phpQuery, Simple HTML DOM - это всё библиотеки, способные сократить код при парсинге, но как правило жрут память. Иногда выгодней работать регулярками.
Это инструменты для разбора DOM полученных страниц по полочкам.
А курл -это всего библиотека для имитации юзера и получения удалнного контента.
так что как видишь их сравнивать нельзя.
иногда вместо курла вообще достаточно file_get_contents()
Это инструменты для разбора DOM полученных страниц по полочкам.
А курл -это всего библиотека для имитации юзера и получения удалнного контента.
так что как видишь их сравнивать нельзя.
иногда вместо курла вообще достаточно file_get_contents()
Спустя 14 часов, 16 минут, 4 секунды (23.04.2012 - 20:02) Bodich написал(а):
$ch = curl_init('http://povarec.net');
//Установка опций
curl_setopt($ch, CURLOPT_USERAGENT, 'KOZ1024 Site Parser');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_REFERER, 'http://example.com');
//выполнение (результат отобразится на экран)
curl_exec($ch);
//Закрытие соединения
curl_close($ch);
вопрос : как имитировать что пришел гуглбот ?
Спустя 36 минут, 59 секунд (23.04.2012 - 20:39) alexbel2404 написал(а):
curl_setopt($ch, CURLOPT_REFERER, 'http://google.com/');
curl_setopt($ch, CURLOPT_USERAGENT, 'Googlebot/2.1 (+http://www.googlebot.com/bot.html)');
я так делаю) а потом последний посещенный урл, если он внутренний, подставляю в реферер
Спустя 3 часа, 4 минуты, 25 секунд (23.04.2012 - 23:43) Bodich написал(а):
спасиб !!! )
Спустя 12 часов, 3 минуты, 54 секунды (24.04.2012 - 11:47) Bodich написал(а):
еще такой вопрос : допустим если человек парсит новостной сайт, который обновляется каждый день скажем в 11.00. Как гуглбот узнает где впервые появилась статья на оригинале или на клоне ..??
и еще зачем парсят новостную ленту , та ведь не вся новость, а только превьюшка ..??
и еще зачем парсят новостную ленту , та ведь не вся новость, а только превьюшка ..??
Спустя 1 час, 55 минут, 53 секунды (24.04.2012 - 13:43) Bodich написал(а):
хм видимо я задал запрещенный вопрос , ибо нехорошо грабить чужой контент
Спустя 10 часов, 8 минут, 27 секунд (24.04.2012 - 23:51) walerus написал(а):
Bodich - На счет Гугла, лучше у него спросить ), как он шарит кто первый, если бы кто то знал(мб кто то и знает...) как он определяет, то не было бы, "рерайтеров" и всей остальной лабуды, а все тупо становились бы копирайтерами, указывая гуглу, стуча в грудь пяткой, что автор статьи - это ты ! ), а не тот новостной сайт. Причем, я думаю что новостной сайт, индексируется за минуты, а то и быстрее, чем твой сайт, с паршеным контентом, если конечно ты не в топ 3 гугла .
Как вариант, тебе ставить ссылку под статьей на источник, что бы гугл тебя сразу не выплюнул на N-ю страницу.
Как вариант, тебе ставить ссылку под статьей на источник, что бы гугл тебя сразу не выплюнул на N-ю страницу.
Цитата |
и еще зачем парсят новостную ленту , та ведь не вся новость, а только превьюшка ..?? |
Ты все правильно подметил - только превьюшка(но не всегда, есть и полностью статьи распологают), но кто мешает перейти по адресу статьи? и ее распарсить.