Парсинг гугл картинок

Тема в разделе "PHP", создана пользователем jabbaxatt, 9 окт 2012.

Модераторы: latteo
  1. jabbaxatt

    jabbaxatt Добрый модератор

    Moderator
    Регистр.:
    21 янв 2009
    Сообщения:
    878
    Симпатии:
    411
    Точнее - получение адреса первых гугл картинок по определённому слову.

    Вопрос как правильно вычленить (регулярным выражением?) нужные ссылки.
    В загружаемой картинке ссылка находится в блоке

    ---------

    id="rg_hpl" target="_blank" href="http :// www .google.ru/imgres?q=Кот Баюн&um=1&hl=en&newwindow=1&client=firefox-a&sa=N&rls={moz:distributionID}:{moz:locale}:{mozfficial}&ndsp=19&biw=1280&bih=616&prmdo=1&tbm=isch&tbnid=WREiXWJKX_1H-M:&imgrefurl=http:// ru .wikipedia.org/wiki/Кот_Баюн&docid=P3gy6pt7e6fsTM&imgurl=http: //upload.wikimedia.org/wikipedia/commons/thumb/2/21/Bajun.jpg/220px-Bajun.jpg&w=220&h=331&ei=jiV0UMiIEYyL4gT_m4CgCg&zoom=1&iact=rc&dur=328&sig=102787668848020487930&page=1&tbnh=146&tbnw=96&start=0&ved=1t:429,r:0,s:0,i:68&tx=50&ty=65" style="height: 146px;

    ------

    Пока написал забор первой картинки, но код мне не нравится. Хотелось бы получать массив URL картинок и потом, если первая не грузится или не имеет расширения - пробовать вторую и т.д.

    Мой код, который не нравиться:
    PHP:
        $key_kartinki='Кот Баюн';
     
        
    $url 'http://www.google.com/search?q=' urlencode($key_kartinki) . '&oe=utf-8&rls={moz:distributionID}:{moz:locale}:{moz:official}&client=firefox-a&um=1&ie=UTF-8&tbm=isch&source=og&sa=N&hl=en&tab=wi&sa=N&start=0&ndsp=20';
     
        
    $naсhalo_k="imgurl=";
        
    $strlen_naсhalo_k=strlen($naсhalo_k);
        
    $konec_k="&amp";
        
    $google_stranica=file_get_contents($url);
        
    // обрежем начало
        
    $pos strpos($google_stranica$naсhalo_k); // позиция  подстроки в строке
        
    if ($pos === false) {
            echo 
    'Подстрока не найдена, значит ошибка';
            }
        else{
            
    // обрежем лишнее с начала
            
    $pos=$pos+$strlen_naсhalo_k;
            
    $google_stranica=substr($google_stranica,$pos);
            }
        
    // обрежем с конца строки
        
    $pos strpos($google_stranica$konec_k); // позиция  подстроки в строке
        
    if ($pos === false) {
            echo 
    'Подстрока не найдена, значит ошибка';
            }
        else{
            
    // обрежем лишнее с конца строки
            
    $dlinnastroki=strlen($google_stranica);
            
    $skonca=$dlinnastroki-$pos;
            
    $google_stranica=substr($google_stranica,0,-$skonca);
            }
        
    $url_kartinki=$google_stranica;
        echo 
    "<br> <br> наша картинка - ".$url_kartinki;
    Этот код забирает только первую картинку, и если она мне не подходит (битая) то всё, приплыли.
     
  2. Viodele

    Viodele Механик

    Administrator
    Регистр.:
    17 дек 2011
    Сообщения:
    110
    Симпатии:
    479
    zhitya и jabbaxatt нравится это.
  3. zhitya

    zhitya Создатель

    Регистр.:
    4 фев 2008
    Сообщения:
    15
    Симпатии:
    7
    Как раз пользуюсь этим методом.
    В ходе использования, гугл выдает часть ссылок на картинки, которые защищены от прямого доступа, к примеру http://www.formymobile.co.uk/Dismantle/63003.jpg
    Как обойти такую защиту с помощью CURL?

    Это может показаться смешным, но ввиду отсутствия помощи, и врожденной неспособности в кратчайшие сроки разбираться с особенностями устройства защиты и способов ее обхода, я воспользовался развитым навыком супер лени, а именно:

    чтобы обойти защиту от прямых ссылок с указанного сайта я его полностью выкачал Offline Explorer-ом, обозначил проект для трансляции в онлайне, залил скачанное на самый быстрый свой хостинг, поставил доступ к папке только с моего айпи (мало ли), всё. Психанул кароче )))

    З.Ы. Да... мне не дали всё докачать, видать там кто-то или что-то следит за сайтом, поэтому потоки и таймауты ограничьте до разумных пределов.

    И нихрена не получилось потому что гугол не индексировал ничего из скачанного :(
     
  4. Levitt

    Levitt

    Регистр.:
    20 май 2008
    Сообщения:
    356
    Симпатии:
    34
    Тут защита по реферреру. У меня при прямом заходе отображает без проблем что с пустым, что с заполненным юзерагентом. Если реферерр не пустой то редиректит на линку.

    preg_match_all("#imgurl=(.*?)&amp;#is", $google, $images);
    $i=0;
    foreach ($images[1] as $imgurl)
    {
    $img=file_get_contents(urldecode($imgurl));
    file_put_contents($i.'.jpg');
    $i++;
    }
     
    MaZder и zhitya нравится это.