|   |   | 
| 
 | Прочитать сайт и получить таблицу с сайта средствами 1С | ☑ | ||
|---|---|---|---|---|
| 0
    
        AF 12.04.12✎ 09:41 | 
        Есть сайт. Его читаю без проблем. На сайте содержатся данные в таблице, или таблицах. Как это можно прочитать? Желательно перебрать все таблицы страницы сайта, а дальше по содержимому можно уже вычленить нужную инфу... 
  Полный текст сайта читаю легко: Функция ПолучитьТекстСайта(Ссылка); ПолныйТекстСайта=""; Сайт = Новый COMОбъект("InternetExplorer.Application"); Сайт.Visible = Ложь; Состояние("Подключение к " + Ссылка); Сайт.Navigate(Ссылка); Пока Сайт.ReadyState < 4 Цикл КонецЦикла; Попытка ПолныйТекстСайта = Сайт.Document.documentElement.innerHTML; Исключение КонецПопытки; Сайт.Quit(); Возврат ПолныйТекстСайта; КонецФункции А вот как оттудова дернуть таблицы... | |||
| 1
    
        НикДляЗапросов 12.04.12✎ 09:44 | 
        А "сайт" не может предоставить тебе валюты в удобном виде?     | |||
| 2
    
        AF 12.04.12✎ 09:44 | 
        При чем тут валюты? Это сайт точно не валют...     | |||
| 3
    
        Wobland 12.04.12✎ 09:46 | 
        HTML=Новый COMОбъект("HTMLFile");
  HTML.Open("text/html"); HTML.Write(ф.ПолучитьТекст()); HTMLDocument=HTML.documentElement.document; Table=HTMLDocument.getElementsByTagName("Table"); obj=Table.Item(1); КоличествоСтрок=Цел((obj.cells.length-1)/4); Для i=1 По КоличествоСтрок Цикл мож, из этой недописки полезное для себя извлечёшь | |||
| 4
    
        AF 12.04.12✎ 09:52 | 
        Не, отладчиком иду... нет нужного. (((     | |||
| 5
    
        rsv 12.04.12✎ 09:54 | 
        (0) Курите DOM (динамическая объектная модель)InternetExplorer.     | |||
| 6
    
        rsv 12.04.12✎ 09:55 | 
        +(5) Речь тута совсем не об 1С .     | |||
| 7
    
        AF 12.04.12✎ 10:02 | 
        (5) и (6) Я понимаю. Но стоит задача, и ее надо решить. Средствами 1С проще, потому как содержимое таблиц напрямую пишу в справочники 1С.
  Да и знаниями зачаточными обладаю только по 1С... | |||
| 8
    
        AF 12.04.12✎ 10:26 | 
        Видимо, специалистов решивших эту задачу нет... (((     | |||
| 9
    
        Wobland 12.04.12✎ 10:28 | 
        (8) я получал с сайта техподдержки список последних версий ПП. только столкнулся с неприятным моментом и... положил обработку в стол     | |||
| 10
    
        AF 12.04.12✎ 10:32 | 
        Пока роемся в отладчике. Через Сайт.Document.documentElement.innerText получаю голый текст. Что значительно упрощает ситуевину. Уже не надо шариться по тегам, вычленяя нужную инфу. Но блин, таблицу хапнуть удобнее!     | |||
| 11
    
        zak555 12.04.12✎ 10:32 | 
        огласи ссылку     | |||
| 12
    
        AF 12.04.12✎ 10:36 | 
        (11) куда ссылку? Где ищу таблицу?     | |||
| 13
    
        alexhtn 12.04.12✎ 10:36 | 
        Для изучения структуры сайта удобно использовать google chrome.
  Там выбираешь "Инструменты" - "Инструменты разработчика". И используешь код из (3) | |||
| 14
    
        х86 12.04.12✎ 10:36 | 
        innerХТМЛ     | |||
| 15
    
        AF 12.04.12✎ 10:38 | 
        (14) Это об чем?     | |||
| 16
    
        zak555 12.04.12✎ 10:39 | 
        (12) которая здесь :
  Сайт.Navigate(Ссылка); | |||
| 17
    
        AF 12.04.12✎ 10:42 | 
        (16) http://dzhid1.bur.msudrf.ru/modules.php?name=terr
  Таблица территориальной подсудности. Нужны улицы и номера домов. | |||
| 18
    
        alexhtn 12.04.12✎ 10:44 | 
        Table=HTMLDocument.getElementsByTagName("tblTerrList");     | |||
| 19
    
        zzhiraf 12.04.12✎ 10:45 | 
        сделаю за 500 руб)     | |||
| 20
    
        AF 12.04.12✎ 10:46 | 
        (19) Все мировые судьи РФ? Согласен!     | |||
| 21
    
        AF 12.04.12✎ 10:49 | 
        (18) Сорри конечно, а можно полный пример кода?
  У меня (3) пока не проходит, ругается на переменную "ф". ((( | |||
| 22
    
        zzhiraf 12.04.12✎ 10:49 | 
        я про страничку из (17) :)     | |||
| 23
    
        AF 12.04.12✎ 10:51 | 
        (22) За 500 рублей я ее глядя на экран перепишу... )))) А вот с сайта собрать всех судей, реквизиты для госпошлины, ФИО судьи, адрес... И еще хит, связать территориальную подсудность с КЛАДР...     | |||
| 24
    
        AF 12.04.12✎ 10:51 | 
        +23 По всем мировым судьям РФ...     | |||
| 25
    
        zzhiraf 12.04.12✎ 10:53 | 
        Напишите нормальное ТЗ, могу посмотреть...     | |||
| 26
    
        AF 12.04.12✎ 11:00 | 
        Ну какое там ТЗ... Сайт видел. http://www.sudrf.ru/index.php
  Оттуда на мировых судей. Всех по РФ. Задача, получить справочник мировых судей РФ с реквизитами для оплаты госпошлины и таблицей территориальной подсудности. Населенный пункт территориальной подсудности соотнести с кодом из КЛАДР, улицу - (если есть) - также. Номера домов - некритично, да и невозможно. Потому как часто пишут: "ул. Петрова - вся". Справочник многоуровневый. Округ Субъект Город/район Суды | |||
| 27
    
        zak555 12.04.12✎ 11:05 | ||||
| 28
    
        AF 12.04.12✎ 11:07 | 
        (27) Сенкс! И снова в бой... (((     | |||
| 29
    
        n koretsky 12.04.12✎ 11:08 | 
        как вариант - парсить исходник страницы. начинать выдирать текст с тега начала таблицы и заканчивая окончанием таблицы. а дальше - парсить ее.
  но, это уже совсем как запасной вариант. | |||
| 30
    
        zak555 12.04.12✎ 11:09 | 
        (28) напиши админам сайта вопрос : какими параметрами можно получить только то, что нужно     | |||
| 31
    
        AF 12.04.12✎ 11:10 | 
        (29) Ага, уж проще Сайт.Document.documentElement.innerText получить голый текст и прочитать...     | |||
| 32
    
        zzhiraf 12.04.12✎ 11:10 | 
        (26) это большая работа. Там куча сайтов, у всех все по разному.     | |||
| 33
    
        AF 12.04.12✎ 11:11 | 
        (30) Писал, послали лесом ))) Типа "Мы техподдержка, а вам, быдлу, нефиг..."     | |||
| 34
    
        AF 12.04.12✎ 11:13 | 
        (32) Точно, работа немаленькая... Вот сижу, пишу хотя бы на Приволжский федеральный... Если хотя бы полулогикой 70% вытащить, затем второй логикой еще 20%... А потом девочек сажать, пусть набивают...     | |||
| 35
    
        zzhiraf 12.04.12✎ 11:14 | 
        Зачем вам все мировые судьи РФ?     | |||
| 36
    
        zak555 12.04.12✎ 11:14 | 
        (33) положи им сайт тогда     | |||
| 37
    
        AF 12.04.12✎ 11:19 | 
        (35) Долго объяснять. Нужно. 
  (36) Не катит. Сайт + человек + 5000 строк в документе. На 1 строку примерно 60 секунд. 5000 минут... Если программно обработать хотя бы 4000 строк... | |||
| 38
    
        zzhiraf 12.04.12✎ 11:21 | 
        (37) Желаю удачи в этом не легком деле тогда!     | |||
| 39
    
        alexhtn 12.04.12✎ 11:22 | 
        Если хочешь вечером могу найти код, который делает похожие действия.
  Когда-то делал бота для онлайн игры, так приходилось парсить страницы и сохранять данные в 1с. | |||
| 40
    
        AF 12.04.12✎ 11:24 | 
        (38) сам себе желаю.... ((( 
  (39) Очень хочу. Ибо сидеть мне еще с этим ой-ей....((( | |||
| 41
    
        inspam 12.04.12✎ 11:31 | 
        Как вариант HTML в XLS - http://s019.radikal.ru/i610/1204/11/b7a232e48558.jpg     | |||
| 42
    
        AF 12.04.12✎ 11:32 | 
        (41) Т.е получить HTML, сохранить как xls, и перечитать?     | |||
| 43
    
        inspam 12.04.12✎ 11:38 | 
        (42) Ну это как сделаешь)     | |||
| 44
    
        inspam 12.04.12✎ 11:39 | 
        Можешь посадить девочек перегонять HTML в XLS)     | |||
| 45
    
        AF 12.04.12✎ 11:42 | 
        (41) я так не умею. Какой алгоритм? 
  (44) Изнасилуют. Многократно. Жена убьет. ))) | |||
| 46
    
        inspam 12.04.12✎ 11:44 | 
        (45) 
  > я так не умею. Какой алгоритм? Сохранить страницу в голый HTML и открыть в Excel? | |||
| 47
    
        AF 12.04.12✎ 11:49 | 
        (46) тьфу, блин... А что, тоже вариант... Сохранять файл в темп, читать и заполнять... ))) Сенкс, поюзаю, потестю...     | |||
| 48
    
        AF 12.04.12✎ 14:07 | 
        Еще один вопрос...
  Сайт = Новый COMОбъект("InternetExplorer.Application"); Сайт.Visible = Ложь; Состояние("Подключение к " + Ссылка); Сайт.Navigate(Ссылка); Пока Сайт.ReadyState < 4 Цикл ОбработкаПрерыванияПользователя(); КонецЦикла; ПутьКФайлу = "D:\temp.html"; Сайт.Document.ExecCommand("SaveAs", Ложь,ПутьКФайлу); Сайт.Quit(); Пишет сайт на диск, но спрашивает... Как это отключить? | |||
| 49
    
        Wobland 12.04.12✎ 14:17 | 
        (48) в случае с екселем надо применять магию DisplayAlerts. наверняка тут такое же есть     | |||
| 50
    
        Wobland 12.04.12✎ 14:18 | 
        а ещё можно
  Попытка http=Новый HTTPСоединение(); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; Попытка http.Получить(, Файл); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; | |||
| 51
    
        AF 12.04.12✎ 14:22 | 
        (49) Нет такой команды. Есть Silent. Ее сделал Ложь. Все равно спрашивает... Падла. (((     | |||
| 52
    
        Wobland 12.04.12✎ 14:28 | 
        (51) тебе сейчас страницу на диск сохранить? возьми (50) и не парься     | |||
| 53
    
        AF 12.04.12✎ 14:32 | 
        Ошибка при вызове метода контекста (Получить): Ошибка работы с Интернет:  Couldn't resolve host name     | |||
| 54
    
        Wobland 12.04.12✎ 14:40 | 
        (53) ну говори уже, что понаписал     | |||
| 55
    
        AF 12.04.12✎ 15:18 | 
        Да... Скучно. html пишется на диск на ура. Эксель его не открывает...
  Ошибка: Типы не совпадают (0) | |||
| 56
    
        alexhtn 12.04.12✎ 19:26 | 
        Что-то типа этого должно тебе помочь
  УРЛ = Мир.УРЛ + "game.php?village=" + ЭлементыФормы.МоиДеревни.ТекущиеДанные.Код + "&screen=overview_villages&mode=prod&group=0&type=inc&page=-1"; ПерейтиНаСтраницу(УРЛ); table = ЭлементыФормы.ПолеHTML.Документ.all.production_table; КодКолонки_Деревня = -1; КодКолонки_Усадьба = -1; КодКолонки_Призыв = -1; Для т = 0 По table.rows(0).Cells().length - 1 Цикл Если Найти(СокрЛП(table.rows(0).Cells(т).InnerText), "Деревня") > 0 Тогда КодКолонки_Деревня = т; КонецЕсли; Если СокрЛП(table.rows(0).Cells(т).InnerText) = "Усадьба" Тогда КодКолонки_Усадьба = т; КонецЕсли; Если СокрЛП(table.rows(0).Cells(т).InnerText) = "Призыв" Тогда КодКолонки_Призыв = т; КонецЕсли; КонецЦикла; Если КодКолонки_Деревня = -1 Тогда Возврат; КонецЕсли; Если КодКолонки_Призыв = -1 Тогда Возврат; КонецЕсли; Если КодКолонки_Усадьба = -1 Тогда Возврат; КонецЕсли; Для т = 1 По table.rows.length - 1 Цикл КодДеревни = ИзъятьТекст(table.rows(т).Cells(КодКолонки_Деревня).InnerHTML, "village=", "&"); Деревня = Справочники.МоиДеревни.НайтиПоКоду(КодДеревни); Если Деревня.Пустая() Тогда Продолжить; КонецЕсли; Если Деревня.Офф Тогда тУсадьба = table.rows(т).Cells(КодКолонки_Усадьба).InnerText; тПоз = Найти(тУсадьба, "/"); Усадьба_Заполнение = СокрЛП(Сред(тУсадьба, 1, тПоз - 1)); Усадьба_Вместимость = СокрЛП(Сред(тУсадьба, тПоз + 1)); Если Усадьба_Заполнение = Усадьба_Вместимость Тогда Если ПустаяСтрока(table.rows(т).Cells(КодКолонки_Призыв).innerHTML) Тогда ПредварительныйСписокУсадьба.Добавить(Деревня); КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; | |||
| 57
    
        FN 12.04.12✎ 19:46 | 
        (0) тримай:
  //Функция возвращает количество элементов table на странице Функция КоличествоТаблицНаСтранице() Возврат IE.Document.getElementsByTagName("table").Length()-1; КонецФункции //Функция возвращает ТаблицуЗначений, заполненную данными со страницы //Каждая нечетная колонка ("Текст1") содержит строку - данные ячейки //каждая четная колонка ("ХТМЛ1") содержит html-код ячейки Функция ПолучитьТаблицуСоСтраницы(номерТаблицы=0,об="") ТЗ=СоздатьОбъект("ТаблицаЗначений"); //для значений стр=об; Если ПустоеЗначение(стр)=1 Тогда стр=IE.Document; КонецЕсли; спШирина=СоздатьОбъект("СписокЗначений"); ТаблицаСДанными=стр.getElementsByTagName("table").item(номерТаблицы); ВсегоСтрок=ТаблицаСДанными.rows().Length()-1; Для х=1 по ВсегоСтрок Цикл СтолбцовВстроке=ТаблицаСДанными.rows(х).Cells().Length()-1; Для ш=ТЗ.КоличествоКолонок() по СтолбцовВстроке Цикл ТЗ.НоваяКолонка("Текст"+ш); спШирина.ДобавитьЗначение(1); КонецЦикла; ТЗ.НоваяСтрока(); ПоследняяСтрокаТЗ=ТЗ.КоличествоСтрок(); Для ш=0 по СтолбцовВстроке Цикл текстЯчейки=Строка(ТаблицаСДанными.rows(х).Cells(ш).outerText); ТЗ.УстановитьЗначение(ПоследняяСтрокаТЗ,"Текст"+ш,текстЯчейки); текстЯчейки=СокрЛП(текстЯчейки); Если СтрДлина(текстЯчейки)>спШирина.ПолучитьЗначение(ш+1) тогда спШирина.УстановитьЗначение(ш+1,Мин(СтрДлина(текстЯчейки),40)); КонецЕсли; Продолжить; КонецЦикла; КонецЦикла; для ш=1 по спШирина.РазмерСписка() Цикл ТЗ.УстановитьПараметрыКолонки(ш,,,,,спШирина.ПолучитьЗначение(ш)*1.25); КонецЦикла; //Исключение //Сообщить("Ошибка при получении данных! "+ОписаниеОшибки()); //КонецПопытки; Возврат ТЗ; КонецФункции | |||
| 58
    
        FN 12.04.12✎ 19:49 | 
        (48) и не получится - по понятиям безопасности всегда будет интерактивный запрос. Можешь попробовать через v7plus получить как текст и сохранить в хтмл. ну или (57) используй     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |