VB .NET - Tratando código HTML (Extraindo Links e Imagens) - II


 

No artigo de hoje vou mostrar como podemos realizar o tratamento do código HTML obtido a partir de uma web page, realizando tarefas como obter o HTML, converter para texto, extrair links e extrair imagens.

 

Na primeira parte do artigo mostrei como obter o HTML de páginas web e converter o código para texto e agora veremos como extrair links e imagens do HTML obtido.

 

Recursos usados :

Extraindo Imagens e links do código HTML

Abra o projeto Tratando_HTML criado no artigo anterior no VS 2013 Express for Windows desktop e a seguir clique no menu PROJECT.

Seleciona a opção PROJECT - Add Windows Forms e aceite o nome padrão Form2.vb;

e a seguir, a partir da ToolBox, inclua no formulário os controles abaixo:

Disponha os controles conforme o leiaute da figura abaixo:

 

Os namespaces usados o projeto são:

Imports System.Text.RegularExpressions
Imports System.text
Imports System.Net

O métodos extraiLinks e extraiImagens realizam todo o trabalho de extração.

Novamente estamos usando o recurso oferecido pelas expressões regulares:

 1- para os links:

 objRegEx = New Regex("a.*href\s*=\s*(?:""(?<1>[^""]*)""|(?<1>\S+))", RegexOptions.IgnoreCase Or RegexOptions.Compiled)

 2- para as imagens:

 objRegEx = New Regex("img.*src\s*=\s*(?:""(?<1>[^""]*)""|(?<1>\S+))", RegexOptions.IgnoreCase Or RegexOptions.Compiled)

 

 

O código do botão para obter o HTML da página é igual ao usado no item deste artigo (método pegaHTML() ) e portanto eu não vou repetir aqui esse código.

 

1- Extrair links do HTML

 

No evento Click do botão - Extrair Links do HTML - inclua o código abaixo:

 

 Private Sub btnExtraiLinks_Click(sender As Object, e As EventArgs) Handles btnExtraiLinks.Click
        Dim contador As Integer
        Try
            Dim arrLinks As ArrayList = extraiLinks(txtHTML.Text)
            ' extrai os links
            For contador = 0 To arrLinks.Count - 1
                lbLinks.Items.Add(arrLinks(contador).ToString)
            Next
        Catch ex As Exception
            MessageBox.Show(" Erro : " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
 End Sub

 

No código acima estamos usando o método extraiLinks() passando o HTML retornado da página web.

 

O código deste método é visto abaixo:

 

 Public Function extraiLinks(ByVal HTML As String) As ArrayList
        Dim objRegEx As Regex
        Dim objMatch As Match
        Dim arrLinks As New ArrayList
        Dim strMatch As String
        Try
            ' Cria uma expressão regular
            objRegEx = New Regex("a.*href\s*=\s*(?:""(?<1>[^""]*)""|(?<1>\S+))", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
            ' procura no HTML
            objMatch = objRegEx.Match(HTML)
            ' extrai Links
            While objMatch.Success
                strMatch = objMatch.Groups(1).ToString
                arrLinks.Add(strMatch)
                objMatch = objMatch.NextMatch()
            End While
            ' retorna o resultado
            Return arrLinks
        Catch ex As Exception
            Throw ex
        End Try
    End Function

 

Executando o projeto, acessando uma página web e obtendo o seu código HTML; após clicar no botão de comando - Extrair Links do HTML -  iremos obter o seguinte resultado :

 

 

2- Extrair Imagens do HTML

 

No evento Click do botão - Extrair Imagens do HTML - inclua o código abaixo:

 

 Private Sub btnExtraiImagens_Click(sender As Object, e As EventArgs) Handles btnExtraiImagens.Click
        Dim contador As Integer
        Try
            Dim arrImagens As ArrayList = extraiImagens(txtHTML.Text)
            ' extrai as imagens
            For contador = 0 To arrImagens.Count - 1
                lbImagens.Items.Add(arrImagens(contador).ToString)
            Next
        Catch ex As Exception
            MessageBox.Show(" Erro : " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

 

No código acima estamos usando o método extraiImagens() passando o HTML retornado da página web.

 

O código deste método é visto abaixo:

 

  Public Function extraiImagens(ByVal HTML As String) As ArrayList
        Dim objRegEx As Regex
        Dim objMatch As Match
        Dim arrImagens As New ArrayList
        Dim strMatch As String
        Try
            ' Cria uma expressão regular
            objRegEx = New Regex("img.*src\s*=\s*(?:""(?<1>[^""]*)""|(?<1>\S+))", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
            ' procura no HTML
            objMatch = objRegEx.Match(HTML)
            ' Extrai as imagens
            While objMatch.Success
                strMatch = objMatch.Groups(1).ToString
                arrImagens.Add(strMatch)
                objMatch = objMatch.NextMatch()
            End While
            ' retorna o resultado
            Return arrImagens
        Catch ex As Exception
            Throw ex
        End Try
    End Function

 

Executando o projeto, acessando uma página web e obtendo o seu código HTML; após clicar no botão de comando - Extrair Imagens do HTML -  iremos obter o seguinte resultado :

 

 

3 - Criando um atalho nos Favoritos

 

Você pode facilmente criar atalhos nos seus Favoritos usando código VB.NET. 

 

A função CriarAtalho, cujo código é exibido a seguir, faz exatamente isto. Ela deve receber o título que será usado para nomear o atalho criado e a URL para acessá-lo.


O namespace usado é System.IO de onde usamos a classe StreamWriter.

 

Também estamos usando a classe Environment para obter a pasta favoritos e classe File para criar o atalho.

 

Public Sub CriarAtalho(ByVal Titulo As String, ByVal URL As String)

 

Try
    ' Cria um atalho na pasta favoritos do usuário

       Dim favoritos As String


    ' Retorna a pasta favoritos

    favoritos = System.Environment.GetFolderPath(Environment.SpecialFolder.Favorites)


    'Cria um atalho baseado no titulo

        Dim objWriter As StreamWriter = File.CreateText(favoritos & "\" & Titulo & ".url")


    'Escreve a URL para o arquivo

    objWriter.WriteLine("[InternetShortcut]")

    objWriter.WriteLine("URL=" & URL)


    ' Fecha o arquivo

    objWriter.Close()

Catch ex As Exception

     Throw ex

End Try


End Sub

 

Assim para criar um atalho nos favoritos para o site do Macoratti podemos usar a função fazendo a seguinte chamada:

CriarAtalho("Macoratti", "http://www.macoratti.net")

Espiando a pasta Favoritos verificamos o atalho criado:


Você pode implementar da forma que desejar usando formulários Windows e o seu talento...

 

Aguarde em breve mais artigos sobre os novos recursos VB.NET. Até breve...

 

Pegue o projeto completo aqui : Tratando_HTML.zip
 

Todo aquele que prevarica, e não persevera na doutrina de Cristo, não tem a Deus. Quem persevera na doutrina de Cristo, esse tem tanto ao Pai como ao Filho.
2 João 1:9

 

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti