Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не видно элементов html тэгов при парсинге сайта
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
kosalex
Доброго времени суток! Хочу научиться парсить сайт. Взял для примера вот этот сайт необходимо зарегистрироваться для просмотра ссылки.

Парсю главную страницу вот так:
 ЧтениеХТМЛ = Новый ЧтениеHTML; 
    ПостроительДОМ = Новый ПостроительDOM;
    
    //Генерируем имя файла на диске, в который запишется страница сайта
    ПреобразуемоеИмяФайла = СтрЗаменить(Адрес, "/", "_");
    ПреобразуемоеИмяФайла = СтрЗаменить(ПреобразуемоеИмяФайла,":","_");
    
    ИмяФайла = КаталогЗагрузкиВременныхФайлов + "\catalog\" + ПреобразуемоеИмяФайла + ".html";
        
    ЗапросХТТП = Новый HTTPЗапрос;
    ЗапросХТТП.УстановитьТелоИзСтроки(Адрес);
    //Загружаем нужную нам страницу в каталог
    Соединение.Получить(ЗапросХТТП, ИмяФайла);
    
    
    //Начинаем чтение нашего файла
    ЧтениеХТМЛ.ОткрытьФайл(ИмяФайла, "UTF-8");
    //Загружаем всю структуру документа в DOM
    ДокументХТМЛ = ПостроительДОМ.Прочитать(ЧтениеХТМЛ);
    
    //Получаем все элементы DIV
    ЭлементыКаталога = ДокументХТМЛ.ПолучитьЭлементыПоИмени("DIV");
    
    СписокКаталогов.Очистить();
    
    //Находим в них нужный нам блок, содержащий ссылки на подкаталоги
    Для Каждого ЭлементКаталога из ЭлементыКаталога Цикл
        ОбработкаПрерыванияПользователя();
        
        Если ЭлементКаталога.ИмяКласса = "catalog-list" Тогда
            
            ЭлементыA = ЭлементКаталога.ПолучитьЭлементыПоИмени("A");
                //Нашли, собираем из него все ссылки (элементы А)
                Если ЭлементыA.Количество() > 0 Тогда
                    Для Каждого ЭлементA из ЭлементыA Цикл
                        Если ЭлементA.ТекстовоеСодержимое <> "" Тогда
                            НоваяСтрока = СписокКаталогов.Добавить();
                            НоваяСтрока.ИмяКаталога = ЭлементA.ТекстовоеСодержимое;
                            НоваяСтрока.СсылкаНаСтраницу = СтрЗаменить(ЭлементA.Гиперссылка,"http://","");  
                        КонецЕсли;
                    КонецЦикла;
                Иначе
                    //Если ссылок не найдено, значит подкаталогов нет и это конечный подкаталог
                    //Добавляем его в нашу табличную часть
                    НоваяСтрока = СписокКаталогов.Добавить();
                    НоваяСтрока.ИмяКаталога = ЭлементA.ТекстовоеСодержимое;
                    НоваяСтрока.СсылкаНаСтраницу = СтрЗаменить(ЭлементA.Гиперссылка,"http://","");    
                КонецЕсли;    
            
        КонецЕсли;
        
    КонецЦикла;
КонецПроцедуры


Вот что получается:


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


Далее процедура которая парситу страницу с группой товара выбранной в ТЧ, вот код:
Процедура ПропарситьСтраницуДорожныеСумки(Адрес)
    ЧтениеХТМЛ = Новый ЧтениеHTML;
    ПостроительДОМ = Новый ПостроительDOM;
    
    //Генерируем имя файла на диске, в который запишется страница сайта
    ПреобразуемоеИмяФайла = СтрЗаменить(Адрес, "/", "_");
    ПреобразуемоеИмяФайла = СтрЗаменить(ПреобразуемоеИмяФайла,":","_");
    
    ИмяФайла = КаталогЗагрузкиВременныхФайлов + "\catalog\" + ПреобразуемоеИмяФайла + ".html";
        
    ЗапросХТТП = Новый HTTPЗапрос;
    ЗапросХТТП.УстановитьТелоИзСтроки(Адрес);
    
    //Загружаем нужную нам страницу в каталог
    Соединение.Получить(ЗапросХТТП, ИмяФайла);
    
    
    //Начинаем чтение нашего файла
    ЧтениеХТМЛ.ОткрытьФайл(ИмяФайла, "UTF-8");
    //Загружаем всю структуру документа в DOM
    ДокументХТМЛ = ПостроительДОМ.Прочитать(ЧтениеХТМЛ);
    
    //Получаем все элементы DIV
    ЭлементыСтраницы = ДокументХТМЛ.ПолучитьЭлементыПоИмени("DIV");
    
    СписокТоваров.Очистить();
    
    //Находим в них нужный нам блок, содержащий ссылки на подкаталоги
    Для Каждого ЭлементСтраницы из ЭлементыСтраницы Цикл
        
        ОбработкаПрерыванияПользователя();
        
        Если ЭлементСтраницы.Идентификатор = "items-container"  Тогда //Элемент с товарами
            
            ЭлементыA = ЭлементСтраницы.ПолучитьЭлементПоИмени("A");
            
            
            //Нашли, собираем из него все ссылки (элементы А)
                Если ЭлементыA.Количество() > 0 Тогда
                    Для Каждого ЭлементA из ЭлементыA Цикл
                        Если ЭлементA.ТекстовоеСодержимое <> "" Тогда
                            НоваяСтрока = СписокТоваров.Добавить();
                            НоваяСтрока.Артикул = ЭлементA.ТекстовоеСодержимое;
                            НоваяСтрока.Наименование = ЭлементA.Гиперссылка;
                            НоваяСтрока.СсылкаНаТовар = ЭлементA.Гиперссылка;
                        КонецЕсли;
                    КонецЦикла;
                Иначе
                    //Если ссылок не найдено, значит подкаталогов нет и это конечный подкаталог
                    //Добавляем его в нашу табличную часть
                    НоваяСтрока = СписокТоваров.Добавить();
                    НоваяСтрока.Артикул = ЭлементA.ТекстовоеСодержимое;
                    НоваяСтрока.Наименование = ЭлементA.Гиперссылка;
                    НоваяСтрока.СсылкаНаТовар = ЭлементA.Гиперссылка;
                    
                КонецЕсли;    
            
        КонецЕсли;
        
    КонецЦикла;

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


Сам вопрос, вот когда уже начинаю парсить страницу с "Дорожные сумки", то получается что адрес ее вроде передаю, а сохраняется не та страница, сохраняется главная страница....ПОЧЕМУ? ПОМОГИТЕ!
kosalex
Добрые люди, подскажите как пропарсить страницу необходимо зарегистрироваться для просмотра ссылки чтобы можно было получить весь список ссылок на товары. Имею вот такой код, ссылки на товары не выбираются...

Процедура ПропарситьСтраницуДорожныеСумки(Адрес)
    Соединение = Новый HTTPСоединение(Адрес,80,,,,120,);
    
    Если Соединение <> Неопределено Тогда
        ОчиститьСообщения();
        
        Сообщить("Соединение установлено!");
        
        ЧтениеХТМЛ = Новый ЧтениеHTML;
        ПостроительДОМ = Новый ПостроительDOM;
        
        //Генерируем имя файла на диске, в который запишется страница сайта
        ПреобразуемоеИмяФайла = СтрЗаменить(Адрес, "/", "_");
        ПреобразуемоеИмяФайла = СтрЗаменить(ПреобразуемоеИмяФайла,":","_");
        
        ИмяФайла = КаталогЗагрузкиВременныхФайлов + "\catalog\" + ПреобразуемоеИмяФайла + ".html";
        
        ЗапросХТТП = Новый HTTPЗапрос;
        ЗапросХТТП.УстановитьТелоИзСтроки(Адрес);
        
        //Загружаем нужную нам страницу в каталог
        Соединение.Получить(ЗапросХТТП, ИмяФайла);
        
        
        //Начинаем чтение нашего файла
        ЧтениеХТМЛ.ОткрытьФайл(ИмяФайла, "UTF-8");
        //Загружаем всю структуру документа в DOM
        ДокументХТМЛ = ПостроительДОМ.Прочитать(ЧтениеХТМЛ);
        
        //Получаем все элементы DIV
        ЭлементыСтраницы = ДокументХТМЛ.ПолучитьЭлементыПоИмени("DIV");
        
        СписокТоваров.Очистить();
        
        //Находим в них нужный нам блок, содержащий ссылки на подкаталоги
        Для Каждого ЭлементСтраницы из ЭлементыСтраницы Цикл
            
            ОбработкаПрерыванияПользователя();
            
            Если ЭлементСтраницы.Идентификатор = "main-block" Тогда //Элемент с товарами
                
                ЭлементыМаинБлок = ЭлементСтраницы.ПолучитьЭлементыПоИмени("DIV");
                
                Если ЭлементыМаинБлок.Количество() > 0 Тогда
                    
                    Для Каждого ЭлементМаинБлок Из ЭлементыМаинБлок Цикл
                        
                        ЭлементыA = ЭлементСтраницы.ПолучитьЭлементыПоИмени("A");
                        
                        //Нашли, собираем из него все ссылки (элементы А)
                        Если ЭлементыA.Количество() > 0 Тогда
                            Для Каждого ЭлементA из ЭлементыA Цикл
                                Если ЭлементA.ТекстовоеСодержимое <> "" Тогда
                                    НоваяСтрока = СписокТоваров.Добавить();
                                    НоваяСтрока.Артикул = ЭлементA.ТекстовоеСодержимое;
                                    НоваяСтрока.Наименование = ЭлементA.Гиперссылка;
                                    НоваяСтрока.СсылкаНаТовар = ЭлементA.Гиперссылка;
                                КонецЕсли;
                            КонецЦикла;
                        КонецЕсли;
                    КонецЦикла;
                КонецЕсли;
            КонецЕсли;
            
        КонецЦикла;
    Иначе
        ОчиститьСообщения();
        Сообщить("Соединение не установлено!");    
    КонецЕсли;
    
    
КонецПроцедуры
kosalex
В этом месте проблема:
ЧтениеХТМЛ = Новый ЧтениеHTML; 
        ПостроительДОМ = Новый ПостроительDOM;
        
        //Генерируем имя файла на диске, в который запишется страница сайта
        ПреобразуемоеИмяФайла = СтрЗаменить(Адрес, "/", "_");
        ПреобразуемоеИмяФайла = СтрЗаменить(ПреобразуемоеИмяФайла,":","_");
        
        ИмяФайла = КаталогЗагрузкиВременныхФайлов + "\catalog\" + ПреобразуемоеИмяФайла + ".html";
        
        ЗапросХТТП = Новый HTTPЗапрос;
        ЗапросХТТП.УстановитьТелоИзСтроки(Адрес);
        
        //Загружаем нужную нам страницу в каталог
        Соединение.Получить(ЗапросХТТП, ИмяФайла);


Не хочет созранять всю страницу в файл. При открытии файла страницы с диска загружается не вся страница:


Закоментировал
ЗапросХТТП = Новый HTTPЗапрос;
        ЗапросХТТП.УстановитьТелоИзСтроки(Адрес);


Оставил только:
 Соединение.Получить(Адрес, ИмяФайла);


Вся страница загрузилась...в чем дело то?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.