forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Болтовня (http://forum.boolean.name/forumdisplay.php?f=25)
-   -   Как загрузить все изображения с веб-сайта? (http://forum.boolean.name/showthread.php?t=20132)

Жека 21.12.2015 07:50

Ответ: Как загрузить все изображения с веб-сайта?
 
Почему Teleport Pro не подошёл? Он умеет делать полную копию сайта - при создании проекта опция Duplicate file structure.
Что ещё нужно?

Скрин

Program23 21.12.2015 09:25

Ответ: Как загрузить все изображения с веб-сайта?
 
Цитата:

Сообщение от Жека (Сообщение 302807)
Почему Teleport Pro не подошёл? Он умеет делать полную копию сайта - при создании проекта опция Duplicate file structure.
Что ещё нужно?

Скрин

1. Мне Offline Explorer больше нравится. Он выигрывает как по скорости, так и по возможностям.
2. Но почему-то обе эти программы не хотят вытаскивать все фотки товаров из каталога.

Жека 21.12.2015 11:13

Ответ: Как загрузить все изображения с веб-сайта?
 
2. Вероятно, потому что на них нет ссылки внутри html.

ABTOMAT 21.12.2015 11:47

Ответ: Как загрузить все изображения с веб-сайта?
 
Цитата:

Сообщение от Жека (Сообщение 302811)
2. Вероятно, потому что на них нет ссылки внутри html.

Может быть, она через время прогружается при помощи Ajax, топикстартер не проверял?

Program23 22.12.2015 07:51

Ответ: Как загрузить все изображения с веб-сайта?
 
Вдоволь поизвращался и с jquery, и с C#.
Проблему решить не смог.

Но нашел другое, еще более извращенное решение:
Решил заранее подготовить все ссылки страниц, а после сохранять их в формате .mht
Можно ли это реализовать через код? Например, в .txt файле находятся все ссылки (каждая с новой строчки). Программа должна читать оттуда ссылки и сохранять в формате .mht на жесткий диск.

pax 22.12.2015 10:08

Ответ: Как загрузить все изображения с веб-сайта?
 
Да просто отследи какие ajax запросы делает сайт во время прокрутки/загрузки страниц. Сделай такие же запросы. Получишь все что необходимо.

ingko 22.12.2015 13:39

Ответ: Как загрузить все изображения с веб-сайта?
 
Я делал всё куда проще: Если картинки сайта отличались только цифрами (например, image01.jpg, image02.jpg, image03.jpg и т. д.), то я просто в блокноте создавал HTML-файлик, куда выводил все картинки разом и потом, через браузер "сохранял страничку автономно", тем самым скачивались все картинки, что нам и надо было. :)

Nex 22.12.2015 19:38

Ответ: Как загрузить все изображения с веб-сайта?
 
Цитата:

Сообщение от ingko (Сообщение 302835)
Я делал всё куда проще: Если картинки сайта отличались только цифрами (например, image01.jpg, image02.jpg, image03.jpg и т. д.), то я просто в блокноте создавал HTML-файлик, куда выводил все картинки разом и потом, через браузер "сохранял страничку автономно", тем самым скачивались все картинки, что нам и надо было. :)

Цитата:

Всего картинок должно быть примерно 100 тысяч.
Интересно сколько времени займет вбивание ссылок в блокнот.

Randomize 22.12.2015 20:52

Ответ: Как загрузить все изображения с веб-сайта?
 
И вот я в недоумении..
Цитата:

Сообщение от Program23 (Сообщение 302771)
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" это селектор. Усложнить чтоб показывал только требуемые ссылки элементарно.

Изич же

Program23 23.12.2015 01:45

Ответ: Как загрузить все изображения с веб-сайта?
 
Цитата:

Сообщение от Randomize (Сообщение 302846)
И вот я в недоумении..


Ты знаешь что такое отладчик в браузере? Прямо там в консоли можно написать:
Код:

$('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. Вот только с селекторами я так и не смог разобраться. Находит только малую часть изображений на странице. Зато можно сразу же загрузить картинки в несколько потоков и положить в одну папочку.

Randomize 23.12.2015 02:21

Ответ: Как загрузить все изображения с веб-сайта?
 
Цитата:

Сообщение от Program23 (Сообщение 302849)
То, что в консоли можно писать. Я знаю.
А как мне получить те же ссылки, если не из под консоли?
1) То есть сначала мне нужно будет как-то загрузить html.
2) Потом его запарсить с помощью твоих способов.
3) Вывести результат.

Первый пункт вызывает у меня проблемы. Я уже весь stackoverflow перерыл

Открытие веб страницы
PHP код:

$ch curl_init();
curl_setopt($chCURLOPT_URL'http://boolean.name/');
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);
$html curl_exec($ch);
curl_close($ch); 

* поменять boolean.name на твою url

Скачивание картинки
PHP код:

$file fopen('moi_golie_fotki.jpg',"wb");// Тут путь куда сохранять картинку
$ch curl_init();
curl_setopt($chCURLOPT_URL'http://forum.boolean.name/image.php?u=4572&dateline=1368302793'); // url до твоей авы
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);
curl_setopt($chCURLOPT_FILE$file); 
$html curl_exec($ch);
curl_close($ch); 

Комборешение, поиск всех картинок на странице и их сохранение:
PHP код:

<?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($chCURLOPT_URL'http://forum.boolean.name/showthread.php?t=20132');
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);
$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($chCURLOPT_URL$url); // url до твоей авы
    
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
    
curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);
    
curl_setopt($chCURLOPT_FILE$file);
    
curl_exec($ch);
    

    
$mime curl_getinfo($chCURLINFO_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/ с уникальными именами.

Program23 23.12.2015 03:08

Ответ: Как загрузить все изображения с веб-сайта?
 
Вложений: 1
Цитата:

Сообщение от Randomize (Сообщение 302852)
Открытие веб страницы
PHP код:

$ch curl_init();
curl_setopt($chCURLOPT_URL'http://boolean.name/');
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);
$html curl_exec($ch);
curl_close($ch); 

* поменять boolean.name на твою url

Скачивание картинки
PHP код:

$file fopen('moi_golie_fotki.jpg',"wb");// Тут путь куда сохранять картинку
$ch curl_init();
curl_setopt($chCURLOPT_URL'http://forum.boolean.name/image.php?u=4572&dateline=1368302793'); // url до твоей авы
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);
curl_setopt($chCURLOPT_FILE$file); 
$html curl_exec($ch);
curl_close($ch); 

Комборешение, поиск всех картинок на странице и их сохранение:
PHP код:

<?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($chCURLOPT_URL'http://forum.boolean.name/showthread.php?t=20132');
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);
$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($chCURLOPT_URL$url); // url до твоей авы
    
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
    
curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);
    
curl_setopt($chCURLOPT_FILE$file);
    
curl_exec($ch);
    
curl_close($ch);

    
$mime curl_getinfo($chCURLINFO_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?

Вложение 22171

UPD Попробую скачать Open Server и из под него запустить.

Randomize 23.12.2015 04:06

Ответ: Как загрузить все изображения с веб-сайта?
 
Цитата:

Сообщение от Program23 (Сообщение 302853)
у меня вылетают предупреждения, связанные с Curl.

No such file...

Папка "grabbed" существует? Права на запись есть?

cwd точно верный? Попробуй это впиндюрить после ini_set`ов
PHP код:

chdir(dirname(__FILE__)); 

upd, обновил тот пост, перекопируй сорс. Забыл расширение для mime image/gif
upd2, исправил пару тупых ошибок

Program23 23.12.2015 04:27

Ответ: Как загрузить все изображения с веб-сайта?
 
Цитата:

Сообщение от Randomize (Сообщение 302855)
Папка "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'));

Randomize 23.12.2015 12:35

Ответ: Как загрузить все изображения с веб-сайта?
 
Странно, ладно, попробуй fclose($file); добавить после curl_close($ch);


Часовой пояс GMT +4, время: 23:39.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot