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

jabbaxatt

Добрый модератор
Регистрация
21 Янв 2009
Сообщения
902
Реакции
432
Точнее - получение адреса первых гугл картинок по определённому слову.

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

---------

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;

Этот код забирает только первую картинку, и если она мне не подходит (битая) то всё, приплыли.
 
PHP:
if (preg_match_all ('/imgurl=((http|https):\/\/[^\&]+)\&/', $source, $matches)) {
    die ('<pre>' . var_export ($matches, true) . '</pre>');
}

Линки вроде должны быть в 1-ом кармане.

В любом случае, есть намного проще решения.
Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся
 
...В любом случае, есть намного проще решения.
Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся

Как раз пользуюсь этим методом.
В ходе использования, гугл выдает часть ссылок на картинки, которые защищены от прямого доступа, к примеру Для просмотра ссылки Войди или Зарегистрируйся
Как обойти такую защиту с помощью CURL?

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

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

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

И нихрена не получилось потому что гугол не индексировал ничего из скачанного :(
 
Как раз пользуюсь этим методом.
Для просмотра ссылки Войди или Зарегистрируйся
Как обойти такую защиту с помощью CURL?
Тут защита по реферреру. У меня при прямом заходе отображает без проблем что с пустым, что с заполненным юзерагентом. Если реферерр не пустой то редиректит на линку.

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++;
}
 
Назад
Сверху