Это для себя заметка, тем, кто в курсе, ничего тут нового нет.
В трейдинге часто необходимо скачивать данные с различных сайтов. Порой для этого необходимо повторить много однотипных действий. Естественно, это удобно автоматизировать. Поскольку данные обычно--числа, то их удобно обрабатывать экселем (это если чисел не очень много. Много--это, например, тиковые данные чего-нибудь типа RI). Известно, что VBA в связке с экселем является очень удобным инструментом для работы с цифрами. Поэтому логично и парсить сайты тоже при помощи экселя.
Есть в экселе очень удобный объект InternetExplorer.Application Он позволяет вполне гибко программным образом управляться с сайтами путем программной работы с Internet Explorer. Можно гулять по сайтам, заполнять и отправлять формы, жать на кнопки, выкачивать любую инфу и вообще неплохо работать с DOMoм.
Какова технология?
1) Надо немного знать VBA (ниже есть примеры, вот в них надо приблизительно понимать что к чему).
2) Немного знать javascript (потому как команды типа ie.document.form.fff.submit--это javascript команды, в VBA они просто перенесены один в один фактически)
3) Естественно, немного знать html--то есть понимать, что такое элемент, тэги, текст, атрибут.
4) Если все это есть, то:
а) Разучиваем команды VBA по работе с InternetExplorer.application и InternetExplorer.application.document. Их немного, на самом деле, почти все необходимое есть в примерах. Навигация, заполнение форм, отправка, нажатие на кнопку, вытягивание nodelist со специфическими тэгами командой getElementsByTagName--вот и все по сути.
б) Открываем интересующий сайт и лезем в DOM. Я использую для этого Google Chrome--вполне удобные там средства разработчика. Также активно пользуемся просмотром кода элемента.
в) Проникаемся сайтом, изучаем, что нам надо. Надо ли вводить данные в формы или просто только парсить. Короче, строим алгоритм того, что надо. Это искусство, оно во многом зависит от создателей сайта. Требует времени и практики.
г) Собственно, делаем работу. Вытянутую инфу лучше просто запомнить на листе. А уж потом отдельным чисто эксельным VBA кодом ее обрабатывать.
Вот хороший пример автоматизации работы IE:
http://www.excely.com/excel-vba/ie-automation.shtml
А вот пример как можно залогиниться на mail.ru (это не мое, нашел в интернетах. Там кривовато, имхо, вместо отправки формы методом submit лучше жать на кнопку методом click для элемента формы <input type=«submit»>. Но работает):
Public Sub EnterToMailRu()
Const conLogin As String = «fff»
Const conPassword As String = «123456»
Dim i As Integer
Dim ie As Object
'Dim varReturn As Variant
Set ie = CreateObject(«InternetExplorer.Application»)
ie.Visible = True
ie.Navigate ("
http://www.mail.ru")
'varReturn = SysCmd(acSysCmdInitMeter, «Entering to Mail.Ru ...», 100)
While CBool(ie.Busy)
i = i + 1
'varReturn = SysCmd(acSysCmdUpdateMeter, Int(i / 30000 * 100))
If i > 29999 Then
'varReturn = SysCmd(acSysCmdClearStatus)
Beep
MsgBox «Something is wrong. Mail.Ru is not accessible», vbCritical, «Mail.Ru»
ie.Quit
Set ie = Nothing
Exit Sub
End If
DoEvents
Wend
'varReturn = SysCmd(acSysCmdClearStatus)
ie.document.Forms.Auth.Login.Value = conLogin
ie.document.Forms.Auth.Password.Value = conPassword
ie.document.Forms.Auth.submit
Set ie = Nothing
End Sub
А вообще, я эксельные таблицы как-то не очень жалую. Имхо, VBA гораздо проще, удобней и быстрее.
Тут вообще главное, имхо, осознать, что такие вещи вообще возможны--а дальше дело техники. И небольшого времени. Вот для этого я и написал эту заметку--чтоб кто-то, кто уже задумывался над такой темой, получил бы знание, что это все реализуемо и несложно.
2) Не, не должен. Ставишь ie.visible=false и все. Никакого окна IE даже не увидишь.
3) Там в коде пишешь типа Do While ie.busy=true Loop и все. Оно будет крутиться в мертвой петле, пока страница не загрузится.
4) Да, есть такие вещи. XMLHTTP вроде, я пользовался этим когда-то. Не помню уже, но от InternetExplorer.Application у меня вроде приятней ощущения остались.