Парсер картинок. Нужна помощь.

Статус
В этой теме нельзя размещать новые ответы.

rollo_tomassi

Гуру форума
Регистрация
3 Май 2009
Сообщения
215
Реакции
59
Скрипт должен парсить картинки с Я картинок.
Есть файл q.txt, куда вводим текст запроса по которому парсить. Код ниже.
HTML:
<?php
set_time_limit(15);
$q = file("q.txt");
$pages = 200;
$ch = curl_init();
$num = 0;
foreach ($q as $query)
{
    for ($i = 0; $i <= $pages; $i++)
    {
        curl_setopt($ch, CURLOPT_URL, "http://images.yandex.ru/yandsearch?p={$i}&ed=1&text={$query}&nl=1&stype=image");
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.7)');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        $result = curl_exec($ch);
        $result = str_replace("&amp;", "&", $result);
        preg_match_all('#a href\="(.*?)" id="#', $result, $out);
        foreach ($out[1] as $iq)
        {
            curl_setopt($ch, CURLOPT_URL, "http://images.yandex.ru" . $iq);
            curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.7)');
                        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
            $result = curl_exec($ch);
            if (preg_match('#tabindex="2" href="(.*?)" onmousedown="#', $result, $im))
            {
                $img = file_get_contents($im[1]);
                file_put_contents("img/$num.jpg", $img);
                $num++;
            }
        }
    }
}
?>
Выдается ошибка
HTML:
Fatal error: Maximum execution time of 15 seconds exceeded in U:\home\localhost\www\imageparser.php on line 15
Буду благодарен за подсказку, почему не работает.
 

Вложения

  • Скрипт.rar
    768 байт · Просмотры: 5
в первой строчке set_time_limit(0) сделай
 
Она не работает если на хостинге включен safe_mode. Ну и таймлимит 0 не стоит имхо. Функция принимает любые больше значения, лучше поставить близкое к реальному.
 
Не 0, не 500, не 1000...Ничего не помогает. Ни одной картинки не спарсилось=(
 
PHP:
<?php
// инициализирует курл
// возвращает сессию курла
function curl_ini(){
    global $proxy;
	$ch = curl_init();
    //curl_setopt ($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
    curl_setopt($ch, CURLOPT_PROXY,$proxy);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
	curl_setopt($ch, CURLOPT_COOKIEJAR,realpath(".").'/tmp/cookies.txt');
	curl_setopt($ch, CURLOPT_COOKIEFILE,realpath(".").'/tmp/cookies.txt');
	curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1) Gecko/20061010 Firefox/2.0;MEGAUPLOAD 1.0");
	curl_setopt($ch,CURLOPT_VERBOSE,1);
	return $ch;}  
// загрузка  с помощью курла
function get_file_by_curl($url){
	$ch=curl_ini();
	curl_setopt($ch, CURLOPT_URL,$url);
	$result=curl_exec ($ch);
	return $result;}


set_time_limit(0);
$q = file("q.txt");
$pages = 2;
$ch = curl_init();
$num = 0;
foreach ($q as $query)
{
	$fl=fopen("./".trim(iconv( 'utf-8','cp1251', $query))."_images.txt","a+");
	echo "Парсятся картинки на ".trim(iconv( 'utf-8','cp1251', $query))."<br>";flush();
    for ($i = 0; $i <= $pages; $i++)
    {

        $url="http://images.yandex.ru/yandsearch?p=".$i."&ed=1&text=".urlencode($query)."&nl=1&stype=image";
		echo "<a href='$url'>$url</a>";
		$result=get_file_by_curl($url);
        //echo  $result;
        //$result = str_replace("&amp;", "&", $result);
        preg_match_all('%href="/yandsearch\?.+?img_url=(.+?)&amp%s', $result, $out);
		file_put_contents("./log_page.txt",$result);
		echo "+".count($out[1])."\r\n<br>";flush();
		echo '<ul>';
        foreach ($out[1] as $iq)
        {
			echo '<li>'."http://".urldecode($iq).'</li>';flush();
			$num++;
            $result = get_file_by_curl("http://".urldecode($iq));
			file_put_contents('./imgs/'.trim(iconv( 'utf-8','cp1251', $query)).'_'.$num.".jpg",$result);
        }
		echo '</ul>';
		
    }
	fclose($fl);
}
парсит в папку imgs

как то так

разве что не проверяет типы фйалов и все гонит в jpeg
 
PHP:
<?php
// инициализирует курл
// возвращает сессию курла
function curl_ini(){
    global $proxy;
	$ch = curl_init();
    //curl_setopt ($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
    curl_setopt($ch, CURLOPT_PROXY,$proxy);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
	curl_setopt($ch, CURLOPT_COOKIEJAR,realpath(".").'/tmp/cookies.txt');
	curl_setopt($ch, CURLOPT_COOKIEFILE,realpath(".").'/tmp/cookies.txt');
	curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1) Gecko/20061010 Firefox/2.0;MEGAUPLOAD 1.0");
	curl_setopt($ch,CURLOPT_VERBOSE,1);
	return $ch;}  
// загрузка  с помощью курла
function get_file_by_curl($url){
	$ch=curl_ini();
	curl_setopt($ch, CURLOPT_URL,$url);
	$result=curl_exec ($ch);
	return $result;}
set_time_limit(0);
$q = file("q.txt");
$pages = 2;
$ch = curl_init();
$num = 0;
foreach ($q as $query)
{
	$fl=fopen("./".trim(iconv( 'utf-8','cp1251', $query))."_images.txt","a+");
	echo "Парсятся картинки на ".trim(iconv( 'utf-8','cp1251', $query))."<br>";flush();
    for ($i = 0; $i <= $pages; $i++)
    {
        $url="http://images.yandex.ru/yandsearch?p=".$i."&ed=1&text=".urlencode($query)."&nl=1&stype=image";
		echo "<a href='$url'>$url</a>";
		$result=get_file_by_curl($url);
        //echo  $result;
        //$result = str_replace("&amp;", "&", $result);
        preg_match_all('%href="/yandsearch\?.+?img_url=(.+?)&amp%s', $result, $out);
		file_put_contents("./log_page.txt",$result);
		echo "+".count($out[1])."\r\n<br>";flush();
		echo '<ul>';
        foreach ($out[1] as $iq)
        {
			echo '<li>'."http://".urldecode($iq).'</li>';flush();
			$num++;
            $result = get_file_by_curl("http://".urldecode($iq));
			file_put_contents('./imgs/'.trim(iconv( 'utf-8','cp1251', $query)).'_'.$num.".jpg",$result);
        }
		echo '</ul>';
    }
	fclose($fl);
}
парсит в папку imgs
как то так
разве что не проверяет типы фйалов и все гонит в jpeg




HTML:
Парсятся картинки на
http://images.yandex.ru/yandsearch?p=0&ed=1&text=%E5%E2%F0%EE%F0%E5%EC%EE%ED%F2%0D%0A&nl=1&stype=image+0

http://images.yandex.ru/yandsearch?p=1&ed=1&text=%E5%E2%F0%EE%F0%E5%EC%EE%ED%F2%0D%0A&nl=1&stype=image+0

http://images.yandex.ru/yandsearch?p=2&ed=1&text=%E5%E2%F0%EE%F0%E5%EC%EE%ED%F2%0D%0A&nl=1&stype=image+0

Парсятся картинки на
http://images.yandex.ru/yandsearch?p=0&ed=1&text=%F4%EE%F2%EE+%EA%E2%E0%F0%F2%E8%F0&nl=1&stype=image+0

http://images.yandex.ru/yandsearch?p=1&ed=1&text=%F4%EE%F2%EE+%EA%E2%E0%F0%F2%E8%F0&nl=1&stype=image+0 

....

А папка imgs пустая
 
значит проблемы с регулярками рядом лежит файлик log_page.txt
открой его и или подправь регулярку под себя сам, или выложи файлик сюда

ЗЫ любит яндекс раздавать народу разный код )))
 
значит проблемы с регулярками рядом лежит файлик log_page.txt
открой его и или подправь регулярку под себя сам, или выложи файлик сюда
ЗЫ любит яндекс раздавать народу разный код )))

файл пустой.
 
пустой? эммм
больше ошибок никаких не выводит ? где запускаешь ?
 
Для простых задач не лучше ли использовать вместо регулярок классические функции поиска/позиционирования/ по строкам?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху