|
Болтовня Разговоры на любые темы (думайте, о чем пишите) |
21.12.2015, 07:50
|
#16
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Ответ: Как загрузить все изображения с веб-сайта?
Почему Teleport Pro не подошёл? Он умеет делать полную копию сайта - при создании проекта опция Duplicate file structure.
Что ещё нужно?
Скрин
|
(Offline)
|
|
21.12.2015, 09:25
|
#17
|
Бывалый
Регистрация: 26.04.2009
Адрес: Россия, Уфа
Сообщений: 680
Написано 182 полезных сообщений (для 406 пользователей)
|
Ответ: Как загрузить все изображения с веб-сайта?
Сообщение от Жека
Почему Teleport Pro не подошёл? Он умеет делать полную копию сайта - при создании проекта опция Duplicate file structure.
Что ещё нужно?
Скрин
|
1. Мне Offline Explorer больше нравится. Он выигрывает как по скорости, так и по возможностям.
2. Но почему-то обе эти программы не хотят вытаскивать все фотки товаров из каталога.
|
(Offline)
|
|
21.12.2015, 11:13
|
#18
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Ответ: Как загрузить все изображения с веб-сайта?
2. Вероятно, потому что на них нет ссылки внутри html.
|
(Offline)
|
|
21.12.2015, 11:47
|
#19
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Как загрузить все изображения с веб-сайта?
Сообщение от Жека
2. Вероятно, потому что на них нет ссылки внутри html.
|
Может быть, она через время прогружается при помощи Ajax, топикстартер не проверял?
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
22.12.2015, 07:51
|
#20
|
Бывалый
Регистрация: 26.04.2009
Адрес: Россия, Уфа
Сообщений: 680
Написано 182 полезных сообщений (для 406 пользователей)
|
Ответ: Как загрузить все изображения с веб-сайта?
Вдоволь поизвращался и с jquery, и с C#.
Проблему решить не смог.
Но нашел другое, еще более извращенное решение:
Решил заранее подготовить все ссылки страниц, а после сохранять их в формате .mht
Можно ли это реализовать через код? Например, в .txt файле находятся все ссылки (каждая с новой строчки). Программа должна читать оттуда ссылки и сохранять в формате .mht на жесткий диск.
|
(Offline)
|
|
22.12.2015, 10:08
|
#21
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Как загрузить все изображения с веб-сайта?
Да просто отследи какие ajax запросы делает сайт во время прокрутки/загрузки страниц. Сделай такие же запросы. Получишь все что необходимо.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
|
|
22.12.2015, 13:39
|
#22
|
Мерцающий
Регистрация: 18.04.2006
Сообщений: 5,838
Написано 1,519 полезных сообщений (для 3,030 пользователей)
|
Ответ: Как загрузить все изображения с веб-сайта?
Я делал всё куда проще: Если картинки сайта отличались только цифрами (например, image01.jpg, image02.jpg, image03.jpg и т. д.), то я просто в блокноте создавал HTML-файлик, куда выводил все картинки разом и потом, через браузер "сохранял страничку автономно", тем самым скачивались все картинки, что нам и надо было.
__________________
Относись к человеку как к себе, иначе...
---
ДАННЫЕ:
qiwi 9150424059
Яндекс-деньги: 410012612648498
|
(Offline)
|
|
22.12.2015, 19:38
|
#23
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: Как загрузить все изображения с веб-сайта?
Сообщение от ingko
Я делал всё куда проще: Если картинки сайта отличались только цифрами (например, image01.jpg, image02.jpg, image03.jpg и т. д.), то я просто в блокноте создавал HTML-файлик, куда выводил все картинки разом и потом, через браузер "сохранял страничку автономно", тем самым скачивались все картинки, что нам и надо было.
|
Всего картинок должно быть примерно 100 тысяч.
|
Интересно сколько времени займет вбивание ссылок в блокнот.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
22.12.2015, 20:52
|
#24
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,358
Написано 2,472 полезных сообщений (для 6,854 пользователей)
|
Ответ: Как загрузить все изображения с веб-сайта?
И вот я в недоумении..
Сообщение от Program23
Javascript, Php
|
Ты знаешь что такое отладчик в браузере? Прямо там в консоли можно написать:
$('img').each(function() {
console.log($(this).attr('src'));
});
* - требует чтоб на сайте был jquery.
"Ванильный" способ:
var imgs = document.querySelectorAll('img');
for(var i =0, len = i < imgs.length; i < len; i++){
console.log(imgs[i].src);
}
И получаешь все пути всех изображений на странице, вставленных через img.
В данном случае "img" это селектор. Усложнить чтоб показывал только требуемые ссылки элементарно.
Изич же
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
23.12.2015, 01:45
|
#25
|
Бывалый
Регистрация: 26.04.2009
Адрес: Россия, Уфа
Сообщений: 680
Написано 182 полезных сообщений (для 406 пользователей)
|
Ответ: Как загрузить все изображения с веб-сайта?
Сообщение от Randomize
И вот я в недоумении..
Ты знаешь что такое отладчик в браузере? Прямо там в консоли можно написать:
$('img').each(function() {
console.log($(this).attr('src'));
});
* - требует чтоб на сайте был jquery.
"Ванильный" способ:
var imgs = document.querySelectorAll('img');
for(var i =0, len = i < imgs.length; i < len; i++){
console.log(imgs[i].src);
}
И получаешь все пути всех изображений на странице, вставленных через img.
В данном случае "img" это селектор. Усложнить чтоб показывал только требуемые ссылки элементарно.
Изич же
|
То, что в консоли можно писать. Я знаю.
А как мне получить те же ссылки, если не из под консоли?
1) То есть сначала мне нужно будет как-то загрузить html.
2) Потом его запарсить с помощью твоих способов.
3) Вывести результат.
Первый пункт вызывает у меня проблемы. Я уже весь stackoverflow перерыл.
А в плане возможностей мне понравился C# + htmlagilitypack. Вот только с селекторами я так и не смог разобраться. Находит только малую часть изображений на странице. Зато можно сразу же загрузить картинки в несколько потоков и положить в одну папочку.
|
(Offline)
|
|
23.12.2015, 02:21
|
#26
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,358
Написано 2,472 полезных сообщений (для 6,854 пользователей)
|
Ответ: Как загрузить все изображения с веб-сайта?
Сообщение от Program23
То, что в консоли можно писать. Я знаю.
А как мне получить те же ссылки, если не из под консоли?
1) То есть сначала мне нужно будет как-то загрузить html.
2) Потом его запарсить с помощью твоих способов.
3) Вывести результат.
Первый пункт вызывает у меня проблемы. Я уже весь stackoverflow перерыл
|
Открытие веб страницы
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://boolean.name/'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); $html = curl_exec($ch); curl_close($ch);
* поменять boolean.name на твою url
Скачивание картинки
$file = fopen('moi_golie_fotki.jpg',"wb");// Тут путь куда сохранять картинку $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://forum.boolean.name/image.php?u=4572&dateline=1368302793'); // url до твоей авы curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_FILE, $file); $html = curl_exec($ch); curl_close($ch);
Комборешение, поиск всех картинок на странице и их сохранение:
<?php
error_reporting(E_ALL); ini_set('display_errors', 'On'); ini_set('display_startup_errors', 'On'); ini_set('error_reporting', '-1'); ini_set('log_errors', 'On');
set_time_limit(0); // Чтоб скрипт не вышибло по таймауту
include 'phpQuery-onefile.php';
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://forum.boolean.name/showthread.php?t=20132'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); $html = curl_exec($ch); curl_close($ch);
$doc = phpQuery::newDocument($html); $stats = array();
foreach ($doc['img'] as $img) { // 'img' - селектор элемента $src = pq($img)->attr('src'); // фик относительных путей типа /images/photo.png $url = (mb_strpos($src, 'http') !== 0) ? 'http://forum.boolean.name/' . ltrim($src, '/.') : $src;
$filename = "./grabbed/" . uniqid(); // Временное имя файла в папке "grabbed" // Скачиваем каждую картинку в папку "grabbed" $file = fopen($filename, "wb"); // Тут путь куда сохранять картинку $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); // url до твоей авы curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_FILE, $file); curl_exec($ch);
$mime = curl_getinfo($ch, CURLINFO_CONTENT_TYPE); // Получаем mime типа скачаной херни curl_close($ch);
$mime2ext = array(// Словарик для волшебных превращений mime в расширение 'image/jpeg' => 'jpeg', 'image/png' => 'png', 'image/gif' => 'gif' );
// Переименовываем файл так чтоб у него появилось расширение, если хз что за файл будет .wtf rename($filename, $filename . '.' . (isset($mime2ext[$mime]) ? $mime2ext[$mime] : '.wtf')); }
Скачивает все картинки из элемнтов img со страницы "http://forum.boolean.name/showthread.php?t=20132" и сохраняет их в папку ./grabbed/ с уникальными именами.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
Последний раз редактировалось Randomize, 23.12.2015 в 04:15.
Причина: Забыл расширение для image/gif и пару ошибок пофиксил
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо Randomize за это полезное сообщение:
|
|
23.12.2015, 03:08
|
#27
|
Бывалый
Регистрация: 26.04.2009
Адрес: Россия, Уфа
Сообщений: 680
Написано 182 полезных сообщений (для 406 пользователей)
|
Ответ: Как загрузить все изображения с веб-сайта?
Сообщение от Randomize
Открытие веб страницы
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://boolean.name/'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); $html = curl_exec($ch); curl_close($ch);
* поменять boolean.name на твою url
Скачивание картинки
$file = fopen('moi_golie_fotki.jpg',"wb");// Тут путь куда сохранять картинку $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://forum.boolean.name/image.php?u=4572&dateline=1368302793'); // url до твоей авы curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_FILE, $file); $html = curl_exec($ch); curl_close($ch);
Комборешение, поиск всех картинок на странице и их сохранение:
<?php
error_reporting(E_ALL); ini_set('display_errors', 'On'); ini_set('display_startup_errors', 'On'); ini_set('error_reporting', '-1'); ini_set('log_errors', 'On');
set_time_limit(0); // Чтоб скрипт не вышибло по таймауту
include 'phpQuery-onefile.php';
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://forum.boolean.name/showthread.php?t=20132'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); $html = curl_exec($ch); curl_close($ch);
$doc = phpQuery::newDocument($html); $stats = array();
foreach ($doc['img'] as $img) { // 'img' - селектор элемента $src = pq($img)->attr('src'); // грязный фикс относительных путей типа /images/photo.png $url = (mb_strpos($src, 'http') !== 0) ? 'http://forum.boolean.name/' . ltrim($src, '/.') : $src;
$filename = "./grabbed/" . uniqid(); // Временное имя файла в папке "grabbed" $file = fopen($filename, "wb"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); // url до твоей авы curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_FILE, $file); curl_exec($ch); curl_close($ch);
$mime = curl_getinfo($ch, CURLINFO_CONTENT_TYPE); // Получаем mime тип скачаной херни
$mime2ext = array(// Словарик для волшебных превращений mime в расширение 'image/jpeg' => 'jpeg', 'image/png' => 'png', 'image/gif' );
// Переименовываем файл так чтоб у него появилось расширение, если хз что за файл будет .wtf rename($file, $file . (isset($mime2ext[$mime]) ? $mime2ext[$mime] : '.wtf')); }
Скачивает все картинки из элемнтов img со страницы "http://forum.boolean.name/showthread.php?t=20132" и сохраняет их в папку ./grabbed/ с уникальными именами.
|
Спасибо за подробное объяснение! Но пока код не удалось испытать.
Использую Денвер. Curl установил. Все подключил.
Но после запуска твоего кода, у меня вылетают предупреждения, связанные с Curl.
Возможно это как-то связано с несовместимостью версий curl и php?
UPD Попробую скачать Open Server и из под него запустить.
|
(Offline)
|
|
23.12.2015, 04:06
|
#28
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,358
Написано 2,472 полезных сообщений (для 6,854 пользователей)
|
Ответ: Как загрузить все изображения с веб-сайта?
Сообщение от Program23
у меня вылетают предупреждения, связанные с Curl.
|
No such file...
Папка "grabbed" существует? Права на запись есть?
cwd точно верный? Попробуй это впиндюрить после ini_set`ов
chdir(dirname(__FILE__));
upd, обновил тот пост, перекопируй сорс. Забыл расширение для mime image/gif
upd2, исправил пару тупых ошибок
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
23.12.2015, 04:27
|
#29
|
Бывалый
Регистрация: 26.04.2009
Адрес: Россия, Уфа
Сообщений: 680
Написано 182 полезных сообщений (для 406 пользователей)
|
Ответ: Как загрузить все изображения с веб-сайта?
Сообщение от Randomize
Папка "grabbed" существует? Права на запись есть?
|
Существует, права тоже есть.
В папку сохраняются подобные файлы: 5679dcbde2c45, 5679dcbe134ef и т.д.
Они просматриваются как картинки.
Все равно выскакивают подобные ошибки:
Warning:rename(./grabbed/5679dcbc0ec1b,./grabbed/5679dcbc0ec1b.gif) [function.rename]: Процесс не может получить доступ к файлу, так как этот файл занят другим процессом. (code: 32) in X:\home\parser_curl\www\parser.php on line 72
если не убрать:
rename($filename, $filename . '.' . (isset($mime2ext[$mime]) ? $mime2ext[$mime] : '.wtf'));
|
(Offline)
|
|
23.12.2015, 12:35
|
#30
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,358
Написано 2,472 полезных сообщений (для 6,854 пользователей)
|
Ответ: Как загрузить все изображения с веб-сайта?
Странно, ладно, попробуй fclose($file); добавить после curl_close($ch);
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 01:46.
|