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 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: Visual Studio 2013 Express for Windows Desktop
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. Depois, a partir da ToolBox, inclua no formulário os controles abaixo:
- 1 TextBox – txtURL
- 1 Button – btnHTML
- 1 TextBox – txtHTML , Multiline = True, ScrollBars =Both
- 2 Buttons – btnExtraiLinks e btnExtraiImagens
- 2 ListBox – lbLinks e lbImagens
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:
Para os links:
objRegEx = New Regex("a.*href\s*=\s*(?:""(?<1>[^""]*)""|(?<1>\S+))", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
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.
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:
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:
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