Готовим универсальный файл загрузки товаров в интернет магазин для сбора НЧ трафика

denchik

Client
Регистрация
26.05.2017
Сообщения
45
Благодарностей
72
Баллы
18
Всем привет. Я очень часто ищу решение для своих задач на форуме, поэтому тоже хочу поделиться своими некоторыми наработками, которые хоть и не приносят денег напрямую, но позволяют экономить время и решать нестандартные задачи. В статье речь пойдет, о формировании файла со свойствами товаров для загрузки в интернет магазин для дальнейшего продвижения по НЧ ключам.

Вступление

Не для кого не секрет, что наиболее дешевым, эффективным, абсолютно "белым" и подходящим для как новых, так и популярных интернет магазинов является работа с фильтрами товаров.

Посмотрим на примере Mvideo

img1.png


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

Также с настройками фильтра можно формировать физический url с настройками meta тэгов для продвижения по НЧ запросам. Даже у Mvideo эта функция не настроена - при изменении параметров фильтра, url не изменяется. Конкуренция по таким запросам будет значительно ниже, чем по банальным с названием категории (купить ноутбук, или по названиям моделей - Ноутбук HP Pavilion 17-ab427ur 5MH95EA).

Возьмем категорию ноутбуки. Пример товара https://market.yandex.ru/product--noutbuk-asus-rog-strix-hero-ii-gl504gm/119822185/spec?track=tabs&lr=213 У него есть параметры. На каждый из параметров в будущем мы можем настроить физический url с необходимыми тегами и подборкой товаров. Тем более что плагины для CMS позволяют массово генерировать, нужно только 1 раз настроить и добавить товары с параметрами.

img2.png


Проверим конкуренцию по Мутагену

img3.png


Частота небольшая, но и конкуренция очень низкая

img4.png

Проверим частоту и конкуренцию по названию ноутбука


img5.png


img6.png


Как видим хоть частота и побольше, но и конкуренция сильнее в разы. И молодым интернет магазинам попасть по запросам с названием модели или категории - очень трудно. А в вот по НЧ запросам с фильтров - вполне реально.


Чтобы сделать физическими страницы фильтра и прописать необходимые тэги, обычно используются дополнительные модули к CMS. Например, для OpenCart, для ImageCms, для ShopScript и т. д.

Но главная проблема в том, чтобы сформировать эти параметры к товарам. Трудности с которыми я сталкивался:
  • не все поставщики имеют нормальную выгрузку через api, чтобы выгрузить автоматически все товары с параметрами
  • у некоторых вообще нет никакой выгрузки и можно только спарсить товары с сайта
  • когда в интернет магазине много параметров из разных категорий - то связывание параметров для новых товаров превращается в ад.
  • нет единого формата, у каждого поставщика немного разные форматы и приходится вручную подгонять все к единому виду.
Также иногда нужно просто расширить ассортимент виртуальными товарами (которых нет в продаже, просто для заполнения ассортимента). Тогда нужно только парсить товары с разных ИМ. И опять же привязать все это к единому формату становится проблемой.

Но как обычно, всемогущий ZennoPoster + немного усилий и можно сэкономить себе уйму времени и сделать то, до чего 90% конкурентов не дойдут.

Работа шаблона

img7.png


Для демонстрации возьмем Яндекс Маркета. Вообще лучше собирать ссылки на товары и парсить отдельными шаблонами, но чтобы выглядело это автономно и сразу можно было протестировать - встрою парсинг товаров.

Алгоритм работы шаблона следующий

  1. Сбор ссылок на товар (в идеале лучше подготовить отдельно шаблон который собирает ссылки на товары)
  2. Парсим данные о товаре и собираем массив параметров
  3. Достаем все спаршеные параметры, удаляем дубли
  4. Создаем в таблице столбцы с названием параметров (в шаблоне предлагаю 2 варианта, как проверять, есть ли уже столбец с названием параметра или нет: Первый - перед добавлением перебираем все заголовки, если нашли - не добавляем. Второй способ - используем Black List для названий параметром. Перед созданием столбца, проверяем, есть ли такой уже в BL.)
  5. Разбираем массив параметров у каждого товара по ячейкам

Для формирования xPath путей я использую плагин для Crome Xpather

Также хотелось бы отметить некоторые технические моменты, которые вы можете применить в своих шаблонах:
1. Проверка на наличие в Black List с помощью цикла Parallel.For
Данный цикл позволяет делать проверку не перебором строк, а многопоточно. Добавим в using
Код:
using System.Threading.Tasks;
Код

Код:
string url = project.Variables["url"].Value;
bool status = false;
IZennoList list = project.Lists["BL"];
Parallel.ForEach<string>(list, el => {
//project.SendInfoToLog(el);
if (el == url){
status = true;
return status;
}
});
Лично у меня проверка наличия url в Black листе занимает менее 1 сек. Даже если строк около 500 000. В блоке проверки на BL я добавил замер времени выполнения. Можете протестировать, за сколько у вас будет проходить проверка.

2. Долгая работа стандартных методов работы с таблицами

Когда пришлось разобрать параметры у 30 000 товаров, шаблон у меня работал около 10 дней. Он работал в 1 поток. Потом переделал его в многопоток, но это не решило проблему, так как самое узкое место - это запись данных в таблицу.

Соответственно в многопотоке разбор происходит быстро, а вот сама запись - очень долго. Даже отмена Lock (так как кол-во строк у нас не меняется, можно было не бояться утери данных) не помогла. Пришлось искать другое решение. И оно было найдено - это библиотека Epplus.dll для работы с Excel файлами.

Другой участник конкурса уже описывал работу с этой библиотекой, а также парсинг с помощью Xpath, думаю нет смысла повторяться, как добавить ссылку на библиотеку и т. п.

В юзинги добавляем

Код:
using OfficeOpenXml;
using OfficeOpenXml.Style;
В итоге переделав шаблон со стандартных методов работы с таблицей на работу через Epplus скорость шаблона выросла в десятки раз. Почему так происходит - мы сначала в файле, который в буфере, делаем все необходимые изменения, и только потом его сохраняем один раз, а не каждый раз нужно сохранять при изменении каждой ячейки.

Подводя итог

Мы предусмотрели работу с блэк листом для ссылок на товары и с блэк листом для свойств. Теперь можем сделать парсинг разных поставщиков, спарсить любые товары и корректно их выгрузить для правильно настройки фильтра.

Я применяю этот шаблон для работы с реальными интернет магазинами, но ничего не мешает делать интернет магазин по типу https://regmarkets.ru/ который просто аккумулируют товары на сайте, собирают трафик и со страницы товара переправляют пользователя на партнерский интернет магазин.

Важно отметить, что это не "черный" метод продвижения и никаких санкций за него не последует. Не стоит переживать за баны таких страниц и сайтов, так как мы не нарушаем никакие правила ПС, а наоборот, помогаем пользователю быстрее найти интересующий его товар.

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

P. S. Я уже достаточно долго работаю с ZP, но прямых денег он мне не принес ни рубля. Но сколько он мне сэкономил времени, сколько выполнил таких задач, до которых без него даже и не додумался - сложно сосчитать. И как приятный бонус начал по необходимости изучать C#, совмещая приятное с полезным.
 

Вложения

Для запуска проектов требуется программа ZennoPoster.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...

Для того чтобы запустить шаблон, откройте программу ZennoPoster. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.

Sanekk

Client
Регистрация
24.06.2016
Сообщения
705
Благодарностей
258
Баллы
63
кажется это первая статья за все конкурсы на сео тему, ТС +
тоже по большей части юзаю зенку под такие задачи.
denchik, НЧ в фильтре к переспаму же не приведут, ведь каждая сформированная страница уникальна?
Как плотно проставляешь НЧ, на каждую комбинацию сформированную фильтром?
 

denchik

Client
Регистрация
26.05.2017
Сообщения
45
Благодарностей
72
Баллы
18
кажется это первая статья за все конкурсы на сео тему, ТС +
тоже по большей части юзаю зенку под такие задачи.
denchik, НЧ в фильтре к переспаму же не приведут, ведь каждая сформированная страница уникальна?
Как плотно проставляешь НЧ, на каждую комбинацию сформированную фильтром?
А откуда будет переспам? Мы же не пихаем на страницу 100 ключей ради того, чтобы они просто были. Конечно, каждая страница уникальна и что самое главное - она релевантна запросам. Мы не просто написал текст, впихнув в него 100500 ключей, а предоставили пользователю то, что ему нужно. в 90% случаев, не нужны ни тексты, ни доп вхождения, ни ссылки - достаточно корректно прописать title, description, h1 - и страница в топе. Если модуль позволяет редактировать каждую страницу отдельно, то на самые частотные фильтры, рекомендую сделать не шаблонные теги, а индивидуальные.
 

Walterus

Client
Регистрация
30.09.2017
Сообщения
52
Благодарностей
17
Баллы
8
То что нужно! Как раз занят интернет магазином и формированием фильтра с выводом посадочных страниц под спрос, постепенно нужно переходить на использования Зенки на белые проекты и опережать конкурентов, которые бьются тупо за высокочастотку в директе! Ребята давайте делиться шаблона по SEO)
 
  • Спасибо
Реакции: denchik

che100

Client
Регистрация
18.04.2017
Сообщения
264
Благодарностей
59
Баллы
28
То что нужно! Как раз занят интернет магазином и формированием фильтра с выводом посадочных страниц под спрос, постепенно нужно переходить на использования Зенки на белые проекты и опережать конкурентов, которые бьются тупо за высокочастотку в директе! Ребята давайте делиться шаблона по SEO)
Ждем ваши шаблоны!:D
 
  • Спасибо
Реакции: Karamzin

specialist

Client
Регистрация
28.12.2018
Сообщения
674
Благодарностей
269
Баллы
63
Первый - перед добавлением перебираем все заголовки, если нашли - не добавляем. Второй способ - используем Black List для названий параметром.
Внутри CMS данные добавляются обычно в eav таблицы
Хранить их можно таким же способом, в первой таблице основные записи, в csv - все характеристики с привязкой по id товара, который кроме генерации возможно получить из url яндекс маркета.

На разных типах товаров есть все шансы выйти за пределы количества столбцов excel, для новых версий это 16384 и 256 столбцов для старых версий. Поэтому широкие таблицы не лучший вариант.

Чем не понравился csv, тоже не ясно, и ограничений нет на объем и блокировать не требуется.
 

capturis

Client
Регистрация
21.12.2013
Сообщения
42
Благодарностей
20
Баллы
8
Идея хорошая. Даже захотелось сдуть пыль со своего ИМ.
Но по технической части, что называется низачот. Для поиска в блеклисте нужно не ускорять поиск по массиву, а использовать хеш, где время доступа не зависит от количества данных. В C# это Dictionary. Проверка будет занимать менее 0.0001 сек вне зависимости от количества параметров.
 
  • Спасибо
Реакции: Astraport

denchik

Client
Регистрация
26.05.2017
Сообщения
45
Благодарностей
72
Баллы
18
Внутри CMS данные добавляются обычно в eav таблицы
Хранить их можно таким же способом, в первой таблице основные записи, в csv - все характеристики с привязкой по id товара, который кроме генерации возможно получить из url яндекс маркета.

На разных типах товаров есть все шансы выйти за пределы количества столбцов excel, для новых версий это 16384 и 256 столбцов для старых версий. Поэтому широкие таблицы не лучший вариант.

Чем не понравился csv, тоже не ясно, и ограничений нет на объем и блокировать не требуется.
Как говорится, проблемы решают по мере их поступления. Работал и со 150к товаров, но за пределы никогда не выходил, поэтому даже не задумывался об этом. Если же столкнусь с этим - тогда буду искать другие варианты.
 

denchik

Client
Регистрация
26.05.2017
Сообщения
45
Благодарностей
72
Баллы
18
Идея хорошая. Даже захотелось сдуть пыль со своего ИМ.
Но по технической части, что называется низачот. Для поиска в блеклисте нужно не ускорять поиск по массиву, а использовать хеш, где время доступа не зависит от количества данных. В C# это Dictionary. Проверка будет занимать менее 0.0001 сек вне зависимости от количества параметров.
Пока ещё не дошел до этого. На лучшие технические знания не претендую, шаблоны на продажу я не делаю, только для себя, поэтому если возникла задача - решил её - отлично. Может можно и лучше сделать, но для меня разница 10 дней работы шаблона и 1 день - это разница, а 1 день и пол дня - уже нет, так как я больше времени потрачу на доведение до идеала.
 

denchik

Client
Регистрация
26.05.2017
Сообщения
45
Благодарностей
72
Баллы
18
Чем импортируете в тот же опенкарт данные?
В зависимости от того, что есть на сайте. Я не создаю сайты, а занимаюсь лишь продвижением. Поэтому в любом случае, когда начинаем работу, какой то модуль для выгрузки товаров уже есть, вот под него и подгоняю формат. Вот самый простой способ выгрузить xlsx этим модулем.
 

capturis

Client
Регистрация
21.12.2013
Сообщения
42
Благодарностей
20
Баллы
8
1 день и пол дня - уже нет, так как я больше времени потрачу на доведение до идеала
Сдаётся мне, тут речь скорее о разнице 1 день и 10 минут. Впрочем, если бы все сразу делали правильно, большая часть программистов осталась бы без работы.
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
3 423
Благодарностей
2 434
Баллы
113
Для поиска в блеклисте нужно не ускорять поиск по массиву, а использовать хеш, где время доступа не зависит от количества данных. В C# это Dictionary.
Не разъясните как это работает с примерами кода поиска по блэклисту?
Есть ещё такое - Hashtable.
 

capturis

Client
Регистрация
21.12.2013
Сообщения
42
Благодарностей
20
Баллы
8
Не разъясните как это работает с примерами кода поиска по блэклисту?
Есть ещё такое - Hashtable.
Например так.
Код:
            string[] str = { "a", "b", "c", "d" };
            Hashtable myTable = new Hashtable();
       
            foreach (string s in str)
            {
                myTable.Add( s, "" );
            }
       
            if (myTable.ContainsKey("c"))
                Console.WriteLine("key exists");
            else
                Console.WriteLine("key NOT exists");
Ну или на перле, если кому-то вдруг понадобится.
Код:
my @arr = qw / a b c d /;
my %hash = map { $_ => "" } @arr;
print "key a exists\n" if exists $hash{ "a" };
P.S. Нашёл такую штуку https://rextester.com поиграться с кодом без установки окружения.
 
Последнее редактирование:
  • Спасибо
Реакции: Astraport и specialist

Koqpe

Client
Регистрация
23.12.2014
Сообщения
766
Благодарностей
393
Баллы
63
Код

  • string url = project.Variables["url"].Value;
  • bool status = false;
  • IZennoList list = project.Lists["BL"];
  • Parallel.ForEach<string>(list, el => {
  • //project.SendInfoToLog(el);
  • if (el == url){
  • status = true;
  • return status;
  • }
  • });
Лично у меня проверка наличия url в Black листе занимает менее 1 сек. Даже если строк около 500 000. В блоке проверки на BL я добавил замер времени выполнения. Можете протестировать, за сколько у вас будет проходить проверка.
return не на месте.

P.S. За снипет голосовал за Вас :-)
 

denchik

Client
Регистрация
26.05.2017
Сообщения
45
Благодарностей
72
Баллы
18
return не на месте.

P.S. За снипет голосовал за Вас :-)
Да действительно, здесь неправильный код вставил, проверил в шаблоне - там все верно. Спасибо, что заметили.
 

seoshmeo2018

Новичок
Регистрация
15.03.2018
Сообщения
25
Благодарностей
1
Баллы
3
Всем привет. Я очень часто ищу решение для своих задач на форуме, поэтому тоже хочу поделиться своими некоторыми наработками, которые хоть и не приносят денег напрямую, но позволяют экономить время и решать нестандартные задачи. В статье речь пойдет, о формировании файла со свойствами товаров для загрузки в интернет магазин для дальнейшего продвижения по НЧ ключам.

Вступление

Не для кого не секрет, что наиболее дешевым, эффективным, абсолютно "белым" и подходящим для как новых, так и популярных интернет магазинов является работа с фильтрами товаров.

Посмотрим на примере Mvideo

Посмотреть вложение 39140

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

Также с настройками фильтра можно формировать физический url с настройками meta тэгов для продвижения по НЧ запросам. Даже у Mvideo эта функция не настроена - при изменении параметров фильтра, url не изменяется. Конкуренция по таким запросам будет значительно ниже, чем по банальным с названием категории (купить ноутбук, или по названиям моделей - Ноутбук HP Pavilion 17-ab427ur 5MH95EA).

Возьмем категорию ноутбуки. Пример товара https://market.yandex.ru/product--noutbuk-asus-rog-strix-hero-ii-gl504gm/119822185/spec?track=tabs&lr=213 У него есть параметры. На каждый из параметров в будущем мы можем настроить физический url с необходимыми тегами и подборкой товаров. Тем более что плагины для CMS позволяют массово генерировать, нужно только 1 раз настроить и добавить товары с параметрами.

Посмотреть вложение 39141

Проверим конкуренцию по Мутагену

Посмотреть вложение 39142

Частота небольшая, но и конкуренция очень низкая

Посмотреть вложение 39143
Проверим частоту и конкуренцию по названию ноутбука


Посмотреть вложение 39144

Посмотреть вложение 39145

Как видим хоть частота и побольше, но и конкуренция сильнее в разы. И молодым интернет магазинам попасть по запросам с названием модели или категории - очень трудно. А в вот по НЧ запросам с фильтров - вполне реально.



Чтобы сделать физическими страницы фильтра и прописать необходимые тэги, обычно используются дополнительные модули к CMS. Например, для OpenCart, для ImageCms, для ShopScript и т. д.

Но главная проблема в том, чтобы сформировать эти параметры к товарам. Трудности с которыми я сталкивался:
  • не все поставщики имеют нормальную выгрузку через api, чтобы выгрузить автоматически все товары с параметрами
  • у некоторых вообще нет никакой выгрузки и можно только спарсить товары с сайта
  • когда в интернет магазине много параметров из разных категорий - то связывание параметров для новых товаров превращается в ад.
  • нет единого формата, у каждого поставщика немного разные форматы и приходится вручную подгонять все к единому виду.
Также иногда нужно просто расширить ассортимент виртуальными товарами (которых нет в продаже, просто для заполнения ассортимента). Тогда нужно только парсить товары с разных ИМ. И опять же привязать все это к единому формату становится проблемой.

Но как обычно, всемогущий ZennoPoster + немного усилий и можно сэкономить себе уйму времени и сделать то, до чего 90% конкурентов не дойдут.

Работа шаблона

Посмотреть вложение 39146


Для демонстрации возьмем Яндекс Маркета. Вообще лучше собирать ссылки на товары и парсить отдельными шаблонами, но чтобы выглядело это автономно и сразу можно было протестировать - встрою парсинг товаров.

Алгоритм работы шаблона следующий

  1. Сбор ссылок на товар (в идеале лучше подготовить отдельно шаблон который собирает ссылки на товары)
  2. Парсим данные о товаре и собираем массив параметров
  3. Достаем все спаршеные параметры, удаляем дубли
  4. Создаем в таблице столбцы с названием параметров (в шаблоне предлагаю 2 варианта, как проверять, есть ли уже столбец с названием параметра или нет: Первый - перед добавлением перебираем все заголовки, если нашли - не добавляем. Второй способ - используем Black List для названий параметром. Перед созданием столбца, проверяем, есть ли такой уже в BL.)
  5. Разбираем массив параметров у каждого товара по ячейкам

Для формирования xPath путей я использую плагин для Crome Xpather

Также хотелось бы отметить некоторые технические моменты, которые вы можете применить в своих шаблонах:
1. Проверка на наличие в Black List с помощью цикла Parallel.For
Данный цикл позволяет делать проверку не перебором строк, а многопоточно. Добавим в using
Код:
using System.Threading.Tasks;
Код

Код:
string url = project.Variables["url"].Value;
bool status = false;
IZennoList list = project.Lists["BL"];
Parallel.ForEach<string>(list, el => {
//project.SendInfoToLog(el);
if (el == url){
status = true;
return status;
}
});
Лично у меня проверка наличия url в Black листе занимает менее 1 сек. Даже если строк около 500 000. В блоке проверки на BL я добавил замер времени выполнения. Можете протестировать, за сколько у вас будет проходить проверка.

2. Долгая работа стандартных методов работы с таблицами

Когда пришлось разобрать параметры у 30 000 товаров, шаблон у меня работал около 10 дней. Он работал в 1 поток. Потом переделал его в многопоток, но это не решило проблему, так как самое узкое место - это запись данных в таблицу.

Соответственно в многопотоке разбор происходит быстро, а вот сама запись - очень долго. Даже отмена Lock (так как кол-во строк у нас не меняется, можно было не бояться утери данных) не помогла. Пришлось искать другое решение. И оно было найдено - это библиотека Epplus.dll для работы с Excel файлами.

Другой участник конкурса уже описывал работу с этой библиотекой, а также парсинг с помощью Xpath, думаю нет смысла повторяться, как добавить ссылку на библиотеку и т. п.

В юзинги добавляем

Код:
using OfficeOpenXml;
using OfficeOpenXml.Style;
В итоге переделав шаблон со стандартных методов работы с таблицей на работу через Epplus скорость шаблона выросла в десятки раз. Почему так происходит - мы сначала в файле, который в буфере, делаем все необходимые изменения, и только потом его сохраняем один раз, а не каждый раз нужно сохранять при изменении каждой ячейки.

Подводя итог

Мы предусмотрели работу с блэк листом для ссылок на товары и с блэк листом для свойств. Теперь можем сделать парсинг разных поставщиков, спарсить любые товары и корректно их выгрузить для правильно настройки фильтра.

Я применяю этот шаблон для работы с реальными интернет магазинами, но ничего не мешает делать интернет магазин по типу Крупнейший каталог товаров в России - regmarkets.ru который просто аккумулируют товары на сайте, собирают трафик и со страницы товара переправляют пользователя на партнерский интернет магазин.

Важно отметить, что это не "черный" метод продвижения и никаких санкций за него не последует. Не стоит переживать за баны таких страниц и сайтов, так как мы не нарушаем никакие правила ПС, а наоборот, помогаем пользователю быстрее найти интересующий его товар.

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

P. S. Я уже достаточно долго работаю с ZP, но прямых денег он мне не принес ни рубля. Но сколько он мне сэкономил времени, сколько выполнил таких задач, до которых без него даже и не додумался - сложно сосчитать. И как приятный бонус начал по необходимости изучать C#, совмещая приятное с полезным.
Добрый вечер!
Как с вами можно поговорить ? Напишите пожалуйста в личку контакты.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)