JavaRush /Blogue Java /Random-PT /3 exemplos de como analisar um arquivo HTML em Java usand...
Sdu
Nível 17

3 exemplos de como analisar um arquivo HTML em Java usando Jsoup

Publicado no grupo Random-PT
3 exemplos de como analisar um arquivo HTML em Java usando Jsoup - 1HTML é o núcleo da WEB, todas as páginas da Internet que você vê, sejam elas geradas dinamicamente usando JavaScript, JSP, PHP, ASP ou outras tecnologias da web, são baseadas em HTML. Na verdade, seu navegador analisa o HTML e o exibe de uma maneira que seja conveniente para você. Mas e se você precisar analisar um documento HTML e encontrar algum elemento, tag, atributo nele ou verificar se um elemento específico existe ou não usando um programa Java. Se você fosse programador Java há vários anos, tenho certeza de que teria feito análise XML usando analisadores como DOM ou SAX. Mas, ironicamente, há momentos em que você precisa analisar um documento HTML de um aplicativo Java básico que não contém Servlets e outras tecnologias Web Java. Além disso, o Core JDK também não contém bibliotecas HTTP ou HTML. É por isso que, quando se trata de analisar um arquivo HTML, muitos programadores Java perguntam ao Google como obter o valor de uma tag HTML em Java. Quando me deparei com isso, tive certeza de que a solução seria uma biblioteca de código aberto que implementasse a funcionalidade que eu precisava, mas não sabia que seria tão maravilhosa e rica em recursos quanto o Jsoup. Ele não apenas fornece suporte para leitura e análise de arquivos HTML, atributos, classes CSS no estilo JQuery, mas ao mesmo tempo permite modificá-los. Usando Jsoup você pode fazer o que quiser com um documento HTML. Neste artigo, analisaremos um arquivo HTML e encontraremos os nomes e atributos das tags. Também veremos exemplos de download e análise de HTML de um arquivo e de qualquer URL, como a página inicial do Google.

O que é Jsopa

Jsoup é uma biblioteca Java de código aberto para trabalhar com HTML real. Ele fornece uma API muito conveniente para recuperar e manipular dados usando as melhores técnicas de DOM, CSS e jQuery. Jsoup implementa a especificação WHATWG HTML5 e analisa HTML no mesmo DOM que navegadores modernos como Chrome e Firefox fazem. Aqui estão alguns dos recursos úteis da biblioteca Jsoup:
  • Jsoup pode extrair e analisar HTML de uma URL, arquivo ou string.
  • Jsoup pode encontrar e extrair dados usando passagem DOM ou seletores CSS.
  • Jsoup permite manipular elementos, atributos e texto HTML.
  • Jsoup fornece limpeza de lista branca de informações fornecidas pelo usuário para evitar ataques XSS.
  • Jsoup também produz HTML "puro".
Jsoup foi projetado para funcionar com vários tipos de HTML que existem no mundo real, incluindo HTML devidamente validado com um conjunto de tags incompleto e não validado. Uma das principais vantagens do Jsoup é a sua confiabilidade.

Analisando HTML em Java usando Jsoup

Neste tutorial, veremos três exemplos diferentes de análise e passagem de um documento HTML em Java usando Jsoup. No primeiro exemplo, analisaremos uma string HTML contendo tags na forma de uma string Java literal. No segundo exemplo, baixaremos nosso documento HTML da Internet e, no terceiro exemplo, baixaremos nosso próprio arquivo HTML de amostra login.html para análise. Este arquivo é um exemplo de documento HTML que consiste em uma tag “title” e uma tag “div” na seção “body” que contém o formulário HTML. O formulário contém campos para inserir nome de usuário e senha, bem como botões de redefinição e confirmação para ações adicionais. Este é o HTML "correto" que pode passar na verificação de "validade", o que significa que todas as tags e atributos estão devidamente fechados. Esta é a aparência do nosso arquivo HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title>Login Page</title>
    </head>
    <body>
        <div id="login" class="simple" >
            <form action="login.do">
                Username : <input id="username" type="text" /><br>
                Password : <input id="password" type="password" /><br>
                <input id="submit" type="submit" />
                <input id="reset" type="reset" />
            </form>
        </div>
    </body>
</html>
Com Jsoup é muito fácil analisar HTML, tudo que você precisa fazer é chamar um método estático Jsoup.parse()e passar sua string HTML para ele. Jsoup fornece vários métodos sobrecarregados parse()para ler HTML de uma string, um arquivo, de um URI base, de uma URL e de um arquivo InputStream. Você também pode especificar a codificação para ler corretamente o arquivo HTML se ele não estiver no formato UTF-8. O método parse(String html)analisa o HTML recebido em um novo objeto Document. No Jsoup, uma classe Documentherda de uma classe Element, que estende a classe Node. A classe também Nodeherda da classe TextNode. Contanto que você passe uma string não nula para o método, você terá a garantia de ter uma análise significativa e bem-sucedida de um objeto Documentcontendo (pelo menos) os elementos "head" e "body". Se você tiver um objeto Document, poderá obter os dados desejados chamando os métodos apropriados da classe Documente seus pais Elemente Node.

Programa Java para analisar documento HTML

Aqui está nosso programa completo para analisar uma string HTML, um arquivo HTML baixado da Internet e um arquivo HTML local. Para executá-lo, você pode usar um IDE (Eclipse ou qualquer outro) ou a linha de comando. No Eclipse isso é muito fácil, basta copiar este código, criar um novo projeto Java, clicar com o botão direito na pasta “src” e colar o código copiado. O Eclipse cuidará da criação do pacote adequado e do arquivo de código-fonte com o nome apropriado, portanto, é muito menos trabalhoso. Se você já possui um projeto Java, esta é apenas uma etapa. O programa abaixo ilustra três exemplos de análise e percurso de um arquivo HTML. No primeiro exemplo, analisamos diretamente uma string contendo HTML, no segundo, um arquivo HTML baixado de uma URL, no terceiro, baixamos e analisamos um documento HTML do sistema de arquivos local.
import java.io.File;
import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

/**
* Java Program to parse/read HTML documents from File using Jsoup library.
* Jsoup is an open source library which allows Java developer to parse HTML
* files and extract elements, manipulate data, change style using DOM, CSS and
* JQuery like method.
*
* @author Javin Paul
*/
public class HTMLParser{

    public static void main(String args[]) {

        // Parse HTML String using JSoup library
        String HTMLSTring = "<!DOCTYPE html>"
                + "<html>"
                + "<head>"
                + "<title>JSoup Example</title>"
                + "</head>"
                + "<body>"
                + "<table><tr><td><h1>HelloWorld</h1></tr>"
                + "</table>"
                + "</body>"
                + "</html>";

        Document html = Jsoup.parse(HTMLSTring);
        String title = html.title();
        String h1 = html.body().getElementsByTag("h1").text();

        System.out.println("Input HTML String to JSoup :" + HTMLSTring);
        System.out.println("After parsing, Title : " + title);
        System.out.println("Afte parsing, Heading : " + h1);

        // JSoup Example 2 - Reading HTML page from URL
        Document doc;
        try {
            doc = Jsoup.connect("http://google.com/").get();
            title = doc.title();
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println("Jsoup Can read HTML page from URL, title : " + title);

        // JSoup Example 3 - Parsing an HTML file in Java
        //Document htmlFile = Jsoup.parse("login.html", "ISO-8859-1"); // wrong
        Document htmlFile = null;
        try {
            htmlFile = Jsoup.parse(new File("login.html"), "ISO-8859-1");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } // right
        title = htmlFile.title();
        Element div = htmlFile.getElementById("login");
        String cssClass = div.className(); // getting class form HTML element

        System.out.println("Jsoup can also parse HTML file directly");
        System.out.println("title : " + title);
        System.out.println("class of div tag : " + cssClass);
    }
}
Saída:
Input HTML String to JSoup :<!DOCTYPE html><html><head><title>JSoup Example</title></head><body><table><tr><td><h1>HelloWorld</h1></tr></table></body></html>
After parsing, Title : JSoup Example
Afte parsing, Heading : HelloWorld
Jsoup Can read HTML page from URL, title : Google
Jsoup can also parse HTML file directly
title : Login Page
class of div tag : simple
O analisador HTML Jsoup fará todos os esforços para produzir uma análise "limpa" do HTML que você fornece, esteja ele bem formado ou não. Ele pode lidar com os seguintes erros:
  • tags não fechadas. Por exemplo,<p>Java <p>Scala to <p>Java</p> <p>Scala</p>
  • tags implícitas. Por exemplo, os abertos <td>Java is Great</td>serão embrulhados em<table><tr><td>
  • Jsoup cria estruturas de documentos robustas (HTML contém cabeçalho e corpo, mas o corpo contém apenas elementos relevantes)
Jsoup é uma biblioteca de código aberto excelente e confiável que torna muito simples a leitura de documentos HTML, fragmentos de corpo, strings HTML e a análise direta de conteúdo HTML da web.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION