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
    Видимо это полезная штука, когда есть готовая таблица с формулами и нужно в неё импортировать по-быстрому данные какие-то из ынтырнэтов.
  • broker25
    05 февраля 2015, 20:30
    да, помню был удивлен, обнаружив, что для парсинга 2000-й эксель гораздо лучше чем 2003, в котором часть функций просто отключили
  • aka
    05 февраля 2015, 21:21
    … удобно искать куски кода по интересующим ситуациям, тегам и пр. на www.planetaexcel.ru/www.sql.ru/forum — тоже богатый ресурс…
  • imitator
    05 февраля 2015, 22:19
    Тут www.excelvba.ru/code есть интересные решения
  • Cheshirscy
    05 февраля 2015, 22:20
    Не умничаю, но советую. Експлорером шерстить инет, не очень быстрый способ. Во-первых вместе с информативным html тащит еще и скрипты и стили, а главное картинки. Даже при скоростном и безлимитном инете, напрасная трата ресурсов и времени. 2 експлорер должен быть видимым, а это не естетично. 3 не забывай, что придется весь код перекручивать, т.к перед разбором страницы надо дождаться ее загрузки и уже в обработке этого события разбиратт. Есть 2 достуных на любой винде Com объекта xmlhttprequest и htmlfile
    • Cheshirscy
      05 февраля 2015, 22:22
      Cheshirscy, название объектов точно не помню, но если интересно могу уточнить
      • aka
        05 февраля 2015, 23:44
        anatolyutkin, "… от InternetExplorer.Application у меня вроде приятней ощущения остались" — аналогично… дальше примеров с XMLHTTP и т.п. дело не пошло, а IE через OLE — милое дело…
    • aka
      05 февраля 2015, 23:41
      Cheshirscy, "… а главное картинки..." — отключается в настройках…
  • GSV_pusher
    13 февраля 2015, 16:23
    Из рассылки узнал об этом топике. Спасибо, автор! Реально полезная инфа
  • Deamoniy Steslavovich
    14 февраля 2015, 03:31
    VBA еще жив???
    • aka
      18 февраля 2015, 13:34
      Станислав Дорошин, конечно… это навык тысяч людей, что ему сделается…

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

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