Парсинг страницы и сохранение изображений через PHP

06-09-2012 @ 10:27

Бродил давеча по интернетам, наткнулся на огромный архив боксартов по нужной мне тематике. Страница выглядела таким образом:
Около тысячи ссылок на картинки. Разумеется тыкать каждую, затем сохранять ее в нужной папке не было ни малейшего желания. Однако оставалось желание всё это великолепие заиметь себе на жестком диске.  Еще выдергивание картинок усложнялось тем что ссылки до самих картинок были не полные:

В итоге, немного подумав, я «родил» следующий скрипт:

<?
ini_set("max_execution_time", "1200"); #изменяем максимальное время выполнения скрипта до 1200 секунд
$from="http://somesite.org/catalogue/";  #откуда будем тягать картинки
 $str = file_get_contents ($from); #парсим страницу
 preg_match_all ("!<a.*?href=\"?'?([^ \"'>]+)\"?'?.*?>(.*?)</a>!is", $str, $ok); #тянем все что связано с ссылками
 for ($i=1; $i<count($ok[1]); $i++) { #т.к. первая ссылка нам не нужна значение i=0 ставим i=1 и запускаем цикл
    $url= $from.$ok[1][$i]; #полный url файла, т.к. в запрашиваемой странице url вида <a href="0001.jpg">
    $destination_folder="D:\Vertrigo\www\img\boxart\/"; #указываем куда сохранять картинки
    $filename = (($pos = strrpos($url, '/')) !== false)?substr($url, $pos + 1):$url; #обрезаем url до имя_файла.расширение
    if (!copy($url, $destination_folder.$filename)) { #копируем
       echo "не удалось скопировать $filename...<br>\n";
       }
 echo 'Файл '.$url.' cкопирован в: '.$destination_folder.$filename.'<br>\n'; #вывод отчета
    }
?>

По комментариям более-менее должно быть понятно. Если где ошибся — готов поправиться.
На оригинальность не претендую, но может кому пригодится данный метод. Если есть более интересное решение — пишите в комментариях 😉