HTML é o núcleo da WEB Todas as páginas que você vê na Internet são HTML, sejam elas geradas dinamicamente por JavaScript, JSP, PHP, ASP ou outras tecnologias WEB. Seu navegador irá analisar o HTML e renderizá-lo para você. Mas e se você mesmo precisar analisar o documento HTML em um programa Java e encontrar determinados elementos, tags, atributos ou verificar se existe um elemento específico? Se você programa em Java há muitos anos, acredito que já deve ter tentado analisar XML e usado analisadores como DOM ou SAX, mas é muito provável que você nunca tenha feito nenhum trabalho de análise de HTML. O que é ainda mais irônico é que, em aplicativos Java, há muito poucos momentos em que você precisa analisar documentos HTML, e isso não inclui Servlets ou outras tecnologias Java WEB. O pior é que o núcleo do JDK não inclui bibliotecas HTTP ou HTML, pelo menos não as conheço. É por isso que, quando se trata de analisar arquivos HTML, muitos programadores Java precisam primeiro consultar o Google para ver como extrair uma tag HTML em Java. Quando tive essa necessidade, acreditei que haveria algumas bibliotecas de código aberto que poderiam conseguir isso, mas não esperava que houvesse uma biblioteca tão legal e totalmente funcional como a JSoup. Ele não apenas suporta a leitura e análise de documentos HTML, mas também permite extrair quaisquer elementos de arquivos HTML, bem como seus atributos e propriedades CSS, e você também pode modificá-los. Com JSoup você pode fazer quase tudo com documentos HTML. Veremos um exemplo de como baixar e analisar um arquivo HTML da página inicial do Google ou qualquer URL em Java.
O que é a biblioteca JSoup
Jsoup é uma biblioteca Java de código aberto que pode ser usada para processar HTML em aplicações práticas. Ele fornece uma API muito conveniente para extração e modificação de dados, aproveitando ao máximo as vantagens dos métodos de estilo DOM, CSS e jquery. Jsoup implementa a especificação WAHTWG HTML5, e o DOM que ele analisa do HTML é exatamente o mesmo analisado por navegadores modernos, como Chrome e Firefox. Aqui estão alguns recursos úteis da biblioteca Jsoup:
1.Jsoup pode obter e analisar HTML de URL, arquivo ou string.
2.Jsoup pode localizar e extrair dados, usando DOM traversal ou seletores CSS.
3. Você pode usar Jsoup para modificar elementos, atributos e texto HTML.
4.Jsoup garante que o conteúdo enviado pelos usuários seja limpo por meio de uma lista de permissões segura para evitar ataques XSS.
5.Jsoup também pode gerar HTML puro.
Jsoup foi projetado para lidar com todos os tipos de HTML diferentes que aparecem na vida real, incluindo HTML correto e válido, bem como coleções de tags incompletas e inválidas. Uma das principais competitividades da Jsoup é a sua robustez.
Usando Jsoup para análise de HTML em Java
Neste tutorial de análise de HTML Java, veremos três exemplos diferentes de uso de Jsoup para analisar e percorrer HTML em Java. No primeiro exemplo, analisaremos uma string HTML, cujo conteúdo é uma tag composta por strings literais em Java. No segundo exemplo, baixaremos o documento HTML da WEB e, no terceiro exemplo, carregaremos um arquivo de amostra HTML login.html para análise. Este arquivo é um exemplo de documento HTML. Ele contém uma tag de título e uma tag div dentro do corpo, que contém um formulário. Possui tags de entrada para obtenção de nomes de usuário e senhas, bem como botões de envio e redefinição para a próxima etapa. É HTML correto e válido, ou seja, todas as tags e atributos estão fechados corretamente. Aqui está nosso arquivo HTML de exemplo:
Copie o código do código da seguinte forma:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<cabeça>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Página de login</title>
</head>
<corpo>
<div id="login" >
<form action="login.do">
Nome de usuário: <input id="nomedeusuário" type="text" /><br>
Senha: <input id="senha" type="senha" /><br>
<input id="enviar" type="enviar" />
<input id="reset" type="reset" />
</form>
</div>
</body>
</html>
Usar Jsoup para analisar HTML é muito simples, você só precisa chamar seu método estático Jsoup.parse() e passar sua string HTML. Jsoup fornece vários métodos parse() sobrecarregados, que podem ler arquivos HTML de strings, arquivos, URIs, URLs e até mesmo InputStreams. Se não for a codificação UTF-8, você também pode especificar a codificação de caracteres para que o arquivo HTML possa ser lido corretamente. Abaixo está uma lista completa de métodos de análise de HTML na biblioteca Jsoup. O método parse(String html) analisa o HTML de entrada em um novo documento. No Jsoup, Document herda de Element, que por sua vez herda de Node. O mesmo TextNode também herda do Node. Contanto que você passe uma string não nula, você definitivamente obterá uma análise bem-sucedida e significativa e obterá um Documento contendo elementos head e body. Depois de obter este Documento, você pode chamar os métodos apropriados em Documento e suas classes pai Element e Node para obter os dados desejados.
Programa Java que analisa documentos HTML
Abaixo está um programa Java completo que analisa strings HTML, arquivos HTML baixados da Internet e arquivos HTML no sistema de arquivos local. Você pode usar o Eclipse IDE ou outro IDE ou até mesmo comandos para executar este programa. No Eclipse, é muito simples. Basta copiar este código, criar um novo projeto Java, clicar com o botão direito no pacote src e colá-lo. O Eclipse criará o pacote correto e o arquivo de origem Java com o mesmo nome, portanto a carga de trabalho será mínima. Se você já possui um projeto de amostra Java, apenas uma etapa será necessária. O programa Java a seguir mostra três exemplos diferentes de análise e passagem de arquivos HTML. No primeiro exemplo, analisamos diretamente uma string com conteúdo HTML, no segundo exemplo analisamos um arquivo HTML baixado de uma URL e no terceiro exemplo carregamos um documento HTML do sistema de arquivos local e o analisamos. O método parse é usado no primeiro e no terceiro exemplos para obter um objeto Document, que você pode consultar para extrair qualquer valor de tag ou valor de atributo. No segundo exemplo, usamos o método Jsoup.connect, que irá criar uma conexão URL, baixar o HTML e analisá-lo. Este método também retornará um Documento, que poderá ser utilizado para consultas posteriores e obtenção do valor de uma tag ou atributo.
Copie o código do código da seguinte forma:
importar java.io.IOException;
importar org.jsoup.Jsoup;
importar org.jsoup.nodes.Document;
importar org.jsoup.nodes.Element;
/**
[*] Programa Java para analisar/ler documentos HTML de arquivo usando a biblioteca Jsoup.
[*] Jsoup é uma biblioteca de código aberto que permite ao desenvolvedor Java analisar HTML
[*] arquivos e extrair elementos, manipular dados, alterar estilo usando DOM, CSS e
[*] Método semelhante ao JQuery.
[*]
[*] @autor Javin Paul
[*]/
classe pública HTMLParser{
public static void main(String args[]) {
// analisa string HTML usando a biblioteca JSoup
String HTMLSTring = "<!DOCTYPEhtml>"
+ "<html>"
+ "<cabeça>"
+ "<title>Exemplo JSoup</title>"
+ "</head>"
+ "<corpo>"
+ "|[b]Olá, Mundo[/b]"
+ ""
+ "</body>"
+ "</html>";
Documento html = Jsoup.parse(HTMLSTring);
String título = html.title();
String h1 = html.body().getElementsByTag("h1").text();
System.out.println("Inserir string HTML no JSoup:" + HTMLSTring);
System.out.println("Após análise, Título: " + título);
System.out.println("Após análise, Título: " + h1);
// JSoup Exemplo 2 - Lendo página HTML da URL
Documento do documento;
tentar {
doc = Jsoup.connect("http://google.com/").get();
título = doc.título();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Jsoup pode ler a página HTML do URL, título: " + título);
// JSoup Exemplo 3 - Analisando um arquivo HTML em Java
//Documento htmlFile = Jsoup.parse("login.html", "ISO-8859-1");
Documento htmlArquivo=nulo;
tentar {
htmlArquivo = Jsoup.parse(new Arquivo("login.html"), "ISO-8859-1");
} catch (IOException e) {
// TODO Bloco catch gerado automaticamente
e.printStackTrace();
} // certo
título = htmlArquivo.título();
Elemento div = htmlFile.getElementById("login");
String cssClass = div.className(); //obtendo o elemento HTML do formulário de classe
System.out.println("Jsoup também pode analisar arquivos HTML diretamente");
System.out.println("título: " + título);
System.out.println("classe da tag div: " + cssClass);
}
}
Saída:
Copie o código do código da seguinte forma:
Insira string HTML no JSoup:<!DOCTYPE html><html><head><title>Exemplo JSoup</title></head><body><table><tr><td><h1>HelloWorld</h1> </tr></table></body></html>
Após a análise, Título: Exemplo JSoup
Após a análise, título: HelloWorld
Jsoup pode ler a página HTML do URL, título: Google
Jsoup também pode analisar o arquivo HTML diretamente, título: Página de login
classe de tag div: simples
A vantagem do Jsoup é que ele é muito robusto. O analisador HTML Jsoup analisará o HTML fornecido da maneira mais limpa possível, independentemente de o HTML estar bem formado. Ele pode lidar com erros como tags não fechadas (por exemplo, Java <p>Scala para <p>JavaScala), tags implícitas (por exemplo, um simples |Java é ótimo embrulhado em |) e sempre pode criar uma estrutura de documento de saída (HTML incluindo cabeça e corpo, e apenas os elementos corretos serão incluídos na cabeça). É assim que o HTML é analisado em Java. Jsoup é uma biblioteca de código aberto excelente e robusta que torna muito simples a leitura de documentos HTML, fragmentos de corpo, strings HTML e a análise de conteúdo HTML diretamente da WEB. Neste artigo aprendemos como obter uma tag HTML específica em Java, pois no primeiro exemplo extraímos o valor das tags title e H1 para o texto, e no terceiro exemplo aprendemos como obtê-lo através de Extrair propriedades CSS para obtenha valores de propriedade de tags HTML. Além do poderoso método html.body().getElementsByTag("h1").text() no estilo jQuery, você também pode extrair tags HTML arbitrárias e também fornece funções como Document.title() e Element.className( ) Método conveniente, você pode obter rapidamente o título e a classe CSS. Espero que você se divirta com o JSoup e veremos mais alguns exemplos dessa API em breve.