Это для себя заметка, тем, кто в курсе, ничего тут нового нет.
В трейдинге часто необходимо скачивать данные с различных сайтов. Порой для этого необходимо повторить много однотипных действий. Естественно, это удобно автоматизировать. Поскольку данные обычно--числа, то их удобно обрабатывать экселем (это если чисел не очень много. Много--это, например, тиковые данные чего-нибудь типа 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
1) Ползем сюда: smart-lab.ru/people/
2) Копируем мышью и вставляем куда-нибудь.
3) ....
4) Профит :)
Применение описанного в моей заметке:
1) Ползем сюда: smart-lab.ru/people/
2) Лезем в код элемента Мартынова. Видим что-то такое:
3) Видим, что можно привязаться к тегу <td с атрибутом class=«user», «strength» и «rating».
4) Думаем, как это реализовать (думаю, это легко, я бы за часок-другой управился бы. С непривычки уйдет денек-другой). Примеры в помощь.
5) ...
6) Профит.