Верстакфорум практиков
рекламаiprazon: приватные серверные адреса IPv4 и SOCKS5, безлимитный трафик, бесплатный тест до 2 часов
ФорумСбор данных

Картинки товаров: качать или ссылаться

Ирина Пахомова
Ирина Пахомова
Новичок
сообщений 280
с янв, второй сезон
1 сентября, 08:32первое сообщение

Собираю каталог на восемь тысяч позиций, у каждой от трёх до десяти фотографий. Сейчас складываю в выгрузку только адреса картинок, файлы не трогаю.

Заказчик посмотрел и просит забрать сами файлы: говорит, у поставщика адреса меняются и через полгода половина ссылок отвалится. Прикинула вес: около сорока гигабайт. Прогон и так идёт три часа, боюсь, что с картинками он растянется на всю ночь.

Как обычно поступают?

ferrum
ferrum
Участник
сообщений 660
с сен
8 февраля, 11:49#2

Качать, но отдельным прогоном и по кратким адресам.

Каталог собирается быстро, потому что там текст. Картинки это другой характер нагрузки: много мелких файлов, длинный хвост, половина времени уходит на установку соединений. Смешивать их в одном прогоне мучительно.

Лена Соболева
Лена Соболева
Участник
сообщений 385
с дек
15 июля, 14:06#3

а если товар уже был в прошлой выгрузке, картинки заново качать?

Борис Лапин
Борис Лапин
Знаток
сообщений 1960
с мар
22 декабря, 17:23#4

Ни в коем случае. Смотрите на заголовки: сервер отдаёт ETag и Last-Modified, по ним видно, менялся файл или лежит тот же самый.

Порядок такой. При первой загрузке сохраняете рядом с файлом ETag. На следующем прогоне шлёте запрос с заголовком If-None-Match, и если файл не тронут, сервер отвечает кодом триста четыре и пустым телом. Вес такого ответа несколько сотен байт, время миллисекунды. Из восьми тысяч позиций реально меняются десятки, поэтому второй прогон по картинкам идёт минут двадцать вместо часов.

curl -s -o /dev/null -w "%{http_code} %{size_download}\n" \
  -H 'If-None-Match: "a3f19c0e-52d1"' \
  https://postavshchik.example/img/12345_1.jpg
# 304 0

Второе, про которое спрашивают следом: имена файлов. Не берите имя с сайта поставщика, оно повторяется и перетирается. Собирайте своё из артикула и порядкового номера фотографии, а исходный адрес держите в отдельной колонке. Тогда выгрузка переживает и переезд картинок, и смену их имён у поставщика.

Третье: складывайте не в одну папку. Восемь тысяч позиций по десять фотографий это восемьдесят тысяч файлов, любая файловая система на такой куче начинает тормозить при листинге. Разбивайте по первым символам артикула, получится сотня папок вместо одной.

Ирина Пахомова
Ирина Пахомова
Новичок
сообщений 280
с янв, второй сезон
1 мая, 08:40#5
Борис Лапин: сервер отвечает кодом триста четыре и пустым телом

Проверила на поставщике, ETag отдаёт. Значит регулярный прогон по картинкам будет дешёвым.

По именам согласна, у них там половина файлов называется просто цифрами.

ferrum
ferrum
Участник
сообщений 660
с сен
8 октября, 11:57#6

Ещё поставьте предел на вес одного файла. Иногда поставщик выкладывает исходник с фотоаппарата на двадцать мегабайт, и такой один портит статистику по всей ночи.

вес выгрузки по видам файлов, гигабайты
вес выгрузки по видам файлов, гигабайты
Ирина Пахомова
Ирина Пахомова
Новичок
сообщений 280
с янв, второй сезон
15 марта, 14:14#7

Развела на два прогона: ночью текст, следом картинки с проверкой по ETag. Первый заход по фотографиям занял пять часов, второй сорок минут.

Заказчик доволен, я тоже. Спасибо за подсказку с триста четвёртым, без неё я бы каждый раз перекачивала всё заново.