Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/47: Рейтинг темы: голосов - 47, средняя оценка - 4.79
403 / 19 / 5
Регистрация: 17.01.2017
Сообщений: 572

Простой php парсер для скачивания картинок с сайта

13.05.2018, 20:20. Показов 10026. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне нужно быстро скачать около 500 картинок с одного сайта. Самой писать времени нету, поэтому я стала искать скрипт в сети и нашла. Только вот он не работает как надо в чём может быть проблема?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
ini_set("max_execution_time", "1200"); 
$from="http:/site.ru/index.php";  
$str = file_get_contents ($from); #парсим страницу
   
 preg_match_all ("!<a.*?href=\"?'?([^ \"'>]+)\"?'?.*?>(.*?)</a>!is", $str, $ok); 
  for ($i=1; $i<count($ok[1]); $i++) { 
    $url= $from.$ok[1][$i]; 
     
   $destination_folder="C:\images\/"; 
   $filename = (($pos = strrpos($url, '/')) !== false)?substr($url, $pos + 1):$url; 
  
  
   if (!copy($url, $destination_folder.$filename)) { 
       echo "не удалось скопировать $filename...<br>\n";
     }
    echo 'Файл '.$url.' cкопирован в: '.$destination_folder.$filename.'<br>\n'; #вывод отчета
   }
?>
Выдаёт огромное количество ошибок такого формата (префикс s_ это от слово smail, маленький размер картинки, без префикса большой размер картинки.)

Warning: copy(C:\images\/s_1513797708.gif) [function.copy]: failed to open stream: No such file or directory in ../parser.php on line 14
не удалось скопировать s_1513797708.gif...
Файл http://site.ru/ndex.phphttp://... 797708.gif cкопирован в: C:\images\/s_1513797708.gif
\n

Warning: copy(C:\images\/1513797708.gif) [function.copy]: failed to open stream: No such file or directory in ../parser.php on line 14
не удалось скопировать 1513797708.gif...
Файл http://site.ru/index.phphttp:/... 797708.gif cкопирован в: C:\images\/1513797708.gif
\n
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.05.2018, 20:20
Ответы с готовыми решениями:

Программа для скачивания файлов (картинок) с сайта
Добрый день, хочу написать прогу для скачивания файлов с любого сайта. Суть такая, например: есть сайт вконтакте, у пользователя В...

Программа для скачивания файлов (картинок) с сайта
Добрый день, хочу написать прогу для скачивания файлов с любого сайта. Суть такая, например: есть сайт вконтакте, у пользователя В...

Парсер картинок с сайта
Добрый день. Хочу написать парсер картинок с сайта (любого), но не знаю с чего начать., так как в python куча библиотек : не пойму...

18
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
13.05.2018, 20:34
Цитата Сообщение от Katerina1993 Посмотреть сообщение
$destination_folder="C:\images\/";
Кривой путь. Должно быть "C:\images"

Добавлено через 39 секунд
Блин, форум съедает слеши. Короче после images должно быть два обратных слеша, а у вас обратный и затем прямой.
0
403 / 19 / 5
Регистрация: 17.01.2017
Сообщений: 572
13.05.2018, 23:44  [ТС]
Странно не работает. Я решила протестировать функцию copy без цикла. Она вообще не копирует с сайта в папку "C:/images/"
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
14.05.2018, 08:11
Katerina1993, какие теперь пишет ошибки?
0
403 / 19 / 5
Регистрация: 17.01.2017
Сообщений: 572
14.05.2018, 17:50  [ТС]
Да никакие. Появляется сообщение последнего echo, что якобы все файлы скопированы, перехожу в папку C:/images/ смотрю, нету не одного файла.
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
14.05.2018, 19:20
Добавьте после 8-ой строки это:
PHP
1
2
var_dump($url);
die;
и скажите, что выведется. Подозреваю, что у Вас кривые адреса формируются, вроде такого: http://site.ru/images/http://s... s/test.gif
0
403 / 19 / 5
Регистрация: 17.01.2017
Сообщений: 572
14.05.2018, 21:10  [ТС]
Вот что:

string(101) "http://site.ru/chat1450298853/index.phphttp://site.ru/files/photo/1415756046/1440662305.jpg"

Добавлено через 7 минут
На самом деле в папке chat1450298853 находится файл с которым работает парсер (я просто до этого сократила) Оригинальный путь вот такой:
http://site.ru/chat1450298853/index.php
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
15.05.2018, 06:30
Цитата Сообщение от Katerina1993 Посмотреть сообщение
string(101) "http://site.ru/chat1450298853/index.phphttp://site.ru/files/photo/1415756046/1440662305.jpg"
Ну вот. Как считаете, это нормальный адрес? Явно же, что кривой.
0
 Аватар для Вовчек
33 / 33 / 28
Регистрация: 04.04.2011
Сообщений: 333
15.05.2018, 09:22
Есть специальные программы, - программы для скачивания сайтов. У этих программ может быть настройка типов файлов, которые нужно скачать. Например Httrack website copier, не помню, есть ли у него настройка. Код сайта на php скачать не получится, программа работает как браузер - кидает запрос к странице, находит там все ссылки, далее переходит по всем найденным ссылкам и выкачивает все, что надо, куда надо. Если нельзя настроить тип скачиваемых файлов, можно скачать все, а потом удалить лишнее.
0
403 / 19 / 5
Регистрация: 17.01.2017
Сообщений: 572
16.05.2018, 11:11  [ТС]
Вовчек, При чём здесь код сайта. Мне картинки нужны, а не код? Вообщем я изменила $url, удалив $from. Теперь строка выглядит вот так:
PHP/HTML
1
$url = $ok[1][$i];
в var_dump выводит следующее
string(57) "http://site.ru/files/photo/1415756046/1440662305.jpg"

И всё равно не копирует. Я решила попробовать просто скопировать один файл, не получается:
PHP/HTML
1
2
3
4
5
6
7
<?php
    if (!copy("http://site.ru/files/photo/1415756046/1440662305.jpg", "C:\images\1440662305.jpg")) { #копируем
       echo "не удалось скопировать $filename...<br>\n";
     }
     echo "Файл загружен";
     
?>
Раньше я функцией copy использовала только для копирования с жесткого диска на сайт, а наоборот не получается.
А если заголовки отправлять на скачивание файла примерно вот так:
PHP/HTML
1
header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
Так вообще можно делать или постоянно нужно будет нажимать кнопку сохранить в сплывающем окне?

Добавлено через 3 минуты
Пример с этого сайта работает
http://php.net/manual/ru/function.copy.php
PHP
1
2
3
4
5
6
<?php
$srcfile='C:\File\Whatever\Path\Joe.txt';
$dstfile='C:\Shared\Reports\Joe.txt';
mkdir(dirname($dstfile), 0777, true);
copy($srcfile, $dstfile);
?>
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
16.05.2018, 12:30
Создайте файл с таким содержанием:
PHP
1
2
<?php
phpinfo();
Обратитесь к нему через обозреватель и на странице найдите allow_url_fopen. В каком она состоянии (On/Off)?
0
 Аватар для Вовчек
33 / 33 / 28
Регистрация: 04.04.2011
Сообщений: 333
16.05.2018, 15:24
Цитата Сообщение от Katerina1993 Посмотреть сообщение
Вовчек, При чём здесь код сайта
Цитата Сообщение от Вовчек Посмотреть сообщение
Код сайта на php скачать не получится
Ну так качайте картинки
0
403 / 19 / 5
Регистрация: 17.01.2017
Сообщений: 572
16.05.2018, 20:04  [ТС]
Para bellum, allow_url_fopen = On
Ну так качайте картинки
Пытаюсь, но мне нужно скопировать не все картинки, а только часть картинок из одной категории.
0
0 / 0 / 0
Регистрация: 07.11.2020
Сообщений: 8
18.02.2021, 06:40
Здравствуйте!
Испробовал несколько вариантов для того, чтобы скачать изображения с сайта на локальный диск D:\
Так ничего не получилось, файлы сохраняются на удаленном сервере.
Состояние: allow_url_fopen = On
Пожалуйста, подскажите как можно решить данную задачу средствами PHP. Буду очень признателен!
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
18.02.2021, 11:39
PHP
1
2
3
4
if (false === @copy('https://site.com/img.jpg', '/full/path/to/file/img.png')) {
    $error = error_get_last();
    throw new ErrorException($error['message'], 0, $error['type'], $error['file'], $error['line']);
}
0
0 / 0 / 0
Регистрация: 07.11.2020
Сообщений: 8
18.02.2021, 20:38
Jewbacabra, спасибо за ответ!
Я уже пытался использовать функцию copy и file_put_contents:
file_put_contents($img, file_get_contents($url));
copy('https://cyberstatic.net/images/cyberforum_logo.png', 'D:\\img.png');
Изображения скачиваются на удаленный сервер, но не на локальный компьютер. Собственно это логично, ведь PHP работает на удаленном сервере и видит он наверное, только директории на сервере.
Я думал, может возможно скачать средствами PHP изображение в любую папку на компьютере.
Пока все мои попытки не увенчались успехом.
Буду признателен за хоть какую то информацию и помощь.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
18.02.2021, 21:02
Цитата Сообщение от LanKast Посмотреть сообщение
Изображения скачиваются на удаленный сервер, но не на локальный компьютер. Собственно это логично, ведь PHP работает на удаленном сервере и видит он наверное, только директории на сервере.
Я думал, может возможно скачать средствами PHP изображение в любую папку на компьютере.
То есть человек заходит на сайт и на его компьютер в произвольное место файловой системы скачивается файл? Естественно так нельзя, иначе это была бы огромная дыра в безопасности.
1
Заблокирован
18.02.2021, 21:44
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Естественно так нельзя, иначе это была бы огромная дыра в безопасности
Вот только если бы еще был браузер свой... и сервер свой. Тогда можно было бы заливать юзерам всякие трояны
0
0 / 0 / 0
Регистрация: 07.11.2020
Сообщений: 8
19.02.2021, 12:54
Спасибо за ответ!
Хочу сделать административную панель. Нужно скачивать некоторые изображения с удаленного сервера.
Попробую что то поискать для скачивания файлов через FTP
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.02.2021, 12:54
Помогаю со студенческими работами здесь

Парсер картинок с сайта на жесткий диск
Нашел, я как то в интернете много картинок, которые захотел заиметь к себе на компьютер, нашел вот такой парсер: text =...

Простой парсер на php с регулярными выражениями
Всем Здравствуйте. Пытаюсь спарсить новости с сайта http://vak.ed.gov.ru/news. Но возникают некоторые проблемы, в частности из-за того...

Приложение для скачивания картинок
Добрый день, возможно ли создать такое приложение скачивания картинок из яндекс.картинки и гугл.картинки суть работы: - в проге в...

Программа для скачивания картинок с сайтов
Срочно нужно написать такую программу. Посоветуйте, с чего начать. Может, в какой-нибудь книге по Java есть пример такой (или похожей)...

Програмка для скачивания картинок с демотивации
Нужно написать програмку которая периодически, каждую минуту заходила на demotivatio.me и скачивала первую картинку, если она новая, а то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru