![]() |
![]() |
|
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&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">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"> </div> <div class="blockPhone_mid"> <a href="ссылка цензоред" title="в наличии"><img src="картинка товара цензоред" alt="в наличии" /></a> </div> <div class="blockPhone_bot"> </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.Закрыть(); КонецЦикла;КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |