Вот код парсера
Процедура ЗагрузитьНоменклатуруИзТаблицы(Товары, ПутьКФайлу) Экспорт
Для каждого Эл Из Товары Цикл
Если Не Эл.Загружать Тогда Продолжить; КонецЕсли;
НовыйТовар = Справочники.Номенклатура.СоздатьЭлемент();
НовыйТовар.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар");
НовыйТовар.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт");
НовыйТовар.Наименование = Эл.НазваниеТовараНаСайте;
НовыйТовар.НаименованиеПолное = Эл.НазваниеТовараНаСайте + " (" + Эл.Характеристика + ")";
НовыйТовар.Родитель = ГруппаЗаписи;
НовыйТовар.Записать();
Если Не НеЗагружатьКартинки Тогда
Соединение = Новый 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)), " ", ""));
КонецЕсли;
КонецЦикла;
КонецФункции
проблема в том что он может обработать только одну страницу(которая открыта в данный момент), там есть функция обработать все страницы, но при ее нажатии - вылазит ошибка. помогите решить эту проблему. Это парсер сайта яндекс маркета
Сообщение отредактировал logist - 20.03.13, 9:11