Как я товары с Nethouse «парсил»

Расскажу как я нашел оригинальный способ слить все товары магазина на Nethouse с картинками. Способ немного геморный, но лучше выдумать не мог.

Что случилось?

В связи с переездом с богомерзкого (хоть и не самого худшего) Nethouse на полноценный движок, встала задача слить все картинки с сайта. Но так как я строкой выше упомянул, что данный конструктор богомерзкий, там даже картинки хранятся на каком-то левом урле, состоящем из непонятной мешанины буковок и циферок. А мне надо было не просто слить эти картинки, но и переименовать каждую в соответствии с ее артикулом, во как!

Значит, первым моим решением было подключить PHP, в котором я полный 0. И начал я искать готовые решения. Нашел один код парсинга картинок, он не сработал, нашел другой, он ошибку выдал. Короче плюнул я на это дело, решил искать другой подход. Очень долго мучился, думал. В итоге, как оно всегда бывает, осенило.

В интернете есть несколько сервисов, предназначенных для организаторов совместных покупок. А так как такие организаторы, как правило, домохозяйки, то и сделано там все так, чтобы осилить мог каждый. Вот я и разобрался. Суть в чем: ты нажимаешь кнопочку сервиса на нужной странице магазина, он парсит названия, цены и, самое главное, заходит в карточку и берет оттуда путь до полноценной картинки. Я использовал Sliza.ru. Для работы сервиса  надо всего лишь вынести их кнопку на панель закладок. Выносишь кнопку, заходишь в категорию магазина, жмешь на нее — вуаля, одну страничку спарсили. Благо страниц на сайте не так уж много, выгрузил все товары где-то за час. Выгружал я всё в CSV файл, потому что в XLS почему-то не выдавалась вся информация.

В итоге у меня получилось порядка 50 CSV файлов, которые я склеил в 5 по количеству категорий товаров.  Дальше надо было скачать все картинки и распихать их по папкам категорий. Эту задачу я решил через Download Master. Просто включаешь его и начинаешь копировать прямые урлы, он их сам подхватит, остается только указать какие картинки в какую папку (категорию) складывать. После того как всё скачал, встал вопрос правильной массовой переименовки. Воспользовался все теми же CSV файлами. Так выглядела типичная ссылка на картинку в Nethouse:

http://i.siteapi.org/3bsqNznznK7LRuqZoxFmglALZso=/fit-in/1024x768/center/top/18c6766d384392b.s.siteapi.org/img/[СПЛОШНАЯ_МЕШАНИНА_ИЗ_БУКВ И_ЦИФР].jpg

Вот эта мешанина и представляла собой название картинки, которое ей присвоил Nethouse. Я скопировал все урлы на чистый лист в Sublime Text и просто сделал поиск по регулярному выражению .*/, и заменил пустотой. Так я удалил все, что находится левее  символа слэш (/). В итоге в каждой строке осталось только название картинки. В некоторых урлах правда после .jpg еще стояли символы ?1, я просто сделал поиск и замену по ним.

Теперь у нас есть имена файлов, которые мы сохранили на компьютере. Сейчас их как-то нужно переименовать в соответствующие артикулы. Вернемся к CSV. Так как у нас уже есть список названий картинок в том порядке, в котором они были перечислены в этом файле, мы создаем пустой Excel файлик и переносим эти названия в столбик. Снова переходим к файлу выгрузки и копируем оттуда уже не столбец с url картинок, а тот столбец, где указаны артикулы. Лично у нас артикул можно найти в самом названии позиции, поэтому я скопировал столбец с названиями. Выглядело это так:

Товар такой-то [артикул#1]
Товар такой-то [артикул#2]
Товар такой-то [артикул#3]
...

Дальше перенес все это безобразие в Sublime Text и просто сделал поиск по «Товар такой-то» с заменой на пустоту. В итоге получил список артикулов товаров, полностью соответствующий списку названий изображений. При этом важно понимать, что еще и порядок сохранился. То есть если картинке dgsjdgep35tw64.jpg ранее соответствовал артикул FJ8350, то так оно и останется. Вставляем артикулы во второй столбик нашего файла, где мы держим названия изображений. Получилась такая структура: в столбце A у меня были названия картинок, в столбце B — соответствующие им артикулы. Я на всякий случай сделал удаление дублей в обоих столбцах, но если вы уверены, что у вас таких точно нет, то лучше все-таки поступите так же, уверенный мой. Далее я отсортировал столбики в алфавитном порядке по имени в столбце A.

Надо сделать еще кое-что. Если вы просто скормите Total'у артикулы в качестве имен, то получите не картинки, а файлы без расширения. А так как расширения у картинок могут быть разные, надо дать каждой своё. Как это сделать? Нужно снова скопировать существующие имена файлов из столбца A, вставить их в текстовый редактор и произвести поиск по регулярному выражению .*\.. Так мы получим список расширений с соответствием. Вставляем его в наш Excel файл в столбец C, а в соседнем D пишем формулу =B1&"."&C1 и протягиваем ее на всю длину солбца (двойной клик по уголку, если кто не в курсе). В итоге в столбике D мы получили наши будущие имена картинок с нужным расширением. Копируем их в пустой файл в текстовом редакторе и сохраняем его в TXT. Он нам понадобится чуть позже.

Теперь переходим (или скачиваем и переходим) в Total Commander. Тут мы открываем нужную нам папку с картинками, сортируем их в алфавитном порядке, выделяем там все файлы и жмем CTRL+M. Далее жмакаем на маленькую кнопочку в виде файлика в блоке поиска и замены (Search & Replace). Там выбираем «Загрузить имена из файла (Load names from file)» и выбираем тот TXT файл, который мы сохраняли ранее. Всё! Total Commander быстренько проведет переименовку, и все ваши картинки будут называться в соответствии с артикулами! На всякий случай выбираем пару позиций из того же изначального CSV файла, смотрим какая у них указана картинка — копируем артикул позиции и производим поиск по этому артикулу в полученной папке. Все должно сойтись.

Получилось объемно и весьма костыльно, но я пришел к выводу, что в моем случае такой способ был бы быстрее, чем изучение PHP с нуля. Всем спасибо, все свободны. Хотя нет, можете задавать вопросы и обсудить этот способ в комментариях.

———————————————————————————————————————————

Небольшой апдейт

Позже, когда я указывал путь к файлам картинок в каталоге нового магазина (Opencart), я столкнулся с тем, что здесь тоже нужно указывать расширения для каждого файла отдельно, ведь там лежали не только JPG, но и PNG и даже JPEG. В итоге просто скачал все файлы с разрешением, отличным от JPG, и массово их преобразовал с помощью XnView в, соответственно, .JPG. После чего залил обратно, естественно перед этим удалив оригинальные файлы со старыми расширениями. Поэтому соответствующий шаг переименовки с соблюдением расширений можно немного упразднить, если конечно для вас они не имеют значения, как и для меня.

Вот такой вот способ получился. Может, у вас есть лучше? 😉 Делитесь в комментариях, задавайте вопросы.

Добавить комментарий

Ваш e-mail не будет опубликован.