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

Тема в разделе "Коммерческие", создана пользователем rollo_tomassi, 20 авг 2010.

Информация :
Публиковать (для всех) нуленые версии, особенно от modulesgarden КАТЕГОРИЧЕСКИ не стоит. Тема мониторится оным разработчиком, а к нам приходят абузы которые нельзя игнорировать.
Статус темы:
Закрыта.
Модераторы: Amazko, Aste
  1. rollo_tomassi

    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
  2. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    в первой строчке set_time_limit(0) сделай
     
    rollo_tomassi нравится это.
  3. marathoneer1

    marathoneer1 Читатель

    Заблокирован
    Регистр.:
    13 авг 2010
    Сообщения:
    13
    Симпатии:
    6
    Она не работает если на хостинге включен safe_mode. Ну и таймлимит 0 не стоит имхо. Функция принимает любые больше значения, лучше поставить близкое к реальному.
     
    rollo_tomassi нравится это.
  4. rollo_tomassi

    rollo_tomassi

    Регистр.:
    3 май 2009
    Сообщения:
    215
    Симпатии:
    59
    Не 0, не 500, не 1000...Ничего не помогает. Ни одной картинки не спарсилось=(
     
  5. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    PHP:
    <?php
    // инициализирует курл
    // возвращает сессию курла
    function curl_ini(){
        global 
    $proxy;
        
    $ch curl_init();
        
    //curl_setopt ($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
        
    curl_setopt($chCURLOPT_PROXY,$proxy);
        
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);
        
    curl_setopt($chCURLOPT_FOLLOWLOCATION1);
        
    curl_setopt($chCURLOPT_SSL_VERIFYPEER0);
        
    curl_setopt($chCURLOPT_COOKIEJAR,realpath(".").'/tmp/cookies.txt');
        
    curl_setopt($chCURLOPT_COOKIEFILE,realpath(".").'/tmp/cookies.txt');
        
    curl_setopt ($chCURLOPT_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($chCURLOPT_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
     
    rollo_tomassi нравится это.
  6. rollo_tomassi

    rollo_tomassi

    Регистр.:
    3 май 2009
    Сообщения:
    215
    Симпатии:
    59



    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 пустая
     
  7. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    значит проблемы с регулярками рядом лежит файлик log_page.txt
    открой его и или подправь регулярку под себя сам, или выложи файлик сюда

    ЗЫ любит яндекс раздавать народу разный код )))
     
  8. rollo_tomassi

    rollo_tomassi

    Регистр.:
    3 май 2009
    Сообщения:
    215
    Симпатии:
    59
    файл пустой.
     
  9. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    пустой? эммм
    больше ошибок никаких не выводит ? где запускаешь ?
     
  10. marathoneer1

    marathoneer1 Читатель

    Заблокирован
    Регистр.:
    13 авг 2010
    Сообщения:
    13
    Симпатии:
    6
    Для простых задач не лучше ли использовать вместо регулярок классические функции поиска/позиционирования/ по строкам?
     
Статус темы:
Закрыта.