Форум программистов, компьютерный форум, киберфорум
MS Office Excel
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 30.01.2015
Сообщений: 16
1

Стянуть котировки золота и нефти

12.02.2015, 03:56. Показов 2329. Ответов 5
Метки нет (Все метки)

Visual Basic
1
2
3
4
5
6
7
Function Цена_квартиры()
    Dim URL, ZEN, XMLHTTP As Object, XX: URL = "http://www.rosrealt.ru/Rostov_na_Donu/cena"
    Set XMLHTTP = CreateObject("MSXML2.XMLHTTP") 'CreateObject("Microsoft.XMLHTTP")
         With XMLHTTP: .Open "GET", URL, False: .send: End With
     XX = XMLHTTP.responsetext: XX = Split(Split(XMLHTTP.responsetext, "Вторичный рынок")(1), " руб")
    Цена_квартиры = CDbl(Replace(Split(XX(0), ">")(UBound(Split(XX(0), ">"))), " ", ""))
End Function
Тут мне помогли вот с таким вот кодом, который вытягивал цены на квартиры. Так вот хотелось бы нечто подобное для http://www.cbr.ru/ и котировки золота на главной странице. Дело в том, что перехватывать с главной страницы лучше чем запрашивать по дате, ибо нужна только актуальная котировка и отсутвие глюков с датами, которая связана с тем, что нет торгов по выходным. Я понимаю весь код, не соображу как находится нужный текст
Visual Basic
1
(Split(Split(XMLHTTP.responsetext, "Вторичный рынок")(1), " руб"))
Точно так же как и не понимаю этой строки
Visual Basic
1
CDbl(Replace(Split(XX(0), ">")(UBound(Split(XX(0), ">"))), " ", ""))
То есть так понимаю достаточно эти две строчки правильно подкорректировать и цена притянется к переменной. Но вот гуглил материал по данной теме и не нашел алгоритма того как прописываются все эти скобочки, кавычки и и значки или же это делает какая-то хитроумная запись макроса? То есть конечно заранее благодарю за готовое решение, но хотелось бы и научиться самому вытягивать нужную инфу макросами, а не напрягать каждый раз сообщество. То есть мне нуженн алгоритм действий, например 1. сохранить страницу веб как... 2 Открыть ее таким то редактором и посмотреть туда-то 3. на основании этого написать такие то параметры, потому что.... (в разметке html понимаю). Может кому попадался внятный урок как это делать? Потому что длоя меня сейчас это высший пилотаж.... И еще нужно точно так же притянуть нефть brent ну с любого сайта на котором это проще всего сделать на ваше усмотрение. Если напишите мне код то прокомменте пожалуйста что делает какждый из параметров
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.02.2015, 03:56
Ответы с готовыми решениями:

не получается стянуть картинку
вообщем вот есть сайт theexpendablesmovie.net я хочу рипнуть этот шаблон к себе и не...

Стянуть множество к центру тяжести
Задано множество точек. Стянуть это множество к его центру тяжести, уменьшая расстояние между...

Где стянуть cервер J2EE?
Плиз, где и каким образом можно скачать желательно бесплатный сервер J2EE? Дюже хочется...

Вбить текст и стянуть картинку
Собственно сайт на которой вбиваешь текст и получаешь картинку. Как это можно реализовать на ++...

5
11236 / 3602 / 642
Регистрация: 13.02.2009
Сообщений: 10,750
12.02.2015, 11:47 2
Лучший ответ Сообщение было отмечено Dmitry Download как решение

Решение

Visual Basic
1
2
3
4
5
6
7
Function Цена_золота()
    Dim URL, ZEN, XMLHTTP As Object, XX: URL = "http://www.cbr.ru/"
    Set XMLHTTP = CreateObject("MSXML2.XMLHTTP") 'CreateObject("Microsoft.XMLHTTP")
         With XMLHTTP: .Open "GET", URL, False: .send: End With
      XX = Split(Split(XMLHTTP.responsetext, "Золото")(1), "</span>")
      Цена_золота = CDbl(Replace(Split(Replace(XX(0), Chr(34), ""), "nowrap>")(1), " ", ""))
End Function
Добавлено через 7 минут
Код страницы можно посмотреть по ПКМ
В данном варианте разметка html не применяется
Тупо в лоб обрабатывается текст
Можно дописать 3 строчки и ответ запишется в файл.
По тексту страници можно разобрать принцип работы кода

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Function Цена_золота()
    Dim URL, ZEN, XMLHTTP As Object, XX: URL = "http://www.cbr.ru/"
    Set XMLHTTP = CreateObject("MSXML2.XMLHTTP") 'CreateObject("Microsoft.XMLHTTP")
         With XMLHTTP: .Open "GET", URL, False: .send: End With
   '''''''''''''''''''''''''
       Open ActiveWorkbook.Path & "\test.txt" For Output As 1
       Print #1, XMLHTTP.responsetext
       Close 1
   '''''''''''''''''''''''''
      XX = Split(Split(XMLHTTP.responsetext, "Золото")(1), "</span>")
      Цена_золота = CDbl(Replace(Split(Replace(XX(0), Chr(34), ""), "nowrap>")(1), " ", ""))
End Function
1
0 / 0 / 0
Регистрация: 30.01.2015
Сообщений: 16
12.02.2015, 18:16  [ТС] 3
Что такое ПКМ?
Итак я посмотрел код который упал в текст, нужный участок ---
Код
 Золото <ins>Au</ins>
                </td>
                <td>
                  <div class="w_data_wrap"><i class="down" title="- 20,1600">v</i><span class="nowrap">2 603,83</span></div>
и ваш код
Код
XX = Split(Split(XMLHTTP.responsetext, "Золото")(1), "</span>")
Итак, переменная приравнивается к..... Ключевое слово найдено -"Золото" Почему два раза Split? Что делает 1й сплит и что делает 2й Сптит,? что такое (1) ? и что делает вот это - "</span>")[/CODE] ?????

Добавлено через 9 минут
А зачем введена перемнная ZEN? я не вижу ее значний или это не переменная?
0
11236 / 3602 / 642
Регистрация: 13.02.2009
Сообщений: 10,750
12.02.2015, 20:03 4
Лучший ответ Сообщение было отмечено Dmitry Download как решение

Решение

ПКМ -Правая Кнопка Мыша
ZEN - рудимент
1 split разбивает весь текст на массив
что такое (1) - это элемент массива №1, в котором находится нужная нам цена
2 split разбивает первый элемент массива на массив по </span>. В результате в нулевом элементе массива остаётся то , что было между "Зололто" и "</span>"
<ins>Au</ins>
</td>
<td>
<div class="w_data_wrap"><i class="down" title="- 20,1600">v</i><span class="nowrap">2 603,83
Дальше удаляем кавычки (Chr(34)), разбиваем по "nowrap>" и получаем 2 603,83
Осталось удалить пробел и сделать преобразование типов в дабл
1
0 / 0 / 0
Регистрация: 30.01.2015
Сообщений: 16
13.02.2015, 04:18  [ТС] 5
Огромное всем спасибо, разобрался, научился, заставляет только задуматься каким мегамозгом надо обладать чтоб в одну строчку запихивать split replace , я таким мозгом не обладаю, поэтому разбил все по переменным и заодно проверял что имено происходит на каждом этапе. На основании вашей помощи, притянул котировки нефти, так что может кому пригодится мой код в качестве примера
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sub Book()
 
 
Dim Brent As Double
Dim vv
Dim ss
 
Dim URL, XMLHTTP As Object, XX: URL = "http://www.finam.ru/analysis/profile04C11/"
    Set XMLHTTP = CreateObject("MSXML2.XMLHTTP") 'CreateObject("Microsoft.XMLHTTP")
         With XMLHTTP: .Open "GET", URL, False: .send: End With
   '''''''''''''''''''''''''
       ' Open ActiveWorkbook.Path & "\test1.txt" For Output As 1
       ' Print #1, XMLHTTP.responsetext
      ' Close 1
       XX = Split(Split(XMLHTTP.responsetext, "Последняя сделка")(1), "</span>")
       MsgBox XX(0)
       vv = Replace(XX(0), Chr(34), "") ' убираем кавычки - не понятно только зачем
    MsgBox vv
    ss = Split(vv, "issuer-profile-informer-last>")(1) ' отрезаем по informer last  и беем первое значение
    MsgBox ss
       Brent = CDbl(ss)  ' преобразуем строковую переменную в дабл
       Worksheets("Лист1").Range("B3").Value = Brent
            
End Sub
0
11236 / 3602 / 642
Регистрация: 13.02.2009
Сообщений: 10,750
13.02.2015, 09:18 6
убираем кавычки - не понятно только зачем
По тому, что в тексте "nowrap"> - кавычка между "nowrap" и ">"
Можно не убирать, А разбивать по ">"
Но тогда надо будет брать не 1 элемент массива а определять какй с помощью Ubound.
Так как ">" в вірезанной строке 6 штук и в массиве будет 6 єлементов (ну или указать брать не 1 элемент, а 6)
Но в этом случае больше шансов, что изменят какой-то параметр в таблице и функция перстанет работать
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.02.2015, 09:18

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Стянуть информацию с неработающего жесткого на 80Гб.
Please очень помощь нужна. У меня 2 жестких 1 - основной SATA 160 GB, 2 дополнительный - IDE 80 GB...

Стянуть JSON по ссылке с другого сайта
Добрый день В js новенький По вопросу: Нужно организовать ajax запрос к живому сайту который...

Стянуть информацию из таблицы на web-странице
Есть web-страница на ней 2 формы, на второй форме с именем 'Form1' есть 4 таблицы одна под другой....

Можно ли стянуть пакеты с другого дистрибутива?
Здравствуйтя. Хочу на Мандривы 2007 или 2008 поставить некоторые пакеты с Мандривы 2009. Хотел...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.