VB .NET - Extraindo HTML e Convertendo para texto - I
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. |
Neste
artigo irei mostrar como podemos efetuar o tratamento do código HTML obtido em
páginas da internet usando os
recursos da classe WebClient e expressões regulares via classe Regex.
Obtendo informações da Web
A plataforma .NET fornece duas classes presentes no namespace System.NET que podemos usar para podermos interagir diretamente com servidores usando HTTP. São elas:
WebRequest - Realiza uma requisição para uma URI - Uniform Resource Identifier.
WebResponse - Fornece uma resposta a partir de uma URI - Uniform Resource Identifier
Para podermos usar os recursos da classe
WebRequest podemos usar as classes HttpWebRequest e
HttpWebResponse que fornecem implementações específicas destas classes.
Dessa forma a classe HttpWebRequest
fornece suporte para as propriedades e métodos definidos na classe WebRequest e
para propriedades e métodos adicionais que permitem interagir usando o protocolo
HTTP.
- O método Create() de uma instância
da classe WebRequest para iniciar os objetos HttpWebRequest;
- O método GetResponse() realiza uma requisição síncrona através da
propriedade RequestUri, retornando um objeto HttpWebResponse contendo a resposta
de uma requisição;
- O método GetRequestStream() obtém um objeto stream usado para
escrever os dados da requisição;
Usando estas duas classes, temos tudo que precisamos para fazer o download de
uma página Web completa em um stream ou postar dados para uma URL.
Expressões Regulares
A plataforma .NET vem com um poderoso mecanismo de expressões regulares que é acessível a qualquer linguagem da plataforma: VB.NET, C#, etc.
Uma expressão regular ou regex para simplificar, é um modelo que descreve uma certa quantidade de texto. A expressão regular mais simples consiste de um único caractere. Ex: a. Este padrão irá coincidir com a primeira ocorrência do caractere em uma string. Se a string for "Isto é apenas um teste" a primeira ocorrência será a letra a antes da letra p (de apenas).
As expressões regulares possuem 11 caracteres especiais conhecidos como meta caracteres, são eles:
Para usar qualquer um destes caracteres como um literal em uma expressão regular temos que usar um caractere de escape (\). Assim se você deseja escrever 1+1=2 deverá usar 1 \+ 1=2 de outra forma o caractere + terá um significado especial.
Regex é a classe mais importante deste grupo e qualquer código para um expressão regular instancia pelo menos um objeto desta classe ( ou usar um dos métodos estáticos da classe Regex). Você instancia este objeto passando o padrão de critério escrito no formato especial da linguagem usada para expressão regulares. No exemplo a seguir a expressão regular define qualquer grupo de dois caracteres consistindo de uma vogal seguida por um dígito:
Dim re As New Regex("[aeiou\d")
O método de localização do objeto Regex aplica a expressão regular a string passada como argumento; e retorna um objeto do tipo MatchCollection, uma coleção somente-leitura que representa todas as ocorrências coincidentes com o critério usado.
A classe Regex representa o mecanismo para tratar as expressões regulares na plataforma .NET . Ela pode ser usado para analisar rapidamente grandes quantidades de texto para encontrar padrões de caracteres específicos; para extrair, editar, substituir ou excluir substrings de texto, ou para adicionar as strings extraídas a uma coleção para gerar um relatório.
Para usar as expressões regulares, definimos o padrão desejado para identificar em um fluxo de texto usando a sintaxe documentada nos elementos de linguagem das expressões regulares. A seguir instanciamos um objeto Regex. Finalmente, executamos alguma operação, como a substituição de texto que corresponda ao padrão de expressão regular, ou a identificação de um padrão coincidente.
A enumeração RegexOptions fornece valores enumerados para usar para definir opções de expressões regulares. Os valores possíveis são:
Valor | Descrição |
None | Especifica que nenhuma opção foi definida |
IgnoreCase | Especifica a comparação case-sensitive |
ExplicitCapture |
Especifica que
as únicas capturas válidas são explicitamente nomeadas ou grupos
numerados do formulário (? <name> ...). Isso permite que os parênteses sem nome atuem como grupos de não captura, sem a deselegância sintática da expressão (:? ...). |
Singleline | Especifica modo linha-única. Muda o significado do ponto (.) Para que coincida com todos os caracteres (em vez de cada caractere, exceto \ n). |
IgnorePatternWhitespace | Elimina espaços em branco sem escape do padrão e permite comentários marcados com #. No entanto, o valor IgnorePatternWhitespace não afeta ou elimina o espaço em branco nas classes de caracteres. |
ECMAScript | Permite o comportamento compatível com ECMAScript para a expressão. Este valor pode ser usado apenas em conjunto com os valores IgnoreCase, Multiline, e Compiled. A utilização deste valor com quaisquer outros valores gera uma excepção. |
CultureInvariant | Especifica que as diferenças culturais na linguagem será ignorada. |
Compiled | Especifica que a expressão regular é compilada para um assembly. Isto obtém um rendimento melhor na execução, mas aumenta o tempo de inicialização. Este valor não deve ser atribuído à propriedade Opções ao chamar o método CompileToAssembly. |
Multiline | Modo multilinha. Altera o significado de ^ e $ para que eles correspondam ao início e final, respectivamente, de qualquer linha, e não apenas o início e o fim de toda a cadeia. |
RightToLeft | Especifica que a pesquisa será da direita para a esquerda em vez de da esquerda para a direita. |
Recursos usados :
Criando o projeto no VS 2013 Express Edition
Abra o VS 2013 Express for Windows desktop e clique em New Project;
A seguir selecione Visual Basic -> Windows Forms Application;
Informe o nome Tratando_HTML e clique no botão OK;
A seguir a partir da ToolBox inclua os seguintes controles no formulário do projeto:
1 TextBox - txtURL
1 Button - btnHTML
1 TextBox - txtHTML , Multiline = True , ScrollBars =Both
1 Button - btnHTML_Texto
1 TextBox - txtTexto , Multiline = True, ScrollBars =Both
Disponha os controles no formulário conforme o leiaute da figura abaixo:
1- Obtendo código HTML e convertendo para texto
|
|
O objetivo e obter código HTML de uma URL informada e em seguida converter o código HTML para texto.
O HTML é obtido da URL usando o método DownloadData
UTF8Encoding().GetString(objWC.DownloadData(URL)) A conversão do HTML para texto é feito via expressões regulares:
|
O código do
projeto é exibido abaixo:
Private Sub btnHTML_Click(sender As Object, e As EventArgs) Handles btnHTML.Click
Try
txtHTML.Text = pegaHTML(txtURL.Text)
Catch ex As Exception
MessageBox.Show(" Erro : " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Private Sub btnHTML_Texto_Click(sender As Object, e As EventArgs) Handles btnHTML_Texto.Click
Try
txtTexto.Text = removeTags(txtURL.Text)
Catch ex As Exception
MessageBox.Show(" Erro : " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Public Function removeTags(ByVal HTML As String) As String
Try
'Remove as tags do HTML
Return Regex.Replace(HTML, "<[^>]*>", "")
Catch ex As Exception
MessageBox.Show(" Erro : " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Function
Public Function pegaHTML(ByVal URL As String) As String
' Retorna o HTML da URL informada
Dim objWC As New System.Net.WebClient
Return New UTF8Encoding().GetString(objWC.DownloadData(URL))
End Function
|
Estamos usando dois métodos :
removeTags(HTML) - remove as tags do HTML
pegaHTML(URL) - retorna o HTML para a url informada
Executando o projeto obtemos:
Fica como tarefa para você realizar um ajuste mais fino na conversão do código HTML para texto usando as expressões regulares. |
Na segunda parte do artigo eu vou mostrar com podemos extrair links e imagens do código HTML usando expressões regulares.
Pegue a primeira parte do projeto aqui : WebBrowser_1.zip
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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
TreeView - Arrastar e Soltar (Drag and Drop) - Macoratti.net