![]() |
![]() |
![]() |
|
уф Как прочитать страницу HTML | ☑ | ||
---|---|---|---|---|
0
rikodroo
28.02.13
✎
12:41
|
Привет!
Изучаю работу с HTML на управляемой форме. Решил сделать парсинг яндекс маркета, но тут возникло несколько вопросов. Пишу так: Соединение = Новый HTTPСоединение("m.market.yandex.ru"); Соединение.Получить("search.xml?cvredirect=1&text=" + СтрокаПоиска, ВремHTML); Текст = Новый ТекстовыйДокумент; Текст.Прочитать(ВремHTML, КодировкаТекста.UTF8); Текст = Текст.ПолучитьТекст(); Если передаю конкретный товар, типа СтрокаПоиска = "Apple+iPhone+5+16Gb" , то тут происходит следующее - возвращается страница с одним товаром (который и передали в запросе), и значение Текст будет пустой строкой. Если тоже самое проделать в браузере, то видно, что при этом просто происходит редирект на страницу (http://m.market.yandex.ru/model.xml?modelid=8454852&hid=91491&text=Apple%20iPhone%205%2016Gb&srnum=195). На форме сделал реквизит строкового типа и элемент формы вида "Поле HTML документа" (собственно у Текст это оно и есть). Понятно, что в этом случае не отображается ничего. Однако, если написать так: Текст = "http://m.market.yandex.ru/search.xml?cvredirect=1&text=" + СтрокаПоиска; то страница нормально отображается, причем уже редиректнутая. Моя задача программно прочесть эту страницу, но обратиться через ПолучитьТекст() к элементу формы не получается (это вроде только для обычных форм). Подскажите как в этом случае прочитать страничку? |
|||
1
Asmody
28.02.13
✎
12:48
|
у Я.Маркета есть API http://api.yandex.ru/market/content/doc/dg/concepts/about.xml
чем парсить страницы, используй его |
|||
2
rikodroo
28.02.13
✎
13:13
|
(1) Спасибо. Действительно, я что-то не подумал (((
|
|||
3
rikodroo
04.03.13
✎
08:40
|
Что-то, для использования яндекс - апи пишут, что необходимо у неих рег.код получить - не высылают.. Ну да ладно, фиг с ним с апи.
сейчас вопросы такие: 1) Почему событие поля ХТМЛ документа ДокументСформирован() вызывается по два раза? Как это обходить и нужноли обходить? 2) на форме сделал две вкладки с полями ХТМЛ документа - Карточка товара (это куда загружаются странички вида http://m.market.yandex.ru/model.xml?modelid=8454852&hid=91491&text=Apple%20iPhone%205%2016Gb&srnum=190) и Характеристики товара (СтраницаХарактеристик = "http://m.market.yandex.ru/spec.xml?modelid=8454852"). Странички загружаются во вкладки одна за другой, но когда обработку запускаю первый раз, то в первую вкладку (Карточка товара) данные загружаются, а во вторую (с характеристиками), только после того, как на нее перейти. Далее, если начать работать с другим товаром, то на вкладку характеристик все загружается нормально (правда событие по два раза происходит зачем то?). Как сделать, чтобы и в первый раз страница характеристик нормально грузилась? Вот код, который я использую: &НаКлиенте Процедура Поиск(Команда) // кнопка, нажимаемая при выборе товара в справочнике СтраницаХарактеристик=""; СтраницаРисунков=""; Товар = Элементы.Товары.ТекущиеДанные.Наименование; Если СокрЛП(Товар) = "" Тогда Предупреждение("Не выбран товар"); Возврат; КонецЕсли; СтрокаПоиска = СтрЗаменить(СокрЛП(Товар), "/", "%2F"); СтрокаПоиска = СтрЗаменить(СокрЛП(СтрокаПоиска), " ", "+"); //Карточка товара Страница = "http://m.market.yandex.ru/search.xml?cvredirect=1&text=" + СтрокаПоиска; КонецПроцедуры &НаКлиенте Процедура СтраницаДокументСформирован(Элемент) Адрес = Элемент.Документ.URLUnencoded; // поле на форме со строкой УРЛ КонецПроцедуры &НаКлиенте Процедура Выбрать(Команда) Если СокрЛП(Адрес) = "" или Адрес = "about:blank" тогда Предупреждение("Страница загрузки не определена. Дальнейшая работа невозможна!"); Возврат; КонецЕсли; Попытка мRegExp = Новый COMОбъект("VBScript.RegExp"); мRegExp.IgnoreCase = Истина; мRegExp.Global = Истина; Исключение Предупреждение("Не удалось создать объект ""VBScript.RegExp"". Дальнейшая работа невозможна!"); Возврат; КонецПопытки; РегулярноеВыражение = "modelid=[0-9]*"; мRegExp.Pattern = РегулярноеВыражение; Matches = мRegExp.Execute(Адрес); Вхождений = Matches.Count; Для Сч = 0 По Вхождений-1 Цикл ИдВМаркете = Matches.Item(Сч).value; ИдВМаркете = СтрЗаменить(СокрЛП(ИдВМаркете), "modelid=", ""); Если ИдВМаркете <> "-1" И ИдВМаркете <> "" Тогда Прервать; КонецЕсли; КонецЦикла; Если ИдВМаркете = "-1" Или ИдВМаркете = Неопределено Тогда Предупреждение("По данной ссылке товар загрузить невозможно. Загрузка происходит из основной карточки товара."); Возврат; Иначе КонецЕсли; //Характеристики товаров СтраницаХарактеристик = "http://m.market.yandex.ru/spec.xml?modelid=" + ИдВМаркете; КонецПроцедуры &НаКлиенте Процедура СтраницаХарактеристикДокументСформирован(Элемент) Если Элемент.Документ.URLUnencoded = "about:blank" Тогда Возврат; КонецЕсли; Сообщить("оп"); // вызывается по два раза? КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |