Имя: Пароль:
1C
1С v8
ЧтениеHTML помогите разобраться
0 Boudybuilder
 
08.12.13
16:44
ЧтениеHTML     = Новый ЧтениеHTML;
    ЧтениеHTML.ОткрытьФайл(Адрес,"windows-1251");
    
    
    ПостроительDOM = Новый ПостроительDOM;
    ДокументHTML   = ПостроительDOM.Прочитать(ЧтениеHTML);
    
    ЭлементыDOM    =  ДокументHTML.ПолучитьЭлементыПоИмени("div");


Таким образом ЭлементыDOM у меня всегда количество 0.
Я так понял что ЧтениеHTML у меня хромает. Там адрес можно так указывать "http://www.forum.mista.ru/"; , или это должен быть файл сохраненный локально?
1 Лефмихалыч
 
08.12.13
16:50
(0) давай начнем с  того, что и зачем тебе надо
2 Boudybuilder
 
08.12.13
16:52
Задачу поставтл , так как надо пропарсить один сайт , а через поле на форме ПолеHTMLДокумента невозможно работать так как выкидывает слишком много предупреждений о ошибке скирипта. Я уже и IE настраивал по разному , отключал отладку скриптов , но не помогало... :(

А тут нашел , что можно таким способом v8: Парсинг сайтов средствами 1С

вот и осваиваю...

На правильном ли я пути?


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

Вот такая вот последовательность действий меня смущает. Итернет уже давно позволяет все качать в несколько потоков. Как можно реализовать парсинг сразу нескольких страниц...

Например есть страничка с таблицей товаров , и ссылками на них. Пропарсить все ссылки товаров - это понятно. А как дальше парсить уже странички товаров , чтобы не поп порядку а сразу все! Тоесть запустить все ссылки сразу...???
3 Boudybuilder
 
08.12.13
16:54
(1) Спасибо что откликнулись.

Да вот , хотел бы парсить сайт поставщика и получать все его описания и изображения на сайте.  Или пригодится конкурента пропарсить  , и цены стянуть )))
4 Boudybuilder
 
08.12.13
16:56
Я бы согласился и на поле HTML документа,  но уж больно там много ошибок... :(
Да и скорость работы с ним не оч устраивает...  
Тут вопрос о скорости тоже стоит....
5 Boudybuilder
 
08.12.13
17:50
Для начала его во временный файл запихать?

Соединение = Новый HTTPСоединение(Сервер);
Соединение.Получить(Адрес,ИмяФайла);
6 Boudybuilder
 
08.12.13
19:33
Где все????

    ЧтениеHTML     = Новый ЧтениеHTML;
    ЧтениеHTML.ОткрытьФайл(ВремФайл,"windows-1251");
    
    
    ПостроительDOM = Новый ПостроительDOM;
    ДокументHTML   = ПостроительDOM.Прочитать(ЧтениеHTML);
    
    ЭлементыDOM    =  ДокументHTML.ПолучитьЭлементыПоИмени("div");
    
    

    Для Каждого ЭлементDOM Из ЭлементыDOM Цикл
        Если ЭлементDOM.ИмяКласса = "content-wrap" Тогда
            ПолучитьСсылку(ЭлементDOM);
        КонецЕсли;
    КонецЦикла;


Как то так вытянул...

Но добраться до дочерних не могу!!!
7 Boudybuilder
 
08.12.13
19:36
Как тут перебрать все дочерние ?
Пробую писать через рекурсию. Если правильно пишу....

Процедура ПолучитьСсылку (ЭлементDOM)
    
    Для Каждого ДочУзел ИЗ  ЭлементDOM.ДочерниеУзлы Цикл
        Сообщить ("Цикл");
        Попытка
            //Если ДочернийУзел.ИмяКласса = "content" Тогда
                Сообщить ("Ид: " + ДочУзел.Идентификатор + " ИмяКласса: " + ДочУзел.ИмяКласса);
            //КонецЕсли;
        Исключение
        КонецПопытки;
        
        
        ПолучитьСсылку(ДочУзел);
    КонецЦикла;    
    
КонецПроцедуры


Но что то она в глубь тела документа не залазит... Тока верхние узлы читает. Проверяю отладчиком - дочерних 0 !!!

Почему дочерние не видит?
8 Boudybuilder
 
10.12.13
17:20
Самый свежий вопрос:

Все ссылки у меня идут перебором строк ТЧ. По каждой переходит , открывает и читает... Но... Пришлось поставить после каждого "Перейти" Предупреждение(Текст,6); Иначе галопом все ссылки цикл отработает , и толку не будет. Тут у меня фиксировано 6 секунд даю . Но они то быстрее грузятся то дольше. Как это заменить на какой то обработчик ожидания получения данных из странички? чтобы как только стянулись данные , переходило к следующей строке...?

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

Помогите хоть с этим вопросом.