Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Как вырезать участок (класс) из HTML на vb 6.0? Добавлено: 28.05.09 11:45  

Автор вопроса:  Lucifer
Есть сайт: http://161.ru/weather/Rostov-na-Donu
Надо из него вырезать участок с погодой. Я так понял, что этот участок начинается с <div class="weather"> (через MS Front Page). Тока вот как бы этот участок вырезать автоматически?
Объясню смысл программы: страницы закачивается через MS Internet Transfer и сохраняется в файл. Потом она должна загрузиться в программу (через IE Control), причём только тот участок кода. Я так понял, что сначала надо тупо получить текст HTML страницы, и уже как то вырезать текст. Предполагаю, что надо сначала получить количество строк, затем в цикле идти по строкам и в каждой строке искать подстроку "<div class=""weather""", запомнить номер строки, в которой найдена эта подстрока и положение начала. Затем как то надо найти конец этого класса. Только вот как? Кто нибудь может объяснить? Или может нужно по другому сделать? Может даже есть готовые контролы для подобных задач?

Ответить

  Ответы Всего ответов: 9  

Номер ответа: 1
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #1
Добавлено: 28.05.09 11:51
Метод InStr(начальная позиция, строка, подстрока) ищет позицию подстроки в строке начиная с указанной начальной позиции, если она есть, или возвращает 0, если ее нет.
Метод Mid$(Строка, начальная позиция, длина) возвращает кусок строки с начальной позиции длинной "длина".

Двух этих методов тебе для парсинга поуши хватит. Текст, сгопаный МСТрансфером обрабатываешь этими методами, вырезаешь нужный кусок, суешь в файл и загружаешь в барузере.

Ответить

Номер ответа: 2
Автор ответа:
 Lucifer



Вопросов: 1
Ответов: 2
 Профиль | | #2 Добавлено: 28.05.09 11:58
Кстати, а надо беспокоить о тегах <HTML>, <HEAD>, <BODY>, и т.д.? Если я тупо вставлю в htm файл кусок, он точно будет работать без основных тегов? Или же надо о них позаботиться?

Ответить

Номер ответа: 3
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #3
Добавлено: 28.05.09 12:28
работать будет. Хотя можешь тупо именно эти три тега открыть в начале и закрыть в конце - так, для надежности.

Ответить

Номер ответа: 4
Автор ответа:
 Александр



ICQ: 414713812 

Вопросов: 16
Ответов: 49
 Профиль | | #4 Добавлено: 28.05.09 12:38
у меня нету сча времени писать тебе под твой участко.. скажу как я это делал, сам разберёшся:
вот тебе функция которая на диске сохраняет указанный адрес
  1. Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
  2. Public Function DownloadFile(URL As String, LocalFilename As String) As Boolean
  3.     Dim lngRetVal As Long
  4.     lngRetVal = URLDownloadToFile(0, URL, LocalFilename, 0, 0)
  5.     If lngRetVal = 0 Then DownloadFile = True
  6. End Function


затем чтото типа того:
  1. Open pat For Input As #1
  2. Do While Not EOF(1)
  3. Line Input #1, vr
  4. и тут уже ищешь позицию где начинается погода и заканчивается а затем вырезаешь этот кусок при помощи Mid$
  5. Loop
  6. Close #1

Ответить

Номер ответа: 5
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #5
Добавлено: 28.05.09 12:56
не люблю URLDownloadToFile, тормозная штука...
Можно после <div class="weather"> искать </div> на убывание, второй по счету будет конечным.

Ответить

Номер ответа: 6
Автор ответа:
 Lucifer



Вопросов: 1
Ответов: 2
 Профиль | | #6 Добавлено: 28.05.09 18:16
Я так понимаю, это HTML парсинг... А есть ли готовый компонент, чтобы туда тупа надо вписывать какой блок ищу, а он выводил бы его?...

Ответить

Номер ответа: 7
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #7
Добавлено: 28.05.09 21:45
Загружаешь страницу В Переменную S as String

Вот код функции, которая полностью выдирает класс погоды
  1.  
  2. Function GetTeg(S As String)
  3. Dim I As Long, Fg As Long, N As Long
  4.   ' Начало класса погоды
  5.   I = InStr(1, S, "<div class=" & Chr$(34) & "weather" & Chr$(34) & ">")
  6.   Fg = I
  7.   For N = 0 To 1 ' Ищем второй div
  8.     Fg = InStr(Fg, S, "</div>") + 1
  9.   Next N
  10.   GetTeg = Mid$(S, I, Fg - I + 5)
  11. End Function

Ответить

Номер ответа: 8
Автор ответа:
 Александр



ICQ: 414713812 

Вопросов: 16
Ответов: 49
 Профиль | | #8 Добавлено: 28.05.09 22:44
ну ка AWP посоветуй что лучше URLDownloadToFile????? оч интересно)

Ответить

Номер ответа: 9
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #9
Добавлено: 28.05.09 23:13
Я винсоком дёргаю страницы.


  1.  
  2. 'примерная функция для получения заголовка.
  3. Function getFileHead(URL)
  4.   S = "GET " & URL & " HTTP/1.0" & vbCrLf
  5.   S = S & "USER-AGENT: Nlife.h18.ru/1.00 (WinNT; I)" & vbCrLf
  6.   S = S & "Accept: */*" & vbCrLf
  7.   S = S & "Accept-Language: ru,en-us;q=0.7,en;q=0.3" & vbCrLf
  8.   S = S & vbCrLf
  9.   getFileHead = S
  10. End Function
  11. ' Соединяемся
  12. Winsock1.Connect
  13.  
  14. ' Отправляем заголовок
  15. Private Sub Winsock1_Connect()
  16.   Winsock1.SendData getFileHead("Адрес")
  17. End Sub
  18.  
  19. ' Получаем данные
  20. Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  21.  Dim strData As String
  22.  Winsock1.GetData strData
  23. End Sub
  24.  
  25. ' Ну и на всякий случай
  26. Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
  27. If Winsock1.State <> sckClosed Then Winsock1.Close
  28. Winsock1.Accept requestID
  29. End Sub

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам