Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Парсер сайта hotline или price.ua          
gleb-khil Подменю пользователя
сообщение 15.03.13, 8:52
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 24
Из: Одесса
Спасибо сказали: 4 раз
Рейтинг: 0

Добрый день, скажите встречался ли вам парсер сайта hotline или price.ua?

Vofka Подменю пользователя
сообщение 15.03.13, 9:04
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4519 раз
Рейтинг: 3641.2

Вообще-то это раздел для программистов, который подразумевает разговоры на тему программирования. Переезжаем. Правила 3, 4.

Acid Подменю пользователя
сообщение 15.03.13, 11:45
Сообщение #3

Про1С-ник
Иконка группы
За заслуги на форуме в 2010 году
Группа: Местный
Сообщений: 2104
Из: Занзибар
Спасибо сказали: 377 раз
Рейтинг: 260.7

а что парсер делжен делать?

logist Подменю пользователя
сообщение 15.03.13, 11:47
Сообщение #4

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(Acid @ 15.03.13, 11:45) *
а что парсер делжен делать?

Вероятно собирать прайсы. Некоторые организации так анализируют цены конкурентов.


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Naghual Подменю пользователя
сообщение 18.03.13, 16:52
Сообщение #5

Завсегдатай
****
Группа: Пользователи
Сообщений: 102
Из: Днепропетровск
Спасибо сказали: 21 раз
Рейтинг: 0

Встречался, встречался...
В личку пишите


Signature
Я желаю всем Счастья!

gleb-khil Подменю пользователя
сообщение 19.03.13, 8:48
Сообщение #6

Общительный
**
Группа: Пользователи
Сообщений: 24
Из: Одесса
Спасибо сказали: 4 раз
Рейтинг: 0

Парсер должен обрабатывать цены интернет магазина (желательно розетка или price.ua), есть прасер yandexmarket, но он кривовато работает, не все обрабатывает.

Acid Подменю пользователя
сообщение 19.03.13, 11:46
Сообщение #7

Про1С-ник
Иконка группы
За заслуги на форуме в 2010 году
Группа: Местный
Сообщений: 2104
Из: Занзибар
Спасибо сказали: 377 раз
Рейтинг: 260.7

Цитата(gleb-khil @ 19.03.13, 8:48) *
есть прасер

32541510.gif
в общем да - все стандартные штучки приходится допиливать, чтоб работало как хочется.


Signature

Документируйте Код! мать вашу...


gleb-khil Подменю пользователя
сообщение 19.03.13, 13:56
Сообщение #8

Общительный
**
Группа: Пользователи
Сообщений: 24
Из: Одесса
Спасибо сказали: 4 раз
Рейтинг: 0

Могу выложить код парсера, может кто то сможет подсказать где допилить его

Acid Подменю пользователя
сообщение 19.03.13, 14:29
Сообщение #9

Про1С-ник
Иконка группы
За заслуги на форуме в 2010 году
Группа: Местный
Сообщений: 2104
Из: Занзибар
Спасибо сказали: 377 раз
Рейтинг: 260.7

выкладывайте конечно. вот сюда


 i 

Не надо туда выкладывать, лучше сюда
 


Сообщение отредактировал logist - 19.03.13, 14:37


Signature

Документируйте Код! мать вашу...


gleb-khil Подменю пользователя
сообщение 20.03.13, 8:39
Сообщение #10

Общительный
**
Группа: Пользователи
Сообщений: 24
Из: Одесса
Спасибо сказали: 4 раз
Рейтинг: 0

Вот код парсера
Процедура ЗагрузитьНоменклатуруИзТаблицы(Товары, ПутьКФайлу) Экспорт
    Для каждого Эл Из Товары Цикл
        Если Не Эл.Загружать Тогда Продолжить; КонецЕсли;
        НовыйТовар = Справочники.Номенклатура.СоздатьЭлемент();
        НовыйТовар.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар");
        НовыйТовар.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт");
        НовыйТовар.Наименование = Эл.НазваниеТовараНаСайте;
        НовыйТовар.НаименованиеПолное = Эл.НазваниеТовараНаСайте + " (" + Эл.Характеристика + ")";

        НовыйТовар.Родитель = ГруппаЗаписи;
        НовыйТовар.Записать();
        Если Не НеЗагружатьКартинки Тогда
            Соединение = Новый HTTPСоединение("mdata.yandex.net");
            Соединение.Получить(Прав(Эл.Изобажение, СтрДлина(Эл.Изобажение) - СтрДлина("http://mdata.yandex.net")), ПутьКФайлу);
            ДопХар = Справочники.ХранилищеДополнительнойИнформации.СоздатьЭлемент();
            ДопХар.ВидДанных = Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение;
            ДопХар.ИмяФайла = НовыйТовар.Наименование + СтрЗаменить("" + ТекущаяДата(), ":", "_");
            ДопХар.Наименование = ДопХар.ИмяФайла;
            ДопХар.Хранилище = Новый ХранилищеЗначения(Новый Картинка(ПутьКФайлу, Истина), Новый СжатиеДанных);
            ДопХар.Объект = НовыйТовар.Ссылка;
            ДопХар.Записать();
            НовыйТовар.ОсновноеИзображение = ДопХар.Ссылка;
            НовыйТовар.Записать();
        КонецЕсли;
        ХодРаботы = ХодРаботы + 1;
    КонецЦикла;

    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    Номенклатура.Ссылка
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |    (НЕ Номенклатура.ЭтоГруппа)
    |    И Номенклатура.Родитель = &ГруппаЗаписи";


    Запрос.УстановитьПараметр("ГруппаЗаписи", ГруппаЗаписи);

    Результат = Запрос.Выполнить();

    Выборка = Результат.Выбрать();

    Пока Выборка.Следующий() Цикл
        НовыйТовар = Выборка.Ссылка.ПолучитьОбъект();
        НовыйОбъект = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
        НовыйОбъект.Наименование = "" + НовыйТовар.БазоваяЕдиницаИзмерения;
        НовыйОбъект.Коэффициент = 1;
        НовыйОбъект.Владелец = Выборка.Ссылка;
        НовыйОбъект.Записать();
        НовыйТовар.ЕдиницаХраненияОстатков = НовыйОбъект.Ссылка;
        НовыйТовар.ЕдиницаДляОтчетов = НовыйОбъект.Ссылка;
        НовыйТовар.Записать();
        ХодРаботы = ХодРаботы + 1;
    КонецЦикла;

КонецПроцедуры


Функция ПреобразоватьвСистему(Число10, система)
    Если система > 36 Или система < 2 Тогда
        Сообщить("Выбранная система исчисления не поддерживается");
        Возврат - 1;
    КонецЕсли;

    СтрокаЗначений = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    СтрокаСистема = "";
    Пока Число10 > 0 Цикл
        РезДеления = Число10 / система;
        ЧислоСистема = Цел(РезДеления);
        остатокОтДеления = Число10 - система * ЧислоСистема;
        СтрокаСистема = Сред(СтрокаЗначений, остатокОтДеления + 1, 1) + СтрокаСистема;
        Число10 = ?(ЧислоСистема = 0, 0, РезДеления);
    КонецЦикла;



    Нечётное = СтрДлина(СтрокаСистема) - Цел(СтрДлина(СтрокаСистема) / 2) * 2;
    Если Нечётное Тогда
        СтрокаСистема = "0" + СтрокаСистема;
    КонецЕсли;

    Возврат СтрокаСистема;
КонецФункции



Функция ПреобразоватьКURL(Стр) Экспорт
    Длина = СтрДлина(Стр);
    Итог = "";
    Для Н = 1 По Длина Цикл
        Знак = Сред(Стр, Н, 1);
        Код = КодСимвола(Знак, 1);

        Если Знак >= "a" И Знак <= "z" Или Знак >= "A" И Знак <= "Z" Или Знак >= "0" И Знак <= "9" Тогда


            Итог = Итог + Знак;
        Иначе
            Если Код >= КодСимвола("А", 1) И Код <= КодСимвола("п", 1) Тогда
                Итог = Итог + "%" + ПреобразоватьвСистему(208, 16) + "%" + ПреобразоватьвСистему(144 + Код - КодСимвола("А", 1), 16);
            ИначеЕсли Код >= КодСимвола("р", 1) И Код <= КодСимвола("я", 1) Тогда
                Итог = Итог + "%" + ПреобразоватьвСистему(209, 16) + "%" + ПреобразоватьвСистему(128 + Код - КодСимвола("р", 1), 16);
            ИначеЕсли Знак = "ё" Тогда
                Итог = Итог + "%" + ПреобразоватьвСистему(209, 16) + "%" + ПреобразоватьвСистему(145, 16);
            ИначеЕсли Знак = "Ё" Тогда
                Итог = Итог + "%" + ПреобразоватьвСистему(208, 16) + "%" + ПреобразоватьвСистему(129, 16);
            Иначе
                Итог = Итог + "%" + ПреобразоватьвСистему(Код, 16);
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    Возврат Итог;
КонецФункции


Функция ПолучитьКоличествоЭлементовНаСтранице(ПолеHTMLДокумента) Экспорт
    Кол = 0;
    Для каждого Стр Из ПолеHTMLДокумента.Документ.body.all Цикл

        Если Стр.className = "b-offers__desc" Тогда

            Попытка
                Если ПустаяСтрока(Стр.firstChild.firstChild.textContent) Тогда
                     Продолжить;
                КонецЕсли;
            Исключение
                Продолжить;
            КонецПопытки;
            Кол = Кол + 1;
        КонецЕсли;
    КонецЦикла;
    Возврат Кол;
КонецФункции


Процедура ЗагрузитьЭлементыСтраницы(ПолеHTMLДокумента, Товары) Экспорт
    Для каждого Стр Из ПолеHTMLДокумента.Документ.body.all Цикл

        Если Стр.className = "b-offers__desc" Тогда

            Попытка
                Если ПустаяСтрока(Стр.firstChild.firstChild.textContent) Тогда
                    Возврат; Продолжить;
                КонецЕсли;
            Исключение
                Продолжить;
            КонецПопытки;
            НовСтр = Товары.Добавить();
            НовСтр.Загружать = Истина;
            НовСтр.Изобажение = Лев("" + Стр.parentNode.firstChild.firstChild.firstChild.href, СтрДлина("" + Стр.parentNode.firstChild.firstChild.firstChild.href) - 1) + "4";
            Для каждого Эл Из Стр.all Цикл

                Если Эл.tagName = "H3" И Эл.className = "b-offers__title" Тогда
                    НовСтр.НазваниеТовараНаСайте = Эл.firstChild.textContent;
                ИначеЕсли Эл.tagName = "DIV" И Эл.className = "b-offers__price" Тогда
                    Попытка
                        ПЭ = Лев(Эл.innerText, Найти(Эл.innerText, "до") - 1);
                        Чсл = Число(СтрЗаменить(СокрЛП(Прав(ПЭ, СтрДлина(ПЭ) - 2)), " ", ""));
                        НовСтр.МинимальнаяЦена = Чсл;
                        ПЭ = Прав(Эл.innerText, СтрДлина(Эл.innerText) - Найти(Эл.innerText, "до") - 1);
                        Чсл = Число(СтрЗаменить(СокрЛП(Лев(ПЭ, СтрДлина(ПЭ) - 4)), " ", ""));
                        НовСтр.МаксимальнаяЦена = Чсл;
                    Исключение
                        НовСтр.МаксимальнаяЦена = 0;
                        НовСтр.МинимальнаяЦена = 0;
                    КонецПопытки;
                ИначеЕсли Эл.tagName = "P" И Эл.className = "b-offers__spec" Тогда
                    НовСтр.Характеристика = СокрЛП(Эл.firstChild.textContent);
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры


Функция ПолучитьКоличествоНайденныхПозиций(ПолеHTMLДокумента) Экспорт
    ЧслВсего = 0;
    Для каждого Стр Из ПолеHTMLДокумента.Документ.body.all Цикл
        Если Стр.className = "results" Тогда
            СтрВсего = Стр.nextSibling.innerText;
            ЧслВсего = Число(СтрЗаменить(СокрЛП(Прав(СтрВсего, СтрДлина(СтрВсего) - Найти(СтрВсего, "—") - 1)), " ", ""));
        КонецЕсли;
    КонецЦикла;
КонецФункции


проблема в том что он может обработать только одну страницу(которая открыта в данный момент), там есть функция обработать все страницы, но при ее нажатии - вылазит ошибка. помогите решить эту проблему. Это парсер сайта яндекс маркета


 ! 

Правила, п.12
 


Сообщение отредактировал logist - 20.03.13, 9:11

p2rcoder Подменю пользователя
сообщение 22.09.13, 19:50
Сообщение #11

Молчаливый
*
Группа: Пользователи
Сообщений: 1
Спасибо сказали: 0 раз
Рейтинг: 0


 ! 

Правила: 15, 19
 


Сообщение отредактировал Vofka - 22.09.13, 19:59

rotting Подменю пользователя
сообщение 06.06.16, 13:43
Сообщение #12

Общительный
**
Группа: Пользователи
Сообщений: 13
Из: Фастов
Спасибо сказали: 1 раз
Рейтинг: 0

Не сочтите за рекламу, но

 ! 

Сочтем за рекламу
 


Сообщение отредактировал logist - 06.06.16, 14:15

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 19.04.24, 18:13
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!