парсинг HTML

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Invader
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 18.01.2005 (Вт) 4:22
Откуда: Молдавия, Виноград

парсинг HTML

Сообщение Invader » 05.12.2011 (Пн) 9:20

мне необходимо из страницы получить строчки, лежащие внутри тегов<p>.
пишу следующий код:
Код: Выделить всё
Dim myStreamReader As New StreamReader(myHttpWebResponse.GetResponseStream, Encoding.UTF8)
        'TextBox1.Text = myStreamReader.ReadToEnd()
       

        Dim input As String
        Dim pattern As String = "<p>.+?</p>"
        Do While myStreamReader.Peek() >= 0
            input = myStreamReader.ReadLine()
            Dim rgx As New Regex(pattern, RegexOptions.IgnoreCase)
            Dim matches As MatchCollection = rgx.Matches(input)
            If matches.Count > 0 Then
                Console.WriteLine("{0} ({1} matches):", input, matches.Count)
                For Each match As Match In matches
                    TextBox2.Text = TextBox2.Text + "   " + input
                Next
            End If
        Loop
        myStreamReader.Close()


Код сработал, но во первых он выдает мне строчки в месте с тегами <p>, а во вторых, внутри строчек, если встречаются сторонние теги, то он и их пишет в текстбокс.
Предполагаю, что некорректно записал строчку в коде: Dim pattern As String = "<p>.+?</p>"
msdn смотрел, но так и не понял как правильно оформить значение.
2. И ещё вопрос: тег <p> встречается многократно, есть ли возможность отследить пятый тег.
умён и жаден,
характер отсуствует

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4256
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: парсинг HTML

Сообщение iGrok » 05.12.2011 (Пн) 13:12

Возьми нормальный парсер html вместо regexp.
Их море. MSHTML, например. И дальше получай то, что тебе нужно, через DOM.
В этом случае отследить пятый тег, получить конкретное содержимое, и т.п. - не проблема.
label:
cli
jmp label

Invader
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 18.01.2005 (Вт) 4:22
Откуда: Молдавия, Виноград

Re: парсинг HTML

Сообщение Invader » 05.12.2011 (Пн) 17:40

а реальный-рабочий пример упрощенный можно :oops:

перебрал MSHTML не смог запустить, куча ошибок.
Html Agility Pack ни чего не делает, видать тоже изобразил с ошибкой, да и хелп отсуствует.
умён и жаден,
характер отсуствует

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 315
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: парсинг HTML

Сообщение Admiralisimys » 05.12.2011 (Пн) 23:39

На правах блиц вопроса: а для реализации обратной задачи (генерация HTML) существует удобный инструментарий?
Я только до Console.Write(Line) додумался (с дальнейшим запуском приложения VB.NET_APP.exe >my.html), но получается нечто страшное (в плане реализации).
Само построение в виде консольного, с дальнейшим сбросом в файл в приведённом выше примере, устраивает.
Тут смущает громоздкий аргумент Console.Write(Line), но тот же StringBuilder мало чем потенциально поможет, слишком много ручной работы.

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

Re: парсинг HTML

Сообщение FireFenix » 06.12.2011 (Вт) 0:13

Invader писал(а):записал строчку в коде: Dim pattern As String = "<p>.+?</p>"
И ещё вопрос: тег <p> встречается многократно, есть ли возможность отследить пятый тег.

Курить PCRE и мануалы MSDN по синтаксису и использованию RegEx

Admiralisimys писал(а):На правах блиц вопроса: а для реализации обратной задачи (генерация HTML) существует удобный инструментарий?

System.XML.Serialization ?
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Invader
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 18.01.2005 (Вт) 4:22
Откуда: Молдавия, Виноград

Re: парсинг HTML

Сообщение Invader » 14.12.2011 (Ср) 7:34

Раскурил Html Agility Pack и его xpath. Реально спасает, и работает.
умён и жаден,
характер отсуствует

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

Re: парсинг HTML

Сообщение FireFenix » 14.12.2011 (Ср) 20:35

Invader писал(а):Раскурил Html Agility Pack и его xpath. Реально спасает, и работает.

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

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 315
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: парсинг HTML

Сообщение Admiralisimys » 11.02.2012 (Сб) 20:40

Может кому пригодится, вот пример работы с MSHTML
http://stackoverflow.com/questions/5168 ... -in-vb-net
http://www.codeproject.com/Articles/194 ... -Framework
Единственное, смущает версия да и скорость работы (Microsoft.mshtml.dll это ведь COM в .NET), но для внутренних утилит - самое то.


Вернуться в Visual Basic .NET

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

Сейчас этот форум просматривают: Yandex-бот и гости: 4

    TopList