|
Прочитать сайт и получить таблицу с сайта средствами 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) используй
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |