8.х ОБМЕН Парсинг сайта

Тема в разделе "Обмен данными в "1С:Предприятие 8"", создана пользователем JohnConnor, 31 июл 2013.

  1. TopicStarter Overlay
    JohnConnor
    Offline

    JohnConnor Опытный в 1С

    Регистрация:
    1 сен 2012
    Сообщения:
    85
    Симпатии:
    0
    Баллы:
    26
    Часть НТМL
    HTML:
    <table class='ramka' border=2 cellPadding=2 width="100%">
    <tr><th colspan=3 align="center"><b> Данные за период: июнь 2013</b></th></tr>
    <tr ><td>С телефона</td><td>Минут</td><td>Сумма, руб</td></tr>
    
    <tr><td><a href='index.jsp?action=mtdetail&set_num=3022356871' class='detailp2'>3022356871</a></td><td>268.0</td><td align=right>476.84</td></tr>
    
    <tr><td><a href='index.jsp?action=mtdetail&set_num=3022353472' class='detailp2'>3022353472</a></td><td>153.0</td><td align=right>429.40</td></tr>
    
    мне надо собрать данные 476,84 и 429,40 которые привязаны к номерам 3022353472 и 3022356871
    делаю так
    Код:
    Для каждого стр из ЭлементыФормы.сайт.Документ.Body.all цикл
    Если  Стр.innerText =  "3022356871"   Тогда
    Сообщить("Таблица найдена и значение найдены");
    нужная таблица находиться, а вот как дальше ей указать какие данные необходимо собрать?
    подскажите пжлста
  2. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Каждый случай индивидуален. Надо смотреть полностью html и задачу.
    На вашем куске html сработает:

    Код:
    ЭлементыА = ЭлементыФормы.ПолеHTMLДокумента1.Документ.GetElementsByTagName("A");
    Для Каждого ЭлементА Из ЭлементыА Цикл
    Если ЭлементА.className = "detailp2" Тогда
    ЭлементСтрока = ЭлементА.parentElement.parentElement;
    
    ЯчейкаСТелефона = ЭлементСтрока.children.item(0).InnerText;
    ЯчейкаМинут = ЭлементСтрока.children.item(1).InnerText;
    ЯчейкаСумма = ЭлементСтрока.children.item(2).InnerText;
    
    //...
    
    ЭлементСтрока = Неопределено;
    КонецЕсли;
    КонецЦикла;
    ЭлементА = Неопределено;
    ЭлементыА = Неопределено;
    
    
  3. TopicStarter Overlay
    JohnConnor
    Offline

    JohnConnor Опытный в 1С

    Регистрация:
    1 сен 2012
    Сообщения:
    85
    Симпатии:
    0
    Баллы:
    26
    Спасибо большое помогло!
    А как сделать если нет класса?
    HTML:
    <table class='ramka' border=2 cellPadding=2 width="100%">
    <tr><th colspan="5">Информация о тарифном плане местной связи за период: июль 2013</th></tr>
    <tr><td  align=center><b>Тарифный план</b></td><td align=center><b>Телефон</b></td><td  align=center><b>Использовано минут</b></td><td  align=center><b>Сумма<br> (сверх установленного лимита по плану)</b></td><td  align=center><b>Дата обновления</b></td></tr>
    
    <tr bgcolor="white"><td align="center">ГТС Повременный (организации)</td><td align="center">3022356871</td><td align="center">63.5</td><td align="center">29.97</td><td align="center">25/07/2013</td></tr>
    код в 1с
    Код:
    Процедура ОсновныеДействияФормыДействие1(Кнопка)
    ЭлементыА = ЭлементыФормы.сайт.Документ.GetElementsByTagName("A");
    Для Каждого ЭлементСтраницы из ЭлементыФормы.сайт.Документ.body.all Цикл
    Если ЭлементСтраницы.tagName = "TABLE"
    Тогда
    Если ЭлементСтраницы.border = "2" Тогда //находим нужнную таблицу в HTML. В моем документе их две, одна border=0, другая border=1
    
    Сообщить(ЯчейкаСтроки.innerText);
    
    Извините конечно за наглость, но больше не кому помочь=( не кто сайты не парсит
    не могу сделать по образцу как вы выше написали
  4. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Я не увидел в примере border 1 или 2. Сделал без проверки этого признака. При необходимости добавьте.

    Код:
    ЭлементыТаблица = ЭлементыФормы.ПолеHTMLДокумента1.Документ.GetElementsByTagName("TABLE");
    Для Каждого ЭлементТаблица Из ЭлементыТаблица Цикл
    //Смотрим, правильную ли таблицу нашли (по необходимости проверяем не только className)
    Если ЭлементТаблица.className = "ramka" Тогда
    ЭлементыСтроки = ЭлементТаблица.GetElementsByTagName("TR");
    Для Каждого ЭлементСтрока Из ЭлементыСтроки Цикл
    //То что пошли строки с данными определяем по оформлению строки: (у данных задан цвет фона, у заголовков нет)
    //Признак конечно фиговый ибо оформление может поменяться.
    Если ЭлементСтрока.bgColor = "" Тогда
    Продолжить;
    КонецЕсли;
    
    ЯчейкаТариф = ЭлементСтрока.children.item(0).InnerText;
    ЯчейкаТелефон = ЭлементСтрока.children.item(1).InnerText;
    ЯчейкаМинут = ЭлементСтрока.children.item(2).InnerText;
    ЯчейкаСумма = ЭлементСтрока.children.item(3).InnerText;
    ЯчейкаДата = ЭлементСтрока.children.item(4).InnerText;
    //...
    
    КонецЦикла;
    ЭлементСтрока = Неопределено;
    ЭлементыСтроки = Неопределено;
    КонецЕсли;
    КонецЦикла;
    ЭлементТаблица = Неопределено;
    ЭлементыТаблица = Неопределено;
    

Поделиться этой страницей