HTMLParser.bas?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

HTMLParser.bas?

Сообщение kuhtiov » 13.07.2010 (Вт) 9:26

Ребят, есть у вас пример для работы с модулем HTMLParser.bas. Задача отпарсить страницу и перенести данные в таблицу

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: HTMLParser.bas?

Сообщение Andrey Fedorov » 13.07.2010 (Вт) 19:42

kuhtiov писал(а):Ребят, есть у вас пример для работы с модулем HTMLParser.bas. Задача отпарсить страницу и перенести данные в таблицу


Непонятно что за модуль и на фиг он нужен, когда есть нормальный родной родная Microsoft HTML Object Library - все парсится на ура...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: HTMLParser.bas?

Сообщение kuhtiov » 14.07.2010 (Ср) 11:49

Вот только я не могу разобраться с этим компонентом. Можете объяснить, что делает например этот код?
Код: Выделить всё
Dim s As String
Dim i As Integer
For i = 0 To WB.document.Forms(0).length - 1
s = s & "Object name =""" & WB.document.Forms(0).Item(i).Name & """" & vbCrLf & "Object value =""" & WB.document.Forms(0).Item(i).Value & """" & vbCrLf & "Object type =""" & WB.document.Forms(0).Item(i).Type & """" & vbCrLf & vbCrLf
Next
MsgBox s


формирование массива s мне не понятно.
и как мне например из этого выдрать название и все остальное?
Код: Выделить всё
<table width="100%" cellpadding=4>

    <tr>
    <th width="15%">Ящик</th>
    <th width="15%">Дата</th>
    <th width="10%">Кб</th>
    <th width="10%">Писем</th>

    <th>Max,Кб</th>
    </tr>        <tr>
        <td align=left>adm@mail.ru</td>


Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: HTMLParser.bas?

Сообщение Andrey Fedorov » 15.07.2010 (Чт) 4:51

kuhtiov писал(а):и как мне например из этого выдрать название и все остальное?
Код: Выделить всё
<table width="100%" cellpadding=4>

    <tr>
    <th width="15%">Ящик</th>
    <th width="15%">Дата</th>
    <th width="10%">Кб</th>
    <th width="10%">Писем</th>

    <th>Max,Кб</th>
    </tr>        <tr>
        <td align=left>adm@mail.ru</td>



Кусочек кода:

Код: Выделить всё
        For Each HTMLTable1 In HTMLDocument1.All.tags("TABLE")
            If HTMLTable1.className = "titelbalk" Then
                If HTMLTable1.cells.Item(0).All.Item(0).nodeName = "H2" Then
                    sH1 = HTMLTable1.cells.Item(0).All.Item(0).innerText
                    If HTMLTable1.cells.Item(0).All.Item(1).nodeName = "A" Then
                        s = HTMLTable1.cells.Item(0).All.Item(1).pathname
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: HTMLParser.bas?

Сообщение kuhtiov » 15.07.2010 (Чт) 5:38

Все равно логику не понял, как происходит парсинг.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: HTMLParser.bas?

Сообщение Andrey Fedorov » 15.07.2010 (Чт) 13:37

kuhtiov писал(а):Все равно логику не понял, как происходит парсинг.


Да что там не понять?

У документа есть таблицы, у таблиц строки, у строк ячейки...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: HTMLParser.bas?

Сообщение Andrey Fedorov » 15.07.2010 (Чт) 13:57

Держи пример на твоем шаблоне:

Код: Выделить всё
Option Explicit

Public Sub Main()
    Dim hd As Object
    Dim sss As String
   
    sss = "<table width=""100%"" cellpadding=4>" & vbCrLf _
            & "<tr>" & vbCrLf _
                & "<th width=""15%"">Ящик</th>" & vbCrLf _
                & "<th width=""15%"">Дата</th>" & vbCrLf _
                & "<th width=""10%"">Кб</th>" & vbCrLf _
                & "<th width=""10%"">Писем</th>" & vbCrLf _
                & "<th>Max,Кб</th>" & vbCrLf _
            & "</tr>" & vbCrLf _
        & "<td align=left>adm@mail.ru</td></table>" & vbCrLf
   
    Set hd = CreateObject("HTMLFile")
    hd.Clear
       
    hd.Open
    hd.Write sss
   
    ParseHTML hd
End Sub

Private Sub ParseHTML(hd As MSHTML.HTMLDocument)
    Dim ht As MSHTML.HTMLTable, hr As MSHTML.HTMLTableRow, hc As MSHTML.HTMLTableCell
    Dim it As Long, ir As Long, ic As Long

    Debug.Print "-----------"
    For Each ht In hd.All.tags("TABLE")
        it = it + 1: ir = 0
        Debug.Print "Table " & it
        For Each hr In ht.rows
            ir = ir + 1: ic = 0
            Debug.Print "  Row " & ir
            For Each hc In hr.cells
                ic = ic + 1
                Debug.Print "    Cell " & ic & " :   " & hc.innerText
            Next hc
        Next hr
    Next ht
End Sub


На выходе получаем:
Код: Выделить всё
-----------
Table 1
  Row 1
    Cell 1 :   Ящик
    Cell 2 :   Дата
    Cell 3 :   Кб
    Cell 4 :   Писем
    Cell 5 :   Max,Кб
  Row 2
    Cell 1 :   adm@mail.ru


Правда просто? :lol:
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: HTMLParser.bas?

Сообщение FireFenix » 15.07.2010 (Чт) 15:28

kuhtiov писал(а):Все равно логику не понял, как происходит парсинг.

Есть 2 подхода для работы с html информацией
1) Работать с объектной моделью DOM (http://ru.wikipedia.org/wiki/Document_Object_Model), которую строит браузер при получении странички
2) Работать с текстом странички

Парсинг или регулярки нужны для 2го метода, а если у нас класс или браузер создаёт DOM, то мы можем работать с html элементами через DOM как с набором классов, что и делает товарищ Andrey Fedorov
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: HTMLParser.bas?

Сообщение Andrey Fedorov » 15.07.2010 (Чт) 15:58

FireFenix писал(а):Парсинг или регулярки нужны для 2го метода, а если у нас класс или браузер создаёт DOM, то мы можем работать с html элементами через DOM как с набором классов, что и делает товарищ Andrey Fedorov


Все верно.

Кстати, в изучении данного дела очень помогает если выбрать в меню следующий пункт:

Изображение
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 84

    TopList