Имя: Пароль:
1C
1С v8
2 Парсинг html
0 TOlikRx
 
05.06.13
21:44
На нужной странице сайта есть блоки вида:
<div class="tradein">
<div class="thumb"><a href="/tradein/996/"><img src="/files/image/tradein/hyundai/996_Hyundai_Sonata_2010_1_1370436546.jpg" class="lazy" data-original="/files/image/tradein/hyundai/996_Hyundai_Sonata_2010_1_1370436546.jpg" align="center" style="display: inline;"></a></div>
<div class="name"><a href="/tradein/996/" class="more">HYUNDAI SONATA</a></div>
<div class="price">850 000р.</div><div class="run">2010 г.в., 61 000 км пробег.</div>
</div>
<div class="tradein">
...
</div>
<div class="tradein">
...
</div>

Как мне из каждого такого блока "tradein" получить 1) href="/tradein/996/" 2) src каринки 3) название машины и 4) цену
?

Делал так:
Соединение    = Новый HTTPСоединение("хост");
Соединение.Получить("/tradein/","файл.txt");
ЧтениеХТМЛ    = Новый ЧтениеHTML();
ЧтениеХТМЛ.ОткрытьФайл("файл.txt","UTF-8");
ПостроительДОМ    = Новый ПостроительDOM;
ДокументХТМЛ    = ПостроительДОМ.Прочитать(ЧтениеХТМЛ);
Узел0    = ДокументХТМЛ.ПолучитьЭлементПоИдентификатору("cont-add");

Если выводить содержимое Узел0, то внем как раз все блоки "tradein". А вот как дальше пройти по всем таким блокам не понял ?
1 Asmody
 
05.06.13
22:08
Смотри xpath
2 TOlikRx
 
05.06.13
22:16
А пример можно ?
3 viktor_vv
 
05.06.13
22:24
Я примерно так делал, попробую накопипастить

ЧтениеHTML = Новый ЧтениеHTML;
ПостроительDOM = Новый ПостроительDOM;

ТипЗначения = Тип("ЭлементОбъектHTML");

           мСписокВсехОбъектов(ДокументHTML,ТипЗначения,СписокОбъектов);
           Если СписокОбъектов.Количество() > 0 Тогда
               ОбъектHTML = СписокОбъектов.Получить(0).Значение ;
               СсылкаURL = ОбъектHTML.Данные ;


тут рекурсией по всем дочерним объектам проходим.

Функция мСписокВсехОбъектов(УзелHTML,ТипЗначения,СписокОбъектов)
   Для каждого Узел ИЗ УзелHTML.ДочерниеУзлы Цикл
       Если ТипЗнч(Узел) = ТипЗначения Тогда
           СписокОбъектов.Добавить(Узел) ;
       КонецЕсли ;    
       мСписокВсехОбъектов(Узел,ТипЗначения,СписокОбъектов)
   КонецЦикла ;    
КонецФункции

Я уже точно не помню почему именно так, но выбрать надо было ссылки на видео из

<object height="350" width="425" data="http://www.youtube.com/v/TwEF4FxvJ3I" type="application/x-shockwave-flash"> <param name="src" value="http://www.youtube.com/v/TwEF4FxvJ3I" /> </object>
4 viktor_vv
 
05.06.13
22:25
То есть так

           ЧтениеHTML.УстановитьСтроку(Выборка.ДопОисаниеИмпорт);            
           ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML);
  мСписокВсехОбъектов(ДокументHTML,ТипЗначения,СписокОбъектов);
5 viktor_vv
 
05.06.13
22:26
А, ну да, как раз в моем случае

Тип("ЭлементОбъектHTML")

и соотвествовал

<object height="350" width="425" data="http://www.youtube.com/v/TwEF4FxvJ3I" и т. д.
6 anddro
 
05.06.13
22:39
Кхм... ИМХО правильный ответ в (1), а в (3) это закат солнца вручную
7 viktor_vv
 
05.06.13
22:55
(6) Не спорю, может быть. Не силен в этих html, а нужна была разовая обработка.
8 quest
 
05.06.13
23:04
не мучайся, а заюзая xslt - сразу получишь все что нужно и преобразуешь к нужному виду