Парсинг сайтов на PHP с Simple HTML DOM Parser. Часть 3: выкачивание картинок.

Собственно в прошлой статье мы с вами  успешно завершили ту часть программного кода, которая отвечает непосредственно за парсинг и автоматическую отправку поискового запроса в Google.Картинки. Однако мало получить ссылки на оригинальные изображения с донорских сайтов, их же ещё нужно скачать и где-то сохранить.

Для решения задачи напишем небольшую функцию с применением cURL:

/**
 * Получая путь до картинки $image_url, 
 * сохраняет её в каталог $destination_url, 
 * "шифруя" имя файла с помощью MD5.
 * 
 * @param string $image_url
 * @param string $destination_url
 */
function save_image($image_url, $destination_url) {
    $path_parts = pathinfo($image_url);
    $filename = md5($path_parts['filename']) . '.' . $path_parts['extension'];
    $destination_url = $destination_url . $filename;

    $YUghYu = curl_init($image_url);
    curl_setopt($YUghYu, CURLOPT_HEADER, 0);
    curl_setopt($YUghYu, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($YUghYu, CURLOPT_BINARYTRANSFER, 1);
    curl_setopt($YUghYu, CURLOPT_REFERER, 'http://google.ru');
    curl_setopt($YUghYu, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($YUghYu, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0" .
            "; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR" .
            " 3.0.04506.30)");
    $img = curl_exec($YUghYu);
    curl_close($YUghYu);
    unset($YUghYu);

    // Сохраняем картинку:
    if (file_exists($destination_url))
        unlink($destination_url);
    $f = fopen($destination_url, 'x');
    fwrite($f, $img);
    fclose($f);

    // Возвращаем новый путь:
    return $destination_url;
}

И вставим её вызов в имеющийся программный код:

$content = turn_to_google('MODX Revolution');
$folder = dirname(__FILE__) . '\\images\\';

$content = str_get_html($content);
$images = $content->find('#ires td a');
foreach ($images as $url) :
    parse_str(parse_url($url->href, PHP_URL_QUERY), $image_content);
    echo save_image($image_content['imgurl'], $folder) . "<br />\n";
endforeach;

$content->clear();
Скачать рабочий пример

Парсим картинки с Google Images

* * *

1. Будете много парсить и вылетит… Нет, не птичка, а капча. Её преодоление выходит за рамки представленных статей.

2. Предостерегаю. На дворе 2013-й год и не так уж давно вышел у Яндекса АГС-40, а потому лучше даже не пытайтесь делать конвейерные ГСы, а то из таких, как вы часто общим скопом под фильтры попадают вполне нормальные СДЛы с написанными вручную материалами, уникальным дизайном и развиваемые авторами годами.

3. Скопируете мой сайт без моего ведома, — найду, и сделаю все, чтобы к вам в гости заглянул АГС.

Опубликовано 11-11-2013 в 15:29
PHP


Комментариев к записи: 2

  1. Вадик:

    Уже не работает! Создается пустой файл с нулевым размером — d41d8cd98f00b204e9800998ecf8427e и все

    • Администратор:

      Видимо Гугл просто верстку подкорректировал или что-то в этом роде, т.к. https://www.google.ru/search?q=yandex&tbm=isch по-прежнему работает. Поэксперементируйте с селекторами simple_html_dom, например $content->find('#ires td a');.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Свежие комментарии

PORNOSEKSXXX

  • Администратор: к записи Не знаю, с ходу не скажу. »
  • Андрей: к записи Сорри, лишнее TD »
  • Андрей: к записи У вас лишнее в 71 строке. За быстрый урок спасибо »
  • Михаил: к записи Здравствуйте. Спасибо помогло! А не скажите как не »
  • Олег: к записи Добрый день! Да пагинация в таком ключе действите »
  • Радик: к записи Помогите, не получается спарсить. Вот тут #ire »
  • Администратор: к записи Когда меняете пароль к базе в панели управления хо »

Статистика спама

Akismet заблокировал 61 961 спамера

Последние твиты

Твиты пользователя @red_book_cms