Имя: Пароль:
1C
1С v8
Парсинг сайтов средствами 1С
0 mzelensky
 
21.12.12
08:50
Доброго всем!

Есть сайт. На определенной страничке выводится таблица с информацией. Информация тянется из базы средствами ПХП.

Вот ссылки:

<a href="#" pageNum="2" class="pag_n" style="TEXT-DECORATION: none;">2</a>

<a href="#" pageNum="3" class="pag_n" style="TEXT-DECORATION: none;">3</a>

<a href="#" pageNum="4" class="pag_n" style="TEXT-DECORATION: none;">4</a>

и так далее. Я хочу открыть первую страницу, нажать волшебную кнопку и система должна обойти все эти странички. Как реализовать такой обход?!
1 mzelensky
 
21.12.12
09:02
ye fgye
2 бомболюк
 
21.12.12
09:13
открыть для себя HTML DOM Document
3 mzelensky
 
21.12.12
09:14
(2) что за зверь?!
4 Asmody
 
21.12.12
09:17
(2) а если там разметка не валидная?
5 Asmody
 
21.12.12
09:17
(3) СП продать?
6 mzelensky
 
21.12.12
09:20
(3) продавай! Ток по новогодним скидкам.
7 бомболюк
 
21.12.12
09:20
(4) а это как так? типа в браузере отобразится, а дом-документом не проглотится?
8 mzelensky
 
21.12.12
09:20
(6) -> (5)
9 mzelensky
 
21.12.12
09:21
(7) примерчик можно?!
10 бомболюк
 
21.12.12
09:23
(9) это он и есть:
ПолеHTMLДокумента.Документ (HTMLDocumentField.Document)
ПолеHTMLДокумента (HTMLDocumentField)
Документ (Document)
Использование:
Только чтение.
Описание:
Тип: COMОбъект. Предоставляет доступ к HTML документу.
Недоступно на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
11 kabanoff
 
21.12.12
09:24
(9) Вот так с помощью HTML DOM можно парсить, например, сайт nix.ru:


ЧтениеHTML = Новый ЧтениеHTML;
   ЧтениеHTML.ОткрытьФайл(АдресСсылки, "windows-1251");
   
   ПостроительDOM = Новый ПостроительDOM;
   ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML);
   
   ЭлементыDOM = ДокументHTML.ПолучитьЭлементыПоИмени("td");
   
   Характеристики = Новый ТаблицаЗначений;
   
   ПредыдущийЭлементDOM = Неопределено;
   
   Характеристики.Колонки.Добавить("Свойство");
   Характеристики.Колонки.Добавить("Значение");
   
   Для Каждого ЭлементDOM Из ЭлементыDOM Цикл
       Если ЭлементDOM.ИмяКласса = "desc_property" Тогда
           НоваяСтрока = Характеристики.Добавить();
           НоваяСтрока.Свойство = СокрЛП(ЭлементDOM.ТекстовоеСодержимое);
           
           ПредыдущийЭлементDOM = ЭлементDOM;
           
       ИначеЕсли ЭлементDOM.ИмяКласса = "desc_desc" И ЭлементDOM.ПредыдущийСоседний = ПредыдущийЭлементDOM Тогда
           НоваяСтрока.Значение = СокрЛП(ЭлементDOM.ТекстовоеСодержимое);
           
       КонецЕсли;
   КонецЦикла;
12 бомболюк
 
21.12.12
09:26
+(11) а тебе нада
Для к = 0 по Элемент.Документ.links.length - 1 цикл
 HTMLСсылка = Элемент.Документ.links.item(к);
 // ...
КонецЦикла;
13 mzelensky
 
21.12.12
09:31
Так мне не просто пропарсить нужно! Пропарсить не проблема.
Я найду в тексте ссылку вот эту:

<a href="#" pageNum="2" class="pag_n" style="TEXT-DECORATION: none;">2</a>

а как мне ее выаолнить?!

Т.е. я беру начальную страницу. Нажимаю кнопочку. 1С-ка парсит страницу, берет нужную инфу с нее. Затем находит ссылку на следующуб страницу (что выше) и переходит по ней. И далее алгоритм повторяется до конца (по всем страница или по ограниченному количеству).
14 бомболюк
 
21.12.12
09:37
(13) ну получил интерфейс IHTMLElement, относящийся к ссылке, выдрал оттуда атрибут href - и пошел по нему, и так далее.
15 бомболюк
 
21.12.12
09:42
+(14) применительно к 1С это вот так будет выглядеть
АтрибутHREF = HTMLСсылка.getattribute("href", 0);
16 kabanoff
 
21.12.12
09:42
(13) Про рекурсию расказать?
17 mzelensky
 
21.12.12
09:43
(16) да я знаю про рекурсию!
Ты видишь ссылку, что я показал в примере?

<a href="#" pageNum="2" class="pag_n" style="TEXT-DECORATION: none;">2</a>

т.е href="#"  - как мне по ней идти??
18 бомболюк
 
21.12.12
09:46
у блин а я то думал это ты просто сайт решил не показывать. Ну я тогда не знаю, там наверна какие нить обработчики навешиваются с помощью Джавы, а ваще хз, не сталкивался.
19 mzelensky
 
21.12.12
09:49
(18) в том и дело! ТАм как-то вот этот параметр должен обрабатываться "pageNum="2""
20 kabanoff
 
21.12.12
09:58
(17) Посмотри в коде страницы ява-скрипт по классу pag_n. Скорее всего там какой-то обработчик вызывается.
21 mzelensky
 
21.12.12
10:04
(20) уже смотрел. Явно такого нет. Но там два файла явовских (модуля) подключаются.

<SCRIPT  type="text/javascript" src="include/goingexp.js"></SCRIPT>
<SCRIPT  type="text/javascript" src="include/hidecols.js"></SCRIPT>
22 бомболюк
 
21.12.12
10:10
(21) раскроешь домен дело пойдет быстрее
23 Igor 2007
 
21.12.12
10:10
Когда обмен делал с Лотусом. Парсингом занимался *.xml файлов. Объект "План обмена" даже создал. Вроде там есть код: http://infostart.ru/public/82141/
24 mzelensky
 
21.12.12
10:12
(22) не могу - там доступ платный. А доступ к инфе, разумеется, возможен только после аутентификации и оплате.
25 бомболюк
 
21.12.12
10:14
тогда файлы эти ищи на сервере, а потом их гляди
26 Адинэснег
 
21.12.12
10:14
HTTPСоединение.Получить (HTTPConnection.Get)
HTTPСоединение (HTTPConnection)
Получить (Get)
Синтаксис:

Получить(<Источник>, <ИмяВыходногоФайла>, <Заголовки>)
Параметры:

<Источник> (обязательный)

Тип: Строка.
Адрес ресурса на сервере.
<ИмяВыходногоФайла> (обязательный)

Тип: Строка.
Имя файла, в который помещаются данные полученного ресурса.
<Заголовки> (необязательный)

Тип: Строка.
Указываются заголовки, добавляемые к запросу на сервер. Текстовые пары вида <Заголовок>:<Значение>, разделяемые комбинацией ВК + ПС.
Описание:

Получает ресурс из указанного адреса.

Доступность:

Тонкий клиент, сервер, толстый клиент, внешнее соединение.
27 mzelensky
 
21.12.12
10:14
(23) не совсем понял, а причем тут парсинг xml файлов???

У меня в другом затык. Читай (17)
28 Адинэснег
 
21.12.12
10:16
href="#"
это она сама на себя ссылается
29 mzelensky
 
21.12.12
10:17
(28) эт понятно. Там ключевой момент

 pageNum="2" class="pag_n"
30 mzelensky
 
21.12.12
10:19
(28) подскажи, как передать эти параметры?!
31 Адинэснег
 
21.12.12
10:20
сайт то засвети уже) а мы посмотрим)
32 Анатолий Никитин
 
21.12.12
10:22
(29) сморти как сам сайт ссылку формирует, и формируй такую же свою программой, потом переходи по ссылке и заново выполняй свой алгоритм.
33 бомболюк
 
21.12.12
10:23
может попробовать FireBug поглядеть, закладка Net? Только в качестве предположения.
34 mzelensky
 
21.12.12
10:23
(31) да ты не зайдешь на него. Там платное все. Ты до этой инфу (страницы) не доберешься.
35 mzelensky
 
21.12.12
10:25
Тут другая идея родилась.

Взять прогу, которая запоминает действия пользователя и повторяет их потом. Типа эмулытора. Задать ей действия сохранять странички как внешний файл, а потом переходить на следующую страницу. и так далее...

А уже потом имеющиеся файлики пропарсить.
36 Адинэснег
 
21.12.12
10:55
Чарли
37 Адинэснег
 
21.12.12
10:55
charles
38 Адинэснег
 
21.12.12
10:57
все респонсы в чалри можно экспортировать в файлы
39 mzelensky
 
21.12.12
11:21
(38) а теперь по русски и более подробно плиз
40 Elisy
 
21.12.12
11:49
(17) Похоже на фреймворк типа JQuery. При загрузке страницы срабатывает скрипт, который ставит обработчик событий на click каждого элемента.  Но не понятно какое действие - потому что возможен не переход на другую страницу, а обновление части текущей страницы.