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

Хранилище

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

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



> Не видно элементов html тэгов при парсинге сайта          
kosalex Подменю пользователя
сообщение 22.07.15, 12:28
Сообщение #1

Ветеран
*******
Группа: Пользователи
Сообщений: 805
Спасибо сказали: 14 раз
Рейтинг: 0

Доброго времени суток! Хочу научиться парсить сайт. Взял для примера вот этот сайт [необходимо зарегистрироваться для просмотра ссылки].

Парсю главную страницу вот так:
 ЧтениеХТМЛ = Новый Чтение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.Гиперссылка;
                    
                КонецЕсли;    
            
        КонецЕсли;
        
    КонецЦикла;

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


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

Сообщение отредактировал Vofka - 22.07.15, 14:43

kosalex Подменю пользователя
сообщение 23.07.15, 8:11
Сообщение #2

Ветеран
*******
Группа: Пользователи
Сообщений: 805
Спасибо сказали: 14 раз
Рейтинг: 0

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

Процедура ПропарситьСтраницуДорожныеСумки(Адрес)
    Соединение = Новый 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 Подменю пользователя
сообщение 23.07.15, 9:35
Сообщение #3

Ветеран
*******
Группа: Пользователи
Сообщений: 805
Спасибо сказали: 14 раз
Рейтинг: 0

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


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


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


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


Вся страница загрузилась...в чем дело то?

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


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

 

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