|
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 - сразу получишь все что нужно и преобразуешь к нужному виду
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |