Войти
NeoBooker.ru
Добро пожаловать к нам в гости!
Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Страница 1 из 11
Модератор форума: Peter, DEMBEL 
Форум NeoBook » Всё о программе NeoBook » Проекты NeoBook » PriceMixer (Обработчик прайсов и парсер с контролем цен)
PriceMixer
wi1wДата: Пн, 17 Февраля 2014, 18:52 | Сообщение # 1
Новичок
Практически готовое приложение на НБ выполняющее автоматизацию в наполнении интернет магазина, а так же его администрировании.
Что умеет:
Главное окно
1) Записывать прайсы в базу данных как общую так и для каждого поставщика отдельную (из csv)
2) Контроль от дублирования товаров
3) Обновление базы
4) Корректная работа с утф8
Окно Базы
1) Поиск по базе
2) Генератор ссылок
3) Редактирование базы
Окно парсера
1) Парсинг
2) Контроль цен по хотлайн.юа

Это пожалуй самые основные функции. Остальное дорабатываю, а именно:
1) импорт из екселя
2) крон задачи
3) експорт в xml

Выкладываю компилированную версию и исходник для тех кому нужен, совершенно бесплатно :)
Не судите строго, пытаюсь довести все до ума но много нюансов которые не дают этого сделать.
Хелпа тоже покамест нету, но скоро будет.

Добавлено (17 Февраля 2014, 18:39)
---------------------------------------------
Очень попрошу местных знатоков помочь в одном очень щепетильном деле.
Закачав прайс тест, выбрав разделителем ; (точка с запятой) создаются записи в базе созданной и артикульной базе, находящейся в правом верхнем углу главного окна кнопка [V] покажет ее.
Записи создаются верные и правильные. Выбрав в парсере чекбокс "APC", с парраметром парсинга "Hotline_apc" и для чекбокса "из бд" ссылкой "hotline.ua/sr/?q=[1]&tab=pr&sort=0", происходит парсинг. сейчас я его активно "мучаю" на предмет правильной записи в артикульную базу.
Спарсив цены должна происходить запись в базу этих цен в соответствии с артикулами, но возникает казус и артикулы перезаписываются. Соответственно получается каша.
В примере все очень печально в плане кода и переменных. Если есть желание помочь - буду очень признателен.

За парсинг цен из базы отвечает исходник "pars", а точнее subroutine "pars_bd_start"
А в основном окне все операции с парсингом обрабатывает subroutine "parser_run"

Понимаю что пример совсем не пример, и там много всего. Но если возникнут вопросы - я сразу же отвечу что и зачем там написано.

Добавлено (17 Февраля 2014, 18:41)
---------------------------------------------
Приложение

Добавлено (17 Февраля 2014, 18:47)
---------------------------------------------
Программа весит 4,5 мб
ограничение к загрузке 1000 кб
как правильно поступить чтоб не заливать на файлообменники?

Добавлено (17 Февраля 2014, 18:52)
---------------------------------------------
Скачать программу
Прикрепления: Sors.zip(25Kb) · PriceMixer_Sour.zip(861Kb)
 
СообщениеПрактически готовое приложение на НБ выполняющее автоматизацию в наполнении интернет магазина, а так же его администрировании.
Что умеет:
Главное окно
1) Записывать прайсы в базу данных как общую так и для каждого поставщика отдельную (из csv)
2) Контроль от дублирования товаров
3) Обновление базы
4) Корректная работа с утф8
Окно Базы
1) Поиск по базе
2) Генератор ссылок
3) Редактирование базы
Окно парсера
1) Парсинг
2) Контроль цен по хотлайн.юа

Это пожалуй самые основные функции. Остальное дорабатываю, а именно:
1) импорт из екселя
2) крон задачи
3) експорт в xml

Выкладываю компилированную версию и исходник для тех кому нужен, совершенно бесплатно :)
Не судите строго, пытаюсь довести все до ума но много нюансов которые не дают этого сделать.
Хелпа тоже покамест нету, но скоро будет.

Добавлено (17 Февраля 2014, 18:39)
---------------------------------------------
Очень попрошу местных знатоков помочь в одном очень щепетильном деле.
Закачав прайс тест, выбрав разделителем ; (точка с запятой) создаются записи в базе созданной и артикульной базе, находящейся в правом верхнем углу главного окна кнопка [V] покажет ее.
Записи создаются верные и правильные. Выбрав в парсере чекбокс "APC", с парраметром парсинга "Hotline_apc" и для чекбокса "из бд" ссылкой "hotline.ua/sr/?q=[1]&tab=pr&sort=0", происходит парсинг. сейчас я его активно "мучаю" на предмет правильной записи в артикульную базу.
Спарсив цены должна происходить запись в базу этих цен в соответствии с артикулами, но возникает казус и артикулы перезаписываются. Соответственно получается каша.
В примере все очень печально в плане кода и переменных. Если есть желание помочь - буду очень признателен.

За парсинг цен из базы отвечает исходник "pars", а точнее subroutine "pars_bd_start"
А в основном окне все операции с парсингом обрабатывает subroutine "parser_run"

Понимаю что пример совсем не пример, и там много всего. Но если возникнут вопросы - я сразу же отвечу что и зачем там написано.

Добавлено (17 Февраля 2014, 18:41)
---------------------------------------------
Приложение

Добавлено (17 Февраля 2014, 18:47)
---------------------------------------------
Программа весит 4,5 мб
ограничение к загрузке 1000 кб
как правильно поступить чтоб не заливать на файлообменники?

Добавлено (17 Февраля 2014, 18:52)
---------------------------------------------
Скачать программу

Автор - wi1w
Дата добавления - 17 Февраля 2014 в 18:52
mishemДата: Пн, 17 Февраля 2014, 18:55 | Сообщение # 2
Эксперт форума
Цитата wi1w ()
как правильно поступить чтоб не заливать на файлообменники?

http://rghost.ru/


Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.
 
Сообщение
Цитата wi1w ()
как правильно поступить чтоб не заливать на файлообменники?

http://rghost.ru/

Автор - mishem
Дата добавления - 17 Февраля 2014 в 18:55
wi1wДата: Пн, 17 Февраля 2014, 18:59 | Сообщение # 3
Новичок
На гуглдрайве расшарил для тех у кого есть ссылка

Добавлено (17 Февраля 2014, 18:59)
---------------------------------------------
забыл написать что используются hpwutility, и zmfunctions

 
СообщениеНа гуглдрайве расшарил для тех у кого есть ссылка

Добавлено (17 Февраля 2014, 18:59)
---------------------------------------------
забыл написать что используются hpwutility, и zmfunctions


Автор - wi1w
Дата добавления - 17 Февраля 2014 в 18:59
mishemДата: Пн, 17 Февраля 2014, 19:01 | Сообщение # 4
Эксперт форума
С проектом сделай Прект>Архивация, что бы все ресурсы в одну папку сложить, и перезалей проект.
А то картинок нет.


Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.
 
СообщениеС проектом сделай Прект>Архивация, что бы все ресурсы в одну папку сложить, и перезалей проект.
А то картинок нет.

Автор - mishem
Дата добавления - 17 Февраля 2014 в 19:01
antonДата: Пн, 17 Февраля 2014, 19:02 | Сообщение # 5
Ветеран форума
Прикольно, жаль только не хрена не понятно, в исходнике не хватает картинок и какой то функции. Да и в описании не помешало бы указать какие плагины использовал при создании.

И к программе явно будит нужен кокретный такой ХЕЛП. Как парсить, что парсить, и зачем парсить я вообще не понял.


"Вы знаете, нам очень понравились все варианты, что вы прислали. Даже не знаем, что выбрать… А может попробуем объединить все три логотипа в один?"

Сообщение отредактировано
anton - Пн, 17 Февраля 2014, 19:07
 
СообщениеПрикольно, жаль только не хрена не понятно, в исходнике не хватает картинок и какой то функции. Да и в описании не помешало бы указать какие плагины использовал при создании.

И к программе явно будит нужен кокретный такой ХЕЛП. Как парсить, что парсить, и зачем парсить я вообще не понял.

Автор - anton
Дата добавления - 17 Февраля 2014 в 19:02
wi1wДата: Пн, 17 Февраля 2014, 19:20 | Сообщение # 6
Новичок
Понял. спасибо

Добавлено (17 Февраля 2014, 19:08)
---------------------------------------------
Цитата anton ()

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

используются hpwutility, и zmfunctions

Добавлено (17 Февраля 2014, 19:15)
---------------------------------------------
Расскажу предысторию.
Есть интернет магазин. Меня попросили наполни его 50к товарами.
В прайсах есть имена, ссылки на картинки и артикулы.
Цен и описаний нет. Магазин на опен карте. Использован модуль автонаполнения товарами.
Задача сделать так чтоб цены автоматом проставлялись в магазине и было всем товарам описание.
Парсер собственно и выполняет эти задачи, а чтоб контролировать наличия и товары на которые все делается вручную и создана программа прайс миксер.

Добавлено (17 Февраля 2014, 19:18)
---------------------------------------------
А так же, имея НБ не имеющий многозадачности, было придуманно использовать парсер ка маленькую утилитку запускающуюся Nое количество раз и общающуюся с основным приложением через файл pars, в который передаются нужные для запуска и действий параметры

Добавлено (17 Февраля 2014, 19:20)
---------------------------------------------
Еще я так и не придумал как отлавливать приложения парсера которые запустились но не появились в окошках. Сейчас я их отключаю вручную через диспетчер задач, что не по феншую, но реализацию не придумал еще
 
СообщениеПонял. спасибо

Добавлено (17 Февраля 2014, 19:08)
---------------------------------------------
Цитата anton ()

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

используются hpwutility, и zmfunctions

Добавлено (17 Февраля 2014, 19:15)
---------------------------------------------
Расскажу предысторию.
Есть интернет магазин. Меня попросили наполни его 50к товарами.
В прайсах есть имена, ссылки на картинки и артикулы.
Цен и описаний нет. Магазин на опен карте. Использован модуль автонаполнения товарами.
Задача сделать так чтоб цены автоматом проставлялись в магазине и было всем товарам описание.
Парсер собственно и выполняет эти задачи, а чтоб контролировать наличия и товары на которые все делается вручную и создана программа прайс миксер.

Добавлено (17 Февраля 2014, 19:18)
---------------------------------------------
А так же, имея НБ не имеющий многозадачности, было придуманно использовать парсер ка маленькую утилитку запускающуюся Nое количество раз и общающуюся с основным приложением через файл pars, в который передаются нужные для запуска и действий параметры

Добавлено (17 Февраля 2014, 19:20)
---------------------------------------------
Еще я так и не придумал как отлавливать приложения парсера которые запустились но не появились в окошках. Сейчас я их отключаю вручную через диспетчер задач, что не по феншую, но реализацию не придумал еще

Автор - wi1w
Дата добавления - 17 Февраля 2014 в 19:20
antonДата: Пн, 17 Февраля 2014, 19:24 | Сообщение # 7
Ветеран форума
Цитата wi1w ()
А так же, имея НБ не имеющий многозадачности, было придумано использовать парсер ка маленькую утилитку запускающуюся Nое количество раз и общающуюся с основным приложением

Это понятно, и тут не поспоришь, для ускорения процесса это единственное верное решение. Только у меня парсинг не завелся... Вернее все пошло, но данные ни какие не считывались по ссылке "hotline.ua/sr/?q=[1]&tab=pr&sort=0"

Цитата wi1w ()
Расскажу предысторию.
Есть интернет магазин. Меня попросили наполни его 50к товарами.
В прайсах есть имена, ссылки на картинки и артикулы.
Цен и описаний нет. Магазин на опен карте. Использован модуль автонаполнения товарами.
Задача сделать так чтоб цены автоматом проставлялись в магазине и было всем товарам описание.


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


"Вы знаете, нам очень понравились все варианты, что вы прислали. Даже не знаем, что выбрать… А может попробуем объединить все три логотипа в один?"
 
Сообщение
Цитата wi1w ()
А так же, имея НБ не имеющий многозадачности, было придумано использовать парсер ка маленькую утилитку запускающуюся Nое количество раз и общающуюся с основным приложением

Это понятно, и тут не поспоришь, для ускорения процесса это единственное верное решение. Только у меня парсинг не завелся... Вернее все пошло, но данные ни какие не считывались по ссылке "hotline.ua/sr/?q=[1]&tab=pr&sort=0"

Цитата wi1w ()
Расскажу предысторию.
Есть интернет магазин. Меня попросили наполни его 50к товарами.
В прайсах есть имена, ссылки на картинки и артикулы.
Цен и описаний нет. Магазин на опен карте. Использован модуль автонаполнения товарами.
Задача сделать так чтоб цены автоматом проставлялись в магазине и было всем товарам описание.


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

Автор - anton
Дата добавления - 17 Февраля 2014 в 19:24
wi1wДата: Пн, 17 Февраля 2014, 19:32 | Сообщение # 8
Новичок
Цитата anton ()
Ну теперь чуть более понятно что за зверь. Завтра покурю твой код, только выложи исходник в соответствии с рекомендациями mishem,

сообщением выше в прикреплении возьми.

Для того чтоб завелась ссылка эта нужно загрузить тестовый прайс в базу.
Для этого выбери Артикул и Название в главном окне слева. справа увидишь подсказку что да как ибо там первая строка из прайса. Далее в Парсере отметь APC, Из БД и выбери параметр парсинга хотлайн апц

Добавлено (17 Февраля 2014, 19:32)
---------------------------------------------
в папке парсрезулт будет результат парсинга, в файле not_found, возле екзешки получишь ненайденные ссылки.

 
Сообщение
Цитата anton ()
Ну теперь чуть более понятно что за зверь. Завтра покурю твой код, только выложи исходник в соответствии с рекомендациями mishem,

сообщением выше в прикреплении возьми.

Для того чтоб завелась ссылка эта нужно загрузить тестовый прайс в базу.
Для этого выбери Артикул и Название в главном окне слева. справа увидишь подсказку что да как ибо там первая строка из прайса. Далее в Парсере отметь APC, Из БД и выбери параметр парсинга хотлайн апц

Добавлено (17 Февраля 2014, 19:32)
---------------------------------------------
в папке парсрезулт будет результат парсинга, в файле not_found, возле екзешки получишь ненайденные ссылки.


Автор - wi1w
Дата добавления - 17 Февраля 2014 в 19:32
PeterДата: Пн, 17 Февраля 2014, 19:40 | Сообщение # 9
Админ NeoBook
Цитата wi1w ()
как правильно поступить чтоб не заливать на файлообменники?

wi1w, раздел "Готовые проекты" предназначен для исходников, а не исполняемых файлов.
Скомпилированные проекты (программы) выкладывать в разделе "Свободное общение".
Пожалуйста, выложите проект в виде исходного кода, тогда тема будет перенесена в "Проекты NeoBook"


- А вам какую операционку поставить - экспи, семерку или висту?
- Это ты сейчас о чем?
- Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный?
- Ну, конечно, надежный!
- Вот, значит - экспи, без вопросов! Сейчас сделаем...

(Улицы разбитых фонарей, сезон 10, серия 17)

Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!


При модном втюхе модоподдающимся начинает нравиться
 
Сообщение
Цитата wi1w ()
как правильно поступить чтоб не заливать на файлообменники?

wi1w, раздел "Готовые проекты" предназначен для исходников, а не исполняемых файлов.
Скомпилированные проекты (программы) выкладывать в разделе "Свободное общение".
Пожалуйста, выложите проект в виде исходного кода, тогда тема будет перенесена в "Проекты NeoBook"

Автор - Peter
Дата добавления - 17 Февраля 2014 в 19:40
antonДата: Пн, 17 Февраля 2014, 19:47 | Сообщение # 10
Ветеран форума
Peter, так он выложил и то и то...

В первом посте это "Прикрепления: Sors.zip(25Kb)" - не полный исходник
В шестом посте это "Прикрепления: 3487451.zip(861Kb)" - полный исходник


"Вы знаете, нам очень понравились все варианты, что вы прислали. Даже не знаем, что выбрать… А может попробуем объединить все три логотипа в один?"

Сообщение отредактировано
anton - Пн, 17 Февраля 2014, 19:52
 
СообщениеPeter, так он выложил и то и то...

В первом посте это "Прикрепления: Sors.zip(25Kb)" - не полный исходник
В шестом посте это "Прикрепления: 3487451.zip(861Kb)" - полный исходник

Автор - anton
Дата добавления - 17 Февраля 2014 в 19:47
wi1wДата: Пн, 17 Февраля 2014, 19:49 | Сообщение # 11
Новичок
Цитата Peter ()

wi1w, раздел "Готовые проекты" предназначен для исходников, а не исполняемых файлов.
Скомпилированные проекты (программы) выкладывать в разделе "Свободное общение".
Пожалуйста, выложите проект в виде исходного кода, тогда тема будет перенесена в "Проекты NeoBook"

Цитата wi1w ()
Прикрепления: 3487451.zip(861Kb)

Добавлено (17 Февраля 2014, 19:49)
---------------------------------------------
Прав для редактирования шапки не имею

 
Сообщение
Цитата Peter ()

wi1w, раздел "Готовые проекты" предназначен для исходников, а не исполняемых файлов.
Скомпилированные проекты (программы) выкладывать в разделе "Свободное общение".
Пожалуйста, выложите проект в виде исходного кода, тогда тема будет перенесена в "Проекты NeoBook"

Цитата wi1w ()
Прикрепления: 3487451.zip(861Kb)

Добавлено (17 Февраля 2014, 19:49)
---------------------------------------------
Прав для редактирования шапки не имею


Автор - wi1w
Дата добавления - 17 Февраля 2014 в 19:49
antonДата: Пн, 17 Февраля 2014, 19:59 | Сообщение # 12
Ветеран форума


"Вы знаете, нам очень понравились все варианты, что вы прислали. Даже не знаем, что выбрать… А может попробуем объединить все три логотипа в один?"
 
Сообщение

Автор - anton
Дата добавления - 17 Февраля 2014 в 19:59
wi1wДата: Пн, 17 Февраля 2014, 20:00 | Сообщение # 13
Новичок
Комментарии есть но их очень мало :)
 
СообщениеКомментарии есть но их очень мало :)

Автор - wi1w
Дата добавления - 17 Февраля 2014 в 20:00
PeterДата: Пн, 17 Февраля 2014, 20:08 | Сообщение # 14
Админ NeoBook
Цитата wi1w ()
Прикрепления: 3487451.zip(861Kb)

Цитата wi1w ()
Прав для редактирования шапки не имею

Я добавил в первое сообщение полный исходник.
Тема перенесена в "Проекты NeoBook".

Добавлено (17 Февраля 2014, 20:08)
---------------------------------------------
Цитата anton ()
Peter, так он выложил и то и то...

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


- А вам какую операционку поставить - экспи, семерку или висту?
- Это ты сейчас о чем?
- Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный?
- Ну, конечно, надежный!
- Вот, значит - экспи, без вопросов! Сейчас сделаем...

(Улицы разбитых фонарей, сезон 10, серия 17)

Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!


При модном втюхе модоподдающимся начинает нравиться
 
Сообщение
Цитата wi1w ()
Прикрепления: 3487451.zip(861Kb)

Цитата wi1w ()
Прав для редактирования шапки не имею

Я добавил в первое сообщение полный исходник.
Тема перенесена в "Проекты NeoBook".

Добавлено (17 Февраля 2014, 20:08)
---------------------------------------------
Цитата anton ()
Peter, так он выложил и то и то...

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

Автор - Peter
Дата добавления - 17 Февраля 2014 в 20:08
wi1wДата: Вт, 18 Февраля 2014, 04:50 | Сообщение # 15
Новичок
По поводу ошибки с парсером я расскажу какие действия я выполняю и что хочу получить.
Имеем несколько колонок в базе:
1) это артикул с которого получается ссылка и который служит идентификатором
2) всякая фигня (несколько колонок часть скрытых)
3) цена (скрытая)
4) имя (скрытая)
5) инструкция парсера (скрытая)
Парсер берет первый артикул и создает ссылку, переходит ... делает нужное действие ... получает цену
Записывает цену в поле цена в базу.
И таких 20 "потоков" тоесть базу открываю в мультиюзере. рефрешу вначале, получаю запись которую еще не проходил парсер методом проверки булевого значения в колонке 5.
Устанавливаю False в поле 5 этого товара.
В конце же записываю методом сетвар "[база.цена]" "результат парсера".

И каково же мое разочарование когда я вижу что в базе появляются "дубли" тоесть по факту не дубли, а строки которые перезаписаны. В начале я имею к примеру 5000 уникальных строк, а в конце получаю 1500 уникальных, а все остальные - дубли этих полторатыщ.

Знаю что проблема именно в мультиюзере. При работе в 1 поток такого нету.
Пробовал уже много чего, автоедит запрещал и сохранял только при установке False, и самой цены; и дбквери прописывал по полю 5; И удалять рекорд и восстанавливать в порядковую запись откуда считал.
Вобщем попыток было много redface
Отчаялся и прошу помощи. Описал я это все потому что исходник плохо закомментирован. Выложил гораздо раньше чем планировал ибо в панике просто.
 
СообщениеПо поводу ошибки с парсером я расскажу какие действия я выполняю и что хочу получить.
Имеем несколько колонок в базе:
1) это артикул с которого получается ссылка и который служит идентификатором
2) всякая фигня (несколько колонок часть скрытых)
3) цена (скрытая)
4) имя (скрытая)
5) инструкция парсера (скрытая)
Парсер берет первый артикул и создает ссылку, переходит ... делает нужное действие ... получает цену
Записывает цену в поле цена в базу.
И таких 20 "потоков" тоесть базу открываю в мультиюзере. рефрешу вначале, получаю запись которую еще не проходил парсер методом проверки булевого значения в колонке 5.
Устанавливаю False в поле 5 этого товара.
В конце же записываю методом сетвар "[база.цена]" "результат парсера".

И каково же мое разочарование когда я вижу что в базе появляются "дубли" тоесть по факту не дубли, а строки которые перезаписаны. В начале я имею к примеру 5000 уникальных строк, а в конце получаю 1500 уникальных, а все остальные - дубли этих полторатыщ.

Знаю что проблема именно в мультиюзере. При работе в 1 поток такого нету.
Пробовал уже много чего, автоедит запрещал и сохранял только при установке False, и самой цены; и дбквери прописывал по полю 5; И удалять рекорд и восстанавливать в порядковую запись откуда считал.
Вобщем попыток было много redface
Отчаялся и прошу помощи. Описал я это все потому что исходник плохо закомментирован. Выложил гораздо раньше чем планировал ибо в панике просто.

Автор - wi1w
Дата добавления - 18 Февраля 2014 в 04:50
antonДата: Вт, 18 Февраля 2014, 13:26 | Сообщение # 16
Ветеран форума
Так, код у тебя голову сломаешь (это не значит что он плохой, это значит что он большой и писался не мной), в тонкостях не стал разбираться но в суть вьехал. Сейчас постараюсь пояснить какой подход к скачиванию данных в несколько потоков я бы применил.

Начнем с разбора урл адреса: hotline.ua/sr/?sort=0&q=p&tab=pr&p=n

Итак:
p - это поисковый запрос, в принципе он нам особенно не нужен
n - это номер страницы на сайте от 0 до общего количества найденных согласно поисковому запросу, вот он нам и нужен.

Теперь посмотрим на саму страницу. На каждой страницы выводится по 20 найденных товаров.

Соответсвено что мы делаем. Пишем парсер который будит считывать данные со страницы и помещать
в текстовый документ в соответствии с логикой csv файлов. Т.е. представим что нам надо запустить парсинг в 3 потока. Каждый запущенный парсер открывает свою страницу просто заменив значение n в адресе сайта, первый открывает нулевую второй первую, треитий вторую.
Первый парсер считывает все 20 товаров и помещает их в текстовый документ в строки с 1 по 20. Второй парсер считывает так же 20 товаров и помещает их в строки с 21 по 40. Тртитий в строки с 41 по 60.

Когда первый парсер отработает он переходит на страницу 1+3 (прибавляем именно три потому что парсинг в 3 потока) т.е. он переходит на 4 страницу и начинает записывать данные в строки с 61 по 80. (Переходит на 4 страницу и пишет именно в строки с 61 по 80 вне зависимости от того отработали второй и третий парсер свои 20 товаров) Второй когда отработает, переходит на страницу 2+3 т.е на страницу 5 и начинает записывать товары в строки с 81 по 100, третий переходит на страницу 6 и пишет в строки со 101 по 120.

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

При такой логике не должно будит быть дублей и замен. Надеюсь я понятно описал мое представления данной задачи.

Сейчас пока нет времени делать пример, как маленько освобожусь сделаю, но это не раньше чем после завтра.

P.S.
---------------------------
сейчас попробовал реализовать. просто несколько потоков записи в файл... Выяснилось что в несколько потоков (программ) с одним текстовым фалом работать не получиться. Забыл что когда файл открыт в одной программе для других он становиться только для чтения. Так что вариант 1 вижу, разбиваться парсинг по фалам, а потом по окончанию вгружать поочередно в 1БД. А в остальном логика таже.


"Вы знаете, нам очень понравились все варианты, что вы прислали. Даже не знаем, что выбрать… А может попробуем объединить все три логотипа в один?"

Сообщение отредактировано
anton - Вт, 18 Февраля 2014, 17:14
 
СообщениеТак, код у тебя голову сломаешь (это не значит что он плохой, это значит что он большой и писался не мной), в тонкостях не стал разбираться но в суть вьехал. Сейчас постараюсь пояснить какой подход к скачиванию данных в несколько потоков я бы применил.

Начнем с разбора урл адреса: hotline.ua/sr/?sort=0&q=p&tab=pr&p=n

Итак:
p - это поисковый запрос, в принципе он нам особенно не нужен
n - это номер страницы на сайте от 0 до общего количества найденных согласно поисковому запросу, вот он нам и нужен.

Теперь посмотрим на саму страницу. На каждой страницы выводится по 20 найденных товаров.

Соответсвено что мы делаем. Пишем парсер который будит считывать данные со страницы и помещать
в текстовый документ в соответствии с логикой csv файлов. Т.е. представим что нам надо запустить парсинг в 3 потока. Каждый запущенный парсер открывает свою страницу просто заменив значение n в адресе сайта, первый открывает нулевую второй первую, треитий вторую.
Первый парсер считывает все 20 товаров и помещает их в текстовый документ в строки с 1 по 20. Второй парсер считывает так же 20 товаров и помещает их в строки с 21 по 40. Тртитий в строки с 41 по 60.

Когда первый парсер отработает он переходит на страницу 1+3 (прибавляем именно три потому что парсинг в 3 потока) т.е. он переходит на 4 страницу и начинает записывать данные в строки с 61 по 80. (Переходит на 4 страницу и пишет именно в строки с 61 по 80 вне зависимости от того отработали второй и третий парсер свои 20 товаров) Второй когда отработает, переходит на страницу 2+3 т.е на страницу 5 и начинает записывать товары в строки с 81 по 100, третий переходит на страницу 6 и пишет в строки со 101 по 120.

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

При такой логике не должно будит быть дублей и замен. Надеюсь я понятно описал мое представления данной задачи.

Сейчас пока нет времени делать пример, как маленько освобожусь сделаю, но это не раньше чем после завтра.

P.S.
---------------------------
сейчас попробовал реализовать. просто несколько потоков записи в файл... Выяснилось что в несколько потоков (программ) с одним текстовым фалом работать не получиться. Забыл что когда файл открыт в одной программе для других он становиться только для чтения. Так что вариант 1 вижу, разбиваться парсинг по фалам, а потом по окончанию вгружать поочередно в 1БД. А в остальном логика таже.

Автор - anton
Дата добавления - 18 Февраля 2014 в 13:26
mishemДата: Вт, 18 Февраля 2014, 14:09 | Сообщение # 17
Эксперт форума
Цитата anton ()
в несколько потоков

Если честно, не охота разбираться.
Всегда легче свое написать, или даже переписать, чем разбираться в том что написано.

Вы мне объясните, что значит в несколько потоков.

В нб не возможно что то сделать в несколько потоков. Если я правильно понимаю смысл этих слов.

Один код будет обрывать другой, где и будут происходить ошибки.


Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.
 
Сообщение
Цитата anton ()
в несколько потоков

Если честно, не охота разбираться.
Всегда легче свое написать, или даже переписать, чем разбираться в том что написано.

Вы мне объясните, что значит в несколько потоков.

В нб не возможно что то сделать в несколько потоков. Если я правильно понимаю смысл этих слов.

Один код будет обрывать другой, где и будут происходить ошибки.

Автор - mishem
Дата добавления - 18 Февраля 2014 в 14:09
wi1wДата: Вт, 18 Февраля 2014, 15:16 | Сообщение # 18
Новичок
Небольшие пояснения по ходу и костыли.
Запустив например те же 3 потока (тоесть 3 программы выполняющие одну и ту же задачу.)
Не три потока как их представляют себе многи а именно 3 программы.

Костыль с обработкой в последовательности открытия страниц:
Если вдруг одно из приложений запустилось но не работает, что бывает. Тогда не получится отследить сколько страниц пройдено, а сколько пропущено из-за "зависшего" приложения\потока.
Поиск следующих страниц происходит в самом приложении потока - а соответственно обработчик не знает сколько страниц найдено 1 или 100. У меня это так:
гружу первую страницу по запросу hotline.ua/sr/?sort=0&q=[фраза]&tab=pr
и тут же в потоке ищу сколько страниц найдено. Так как все цены не нужны, а нужно например всего 5 ключевых цен, а все остальные это мусор. То и ищу их, но не просто ищу, а в том порядке в каком указано в опции. Например: 1) цена магазина розетки, 2) цена 5ок магазина.
В разнобой нельзя ибо на последнем этапе происходит сравнение цен по процентному соотношению чтоб отсечь слишком мелкие и не поставить большую цену. Но считая все же приоритетом именно первую цену.

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

Добавлено (18 Февраля 2014, 15:12)
---------------------------------------------
В один поток работает все верно, но стоит включить хотя бы 2 - то возникают перезаписи. В моем представлении это происходит в силу того что переменные базы (типа [база.код товара]) не очищаются и при переходе на следующую строку по условиям наличия (а именно если в поле наличие или в поле каталог в данной строке стоит значение False то переход на следующую строку, и так пока не найдет не спарсенный еще товар), происходит перезапись строки на которую переходим значениями из строки выше.

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

Тоесть получается что нужно "пролистать" 20 строк и пока 1 поток листает до не парсенного, другие потоки сейвят и получается так что некоторые строки перезаписаны, а некоторые нет.

Добавлено (18 Февраля 2014, 15:16)
---------------------------------------------

Цитата mishem ()
Вы мне объясните, что значит в несколько потоков.


Это условное обозначение попытки обойти монопоточность запуском 1 екзешки много раз. В моем случае мощность компьютера позволяет выполнять в 15 "потоков" без потери производительности и в 20 но с тормозами системы.
Такое действие очень грузит процессор но по другому никак, по крайней мере я ничего не придумал.
каждый поток занимает около 25мб оперативной памяти компьютера и очень много процессорного времени.

Но тут пока ничего поделать не могу.... Очень много логики в парсинге цен.
 
СообщениеНебольшие пояснения по ходу и костыли.
Запустив например те же 3 потока (тоесть 3 программы выполняющие одну и ту же задачу.)
Не три потока как их представляют себе многи а именно 3 программы.

Костыль с обработкой в последовательности открытия страниц:
Если вдруг одно из приложений запустилось но не работает, что бывает. Тогда не получится отследить сколько страниц пройдено, а сколько пропущено из-за "зависшего" приложения\потока.
Поиск следующих страниц происходит в самом приложении потока - а соответственно обработчик не знает сколько страниц найдено 1 или 100. У меня это так:
гружу первую страницу по запросу hotline.ua/sr/?sort=0&q=[фраза]&tab=pr
и тут же в потоке ищу сколько страниц найдено. Так как все цены не нужны, а нужно например всего 5 ключевых цен, а все остальные это мусор. То и ищу их, но не просто ищу, а в том порядке в каком указано в опции. Например: 1) цена магазина розетки, 2) цена 5ок магазина.
В разнобой нельзя ибо на последнем этапе происходит сравнение цен по процентному соотношению чтоб отсечь слишком мелкие и не поставить большую цену. Но считая все же приоритетом именно первую цену.

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

Добавлено (18 Февраля 2014, 15:12)
---------------------------------------------
В один поток работает все верно, но стоит включить хотя бы 2 - то возникают перезаписи. В моем представлении это происходит в силу того что переменные базы (типа [база.код товара]) не очищаются и при переходе на следующую строку по условиям наличия (а именно если в поле наличие или в поле каталог в данной строке стоит значение False то переход на следующую строку, и так пока не найдет не спарсенный еще товар), происходит перезапись строки на которую переходим значениями из строки выше.

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

Тоесть получается что нужно "пролистать" 20 строк и пока 1 поток листает до не парсенного, другие потоки сейвят и получается так что некоторые строки перезаписаны, а некоторые нет.

Добавлено (18 Февраля 2014, 15:16)
---------------------------------------------

Цитата mishem ()
Вы мне объясните, что значит в несколько потоков.


Это условное обозначение попытки обойти монопоточность запуском 1 екзешки много раз. В моем случае мощность компьютера позволяет выполнять в 15 "потоков" без потери производительности и в 20 но с тормозами системы.
Такое действие очень грузит процессор но по другому никак, по крайней мере я ничего не придумал.
каждый поток занимает около 25мб оперативной памяти компьютера и очень много процессорного времени.

Но тут пока ничего поделать не могу.... Очень много логики в парсинге цен.

Автор - wi1w
Дата добавления - 18 Февраля 2014 в 15:16
mishemДата: Вт, 18 Февраля 2014, 15:46 | Сообщение # 19
Эксперт форума
Я так думаю, что с одной и той же базой много поточность не получится сделать. Нельзя одновременно читать и записывать несколько записей сразу.

Можно что сделать. Прочитать все записи во временый файл. Разбить этот файл на несколько файлов, или читать из этого файла (опять же, получится ли читать одновременно? чтение файла, это его открытие. А если файл открыт одной программой, то я не знаю, сможет ли тоже самое сделать другая).

Разбиваем файл на двадцать файлов по строкам 1 файл, строки 1-100, второй 101-200 и т.д. (это к примеру) после обрабатывать именно файлы а не базу. После обработки собирать в один файл и импортировать в базу.

Лично мне с наскока как то так все это представляется.


Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.
 
СообщениеЯ так думаю, что с одной и той же базой много поточность не получится сделать. Нельзя одновременно читать и записывать несколько записей сразу.

Можно что сделать. Прочитать все записи во временый файл. Разбить этот файл на несколько файлов, или читать из этого файла (опять же, получится ли читать одновременно? чтение файла, это его открытие. А если файл открыт одной программой, то я не знаю, сможет ли тоже самое сделать другая).

Разбиваем файл на двадцать файлов по строкам 1 файл, строки 1-100, второй 101-200 и т.д. (это к примеру) после обрабатывать именно файлы а не базу. После обработки собирать в один файл и импортировать в базу.

Лично мне с наскока как то так все это представляется.

Автор - mishem
Дата добавления - 18 Февраля 2014 в 15:46
wi1wДата: Вт, 18 Февраля 2014, 16:18 | Сообщение # 20
Новичок
Я думал на счет разбиения на файлы отдельные.

Просто прежде чем это делать решил с вами посоветоваться, ведь есть же в базе мультиюзерность. НеобукДБ якобы позволяет открывать нескольким юзерам одну Бд.

На эту тему пробовал замыкать запись до сохранения, что-то не очень получилось. Только скорость падает, а толку 0 no

Хотя может не так делал. Делал так:
открывал базу перед считыванием. Читал запись, замыкал ее, вносил изменения если нужны (проставлял что эта запись спарсенна, чтоб другие не смотрели ее) экспортировал в переменную,
сохранял обрабатывал все с переменной, а потом снова открывал базу, замыкал, вносил результат, сохранял изменения и закрывал базу.
 
СообщениеЯ думал на счет разбиения на файлы отдельные.

Просто прежде чем это делать решил с вами посоветоваться, ведь есть же в базе мультиюзерность. НеобукДБ якобы позволяет открывать нескольким юзерам одну Бд.

На эту тему пробовал замыкать запись до сохранения, что-то не очень получилось. Только скорость падает, а толку 0 no

Хотя может не так делал. Делал так:
открывал базу перед считыванием. Читал запись, замыкал ее, вносил изменения если нужны (проставлял что эта запись спарсенна, чтоб другие не смотрели ее) экспортировал в переменную,
сохранял обрабатывал все с переменной, а потом снова открывал базу, замыкал, вносил результат, сохранял изменения и закрывал базу.

Автор - wi1w
Дата добавления - 18 Февраля 2014 в 16:18
mishemДата: Вт, 18 Февраля 2014, 16:36 | Сообщение # 21
Эксперт форума
Цитата wi1w ()
Делал так:

Ну и смысл тогда в многопоточности?


Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.
 
Сообщение
Цитата wi1w ()
Делал так:

Ну и смысл тогда в многопоточности?

Автор - mishem
Дата добавления - 18 Февраля 2014 в 16:36
wi1wДата: Вт, 18 Февраля 2014, 16:51 | Сообщение # 22
Новичок
смысл в том что локрекорд замыкает только текущую запись, и что остальные которые в данный момент не пытаются считать - работают нормально.
 
Сообщениесмысл в том что локрекорд замыкает только текущую запись, и что остальные которые в данный момент не пытаются считать - работают нормально.

Автор - wi1w
Дата добавления - 18 Февраля 2014 в 16:51
mishemДата: Вт, 18 Февраля 2014, 18:14 | Сообщение # 23
Эксперт форума
Во первых, лично мое мнение. Выкинул бы вообще из головы затею многопоточности.
Во вторых, использовал бы плагин hpwControl для извлечения данных методом регулярных выражений, что в разы ускорило бы процесс поиска данных.
Или на крайний случай использовал бы только два потока, где обрабатывались бы в одном четные, в другом нечетные строки.


Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.
 
СообщениеВо первых, лично мое мнение. Выкинул бы вообще из головы затею многопоточности.
Во вторых, использовал бы плагин hpwControl для извлечения данных методом регулярных выражений, что в разы ускорило бы процесс поиска данных.
Или на крайний случай использовал бы только два потока, где обрабатывались бы в одном четные, в другом нечетные строки.

Автор - mishem
Дата добавления - 18 Февраля 2014 в 18:14
wi1wДата: Ср, 19 Февраля 2014, 12:17 | Сообщение # 24
Новичок
В 2 потока конечно быстрее, чем вручную, можно и поставить на первое время, но если делать сетевую версию редактора товаров для манагеров то печально получается.
Про регулярки думал, но тут опять таки нужна скорость но не перебор, дабы сервер донора не расценил как ддос атаку и не заблокировал ип. И так если в 20 потоков делаю то получается 1-2 товара в секунду спарсивает. А это не факт что на 1 странице
 
СообщениеВ 2 потока конечно быстрее, чем вручную, можно и поставить на первое время, но если делать сетевую версию редактора товаров для манагеров то печально получается.
Про регулярки думал, но тут опять таки нужна скорость но не перебор, дабы сервер донора не расценил как ддос атаку и не заблокировал ип. И так если в 20 потоков делаю то получается 1-2 товара в секунду спарсивает. А это не факт что на 1 странице

Автор - wi1w
Дата добавления - 19 Февраля 2014 в 12:17
antonДата: Чт, 20 Февраля 2014, 14:56 | Сообщение # 25
Ветеран форума


"Вы знаете, нам очень понравились все варианты, что вы прислали. Даже не знаем, что выбрать… А может попробуем объединить все три логотипа в один?"
 
Сообщение

Автор - anton
Дата добавления - 20 Февраля 2014 в 14:56
PeterДата: Чт, 20 Февраля 2014, 18:52 | Сообщение # 26
Админ NeoBook


- А вам какую операционку поставить - экспи, семерку или висту?
- Это ты сейчас о чем?
- Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный?
- Ну, конечно, надежный!
- Вот, значит - экспи, без вопросов! Сейчас сделаем...

(Улицы разбитых фонарей, сезон 10, серия 17)

Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!


При модном втюхе модоподдающимся начинает нравиться
 
Сообщение

Автор - Peter
Дата добавления - 20 Февраля 2014 в 18:52
Форум NeoBook » Всё о программе NeoBook » Проекты NeoBook » PriceMixer (Обработчик прайсов и парсер с контролем цен)
Страница 1 из 11
Поиск: