anatolyutkin
anatolyutkin личный блог
05 февраля 2015, 17:48

Как парсить сайты при помощи экселя VBA

Это для себя заметка, тем, кто в курсе, ничего тут нового нет. 

В трейдинге часто необходимо скачивать данные с различных сайтов. Порой для этого необходимо повторить много однотипных действий. Естественно, это удобно автоматизировать. Поскольку данные обычно--числа, то их удобно обрабатывать экселем (это если чисел не очень много. Много--это, например, тиковые данные чего-нибудь типа 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
 
27 Комментариев
  • shprots
    05 февраля 2015, 18:02
    Мне пригодится, спасибо :)
  • Reshpekt Fund Russia ☮
    05 февраля 2015, 18:13
    Видимо это полезная штука, когда есть готовая таблица с формулами и нужно в неё импортировать по-быстрому данные какие-то из ынтырнэтов.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн