Имя: Пароль:
1C
 
v8: Парсинг HTML
0 Стэн
 
15.04.11
14:08
есть текст
каким образом можно извлечь строку

"http://45.125.23.13/calendar/feeds/stanst%40gmail.com/private/full?v=2&max-results=10000&singleevents=true&orderby=starttime&start-min=2011-04-15T13:59:11.000Z&start-max=2011-04-25T13:59:11.000Z&gsessionid=IRdvhks1ne90aKn6XYm2qQ"

в отдельный файл, как разобрать html строку на запчасти, кто нибудь может дать совет?

<HTML>
<HEAD>
<TITLE>Moved Temporarily</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Moved Temporarily</H1>
The document has moved <A HREF="http://45.125.23.13/calendar/feeds/stanst%40gmail.com/private/full?v=2&amp;max-results=10000&amp;singleevents=true&amp;orderby=starttime&amp;start-min=2011-04-15T13:59:11.000Z&amp;start-max=2011-04-25T13:59:11.000Z&amp;gsessionid=IRdvhks1ne90aKn6XYm2qQ">here</A>.
</BODY>
</HTML>
1 DrHiHi
 
15.04.11
14:14
можно через DOM
2 Стэн
 
15.04.11
14:18
спасибо за совет
3 y88
 
15.04.11
14:18
Регулярными выражениями

   RegExp = Новый COMОбъект("VBScript.RegExp");
   RegExp.MultiLine  = Истина;
   RegExp.Global     = Истина;
   RegExp.IgnoreCase = Истина;

   RegExp.Pattern = "<A HREF=""(.*?)"">";
   Если RegExp.Test(ТекстХТМЛ) Тогда
       Matches = RegExp.Execute(ТекстХТМЛ);
       Для каждого Match из Matches цикл
...
4 Стэн
 
15.04.11
14:42
преобразовал к строке и обрезал!! с лева с права пока не получил то что надо))
5 DrHiHi
 
15.04.11
14:46
(4) не заморачивайся.... делай через DOM... я делал когда-то разборку html... был сайт в котором проставляли точки маршрута и он рисовал маршрут и надо было, чтобы данные попали в базу с заполненными точками маршрута А и В и километраж
6 detec
 
15.04.11
14:51
(0)

Есть неплохой COM-объект HTMLFile, я его использую вместо DOM.
7 Живой Ископаемый
 
15.04.11
15:00
А еще можно воспринимать хтмл как хмл, и тогда искомая строка - это значение атрибута узла(или самого узла - не помню) A HREF.
и тогда всего лишь нужно открыть хтмл как хмл.
8 Кокос
 
05.05.11
15:54
что нибудь получилось? мне нужно отпарсить хтмлку. обычным 1сным хмл парсером получится?
9 Кокос
 
05.05.11
16:09
Народ! Мне после праздников предстоит грузить товар из таблицы на странице хтмл. Обычный 1сный хмл парсер с этим справится?
10 Ненавижу 1С
 
гуру
05.05.11
16:11
(7) нельзя как хмл, не всегда есть парные теги
11 Кокос
 
05.05.11
16:15
(10). о. а чем тогда пользоваться?
12 orefkov
 
05.05.11
16:27
Кто за DOM и xml пишет - вы уверены, что данный html файл валидный с точки зрения xml ?
Вот ща парсю файлы синтакс-помошника от v82, так нифига не так. Как html файл отображается, а как xml не грузиться - полно незакрытых тегов и тп.
13 Кокос
 
05.05.11
16:32
(12) ну я так понял стандартными хмлками из 1с не получится. ищу вот библиотеки внешние.
14 Кокос
 
05.05.11
16:49
(5) а как через ДОМ? у тебя есть пример кода на 7рке или 8рке?
15 acsent
 
05.05.11
16:52
В 8.2 есть ЧтениеHTML
16 Кокос
 
05.05.11
17:01
(15) о. спасибо. приеду гляну. я вроде с одной коробки книжки по 8.2 выдернул.
17 Живой Ископаемый
 
05.05.11
17:02
2(10) я читал как хтмл фб2, который по сути - хмл... вполне даже большие книжки, и даже с картинками... :) Не помню сообщений о непарных тегах... Но не исключено что бывает конечно такое.
18 Живой Ископаемый
 
05.05.11
17:03
а, стоп, я уже все напутал... это обратная ситуация от требуемой...
19 Кокос
 
05.05.11
17:56
нашел такой текст на 7рке.

objIE = СоздатьОбъект("InternetExplorer.Application");
objIE.Visible = IE; // Если не показывать окно - может ругаться антивирь, но удобнее работать.
objIE.Silent = 0;    
Адрес = "http://bank.gov.ua/Fin_ryn/OF_KURS/Currency/FindByDate.aspx";
 objIE.Navigate(Адрес);                                              
 
Пока objIE.readyState<4 Цикл // Ждем пока она загрузится
КонецЦикла;                        
 
 Для Дат = НачДата По КонДата Цикл
 
   // Перебираем даты
     СтрокаДаты = Формат(Дат,"ДДДММГГГГ"); // используем для ввода и индикации
 
   Форма.Заголовок("Загрузка курса за "+СтрокаДаты);
   objDoc = objIE.Document;
   objForm = objDoc.forms(0); // Получаем первую форму в документе
 
   objForm.elements("Text1").value = СтрокаДаты; // Заполняем дату
     objForm.submit();

     Пока objIE.readyState>3 Цикл // Ждем пока отправится запрос
         Состояние("Посылка запроса за дату "+СтрокаДаты);
     КонецЦикла;  
     
   Пока objIE.readyState<4 Цикл // Ждем пока она загрузится
         Состояние("Загрузка страницы за дату "+СтрокаДаты);
     КонецЦикла;  
 
     // Очищаем таблицу
     AllTags = objDoc.All.Tags("TD");
     Началось = 0;  // индикация начала заполнения ТЗ
     Графа = 1;     // признак для графы ТЗ
     Для Ном = 0 По AllTags.length-1 Цикл
       ТекстВТД=СокрЛП(AllTags.item(Ном).innerText);
       Если ТекстВТД="Офіційний курс" Тогда Началось=1; Продолжить; КонецЕсли;
       Если Началось=1 Тогда
           Если Графа=1 Тогда
               // Тогда это код валюты
               ТЗ.НоваяСтрока();
               ТЗ.Код = ТекстВТД;
               Графа = 2;
           ИначеЕсли Графа = 2 Тогда
               // Тогда это обозначение
               ТЗ.Обозначение = ТекстВТД;
               Графа = 3;
           ИначеЕсли Графа = 3 Тогда
               // Тогда это кратность
               ТЗ.Кратность = ТекстВТД;
               Графа = 4;
           ИначеЕсли Графа = 4 Тогда            
               // Тогда это наименование      
               ТЗ.Наименование = ТекстВТД;
               Графа = 5;                      
           ИначеЕсли Графа = 5 Тогда                        
               // Тогда это курс
               ТЗ.Курс = ТекстВТД;
               Графа = 1;
           КонецЕсли;    
       КонецЕсли;
     КонецЦикла;

     // Получили таблицу, заполняем справочник
 
 
   КонецЦикла; // перебора дат
     
   objIE.Quit(); // Закрываем приложение
   objIE = "";   // За собой нужно "убирать"
   Сообщить("Курсы валют успешно загружены");
КонецПроцедуры
20 Живой Ископаемый
 
05.05.11
17:58
это ужас, кроме шуток...
21 Кокос
 
05.05.11
18:02
Для меня ключевое место
AllTags = objDoc.All.Tags("TD");

мне нужно на сайте искать блоки:

<div class="blockPhone">
<div class="phonePrice"> <span>8 600 руб</span> </div>
<div class="blockPhone_top">&nbsp;</div>
<div class="blockPhone_mid">
                           <a href="ссылка цензоред" title="в наличии"><img src="картинка товара цензоред" alt="в наличии" /></a> </div>
<div class="blockPhone_bot">&nbsp;</div>
div class="compare" style="display: none;">
                           <a "javascript:void(0);" onclick="Add_to_compare(350)" title="Сравнить">Сравнить</a>
</div>
<h5><a href="..." title="Описание Телефона">Acer beTouch E130</a></h5>
<div class="phone_btn">
<a href="..." title="Описание Телефона"><img src="/images/look.gif" alt="Описание Телефона" /></a>
<a href="javascript:void(0);" onclick="Add_to_cart(350)" title="Добавить в корзину"><img src="/images/cart.gif" alt="Добавить в корзину" /></a>

</div>

соответственно мне надо перебирать
AllTags = objDoc.All.Tags("div class=""blockPhone""");

а где помощь взять по этим функциям? пошел искать )
22 smaharbA
 
05.05.11
18:07
Нужно через DOM
23 acsent
 
05.05.11
18:07
Через дом и xpath
24 Кокос
 
05.05.11
18:08
(20) да. мне тоже не нравится что грузится экспролер полностью. там даже есть ожидание пока оно загрузится )) скорее всего чтениеHTML поможет... просто я еще на югах отдыхаю. приеду в книжке гляну

(22) В 8.2 говорят появилось чтениеХТМЛ
(23) а чего чтениеХТМЛ тоже не поможет? Выже вроде рекомендовали
25 smaharbA
 
05.05.11
18:10
чтение ХТМЛ было в восьмерке с рождения (хотя восьмерку увидел совсем недавно)
26 Кокос
 
05.05.11
18:14
(25) приеду проверю )) сейчас в адлере дождь. зонта нет. сижу в гостинице делать нечего. вот. копаюсь
27 Кокос
 
10.05.11
16:27
(25) чтениеХТМЛ не увидел в 8.1 сейчас поставил 8.2 там оно есть. ДОМ в 8.1 вроде был.


Народ! а у кого нибудь есть пример работы с html через DOM и ЧтениеHtml. Может в какой конфе есть обработка для того чтобы глянуть?
28 Кокос
 
10.05.11
16:44
ап
29 acsent
 
10.05.11
16:46
ЧтениеHTML = Новый ЧтениеHTML;
ЧтениеHTML.УстановитьСтроку("<html><head><title>Тест</title></head><body><a href='http://www.1c.ru'>Компания 1С</a></html>");
ПостроительDOM = Новый ПостроительDOM;
ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML);
30 Кокос
 
10.05.11
17:36
(29) да это и в синтакспомошнике есть. хотелосьбы пример с перебором тегов загрузки простейшей информации. наподобие (19)
31 acsent
 
10.05.11
17:38
Бери любой пример где чтение хмл используется
32 Кокос
 
10.05.11
17:39
(31) хм. спасибо.
33 Кокос
 
10.05.11
17:47
Процедура ЗагрузкаКаталогаSVEN()    МассивФайлов = НайтиФайлы(\"c:downloadwww.sven.rucatalog\", \"*.htm\", истина);        Для каждого ЭлементМассива Из МассивФайлов Цикл            ЧтениеHTML = Новый ЧтениеHTML;        ЧтениеHTML.ОткрытьФайл(ЭлементМассива.ПолноеИмя);                Если             ЭлементМассива.Путь=\"c:downloadwww.sven.rucatalog\"                 // не нужны элементы из корня            ИЛИ ЭлементМассива.Путь=\"c:downloadwww.sven.rucatalogarchive\"         // старые модели тоже не нужны            //ИЛИ ЭлементМассива.Путь=\"c:downloadwww.sven.rucatalogaccessory\"    // аксессуары тоже не нужны        Тогда             продолжить;         КонецЕсли;                ПостроительDOM = Новый ПостроительDOM;        ДокументDOM = ПостроительDOM.Прочитать(ЧтениеHTML);                ЭлементыHTML = ДокументDOM.ПолучитьЭлементыПоИмени(\"h1\");                ТекСтрока = ЭлементыHTML[3].СледующийСоседний.СледующийСоседний.ТекстовоеСодержимое;                СтрокаТабличнойЧасти = Объект.ТабличнаяЧасть1.Добавить();        СтрокаТабличнойЧасти.Наименование = ТекСтрока;                ЧтениеHTML.Закрыть();            КонецЦикла;КонецПроцедуры



нашел
34 Кокос
 
10.05.11
17:48
Процедура ЗагрузкаКаталогаSVEN()    
МассивФайлов = НайтиФайлы("c:\download\www.sven.ru\catalog", "*.htm", истина);
   Для каждого ЭлементМассива Из МассивФайлов Цикл            ЧтениеHTML = Новый ЧтениеHTML;        
ЧтениеHTML.ОткрытьФайл(ЭлементМассива.ПолноеИмя);                Если            ЭлементМассива.Путь="c:\download\www.sven.ru\catalog\"                // не нужны элементы из корня            ИЛИ ЭлементМассива.Путь="c:\download\www.sven.ru\catalog\archive\"        // старые модели тоже не нужны            //ИЛИ ЭлементМассива.Путь="c:\download\www.sven.ru\catalog\accessory\"    // аксессуары тоже не нужны        Тогда            продолжить;        КонецЕсли;                ПостроительDOM = Новый ПостроительDOM;        ДокументDOM = ПостроительDOM.Прочитать(ЧтениеHTML);                ЭлементыHTML = ДокументDOM.ПолучитьЭлементыПоИмени("h1");                ТекСтрока = ЭлементыHTML[3].СледующийСоседний.СледующийСоседний.ТекстовоеСодержимое;                СтрокаТабличнойЧасти = Объект.ТабличнаяЧасть1.Добавить();        СтрокаТабличнойЧасти.Наименование = ТекСтрока;                ЧтениеHTML.Закрыть();            КонецЦикла;КонецПроцедуры
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший