JavaRush /Blogue Java /Random-PT /Análise fácil de HTML com jsoup
Stanislav
Nível 21
Москва

Análise fácil de HTML com jsoup

Publicado no grupo Random-PT
Talvez algum dia você precise obter informações de um site ou documento HTML em seu aplicativo, e direi sem mais delongas que usar a biblioteca jsoup simplificará bastante sua tarefa. De acordo com o wiki , jsoup é uma biblioteca Java de código aberto projetada para analisar, extrair e manipular dados armazenados em documentos HTML.

Início rápido

A biblioteca pode ser baixada como um arquivo jar e colocada em um projeto ou conectada usando Maven/Gradle. Vou deixar um link para o site oficial no final do artigo: lá você encontra a versão atual da biblioteca. No exemplo usaremos conexão via Maven. Vamos adicionar uma dependência:
<​dependency​>
  <​groupId>org.jsoup</groupId>
  <​artifactId>jsoup</artifactId>
  <​version>1.11.3</version>
</dependency>

Uso

Primeiro de tudo, você precisa obter uma instância da classe Documentem org.jsoup.nodes.Document indicando a fonte para análise. Pode ser um arquivo local ou um link. Por exemplo, neste artigo usaremos o site yandex.ru e tentaremos obter o feed de notícias atual:
Document doc = Jsoup.connect("https://yandex.ru/")
                .userAgent("Chrome/4.0.249.0 Safari/532.5")
                .referrer("http://www.google.com")
                .get();
User Agenté um identificador que é comunicado ao site que está sendo visitado. Em muitos sites é o critério mais importante para o filtro antispam. Referrercontém o URL da origem da solicitação. O método get()lança uma IOException manipulada, para que possamos agrupar tudo em try/catchum bloco ou simplesmente lançá-lo ainda mais com throws. Agora recebemos o código-fonte desta página. Se necessário, a própria biblioteca jsoup pode restaurar elementos danificados. Agora tudo o que precisamos fazer é restringir a pesquisa a um bloco separado. O método select()possui uma grande variedade de utilizações: permite pesquisar elementos por tag, atributos, classe e outros parâmetros. Quase todos os navegadores modernos suportam a capacidade de pesquisar rapidamente o código-fonte de um elemento selecionado. Com manipulações simples, encontramos o código-fonte do elemento que precisamos e obtemos divum bloco com a classe especificada, que usaremos para amostragem. Análise fácil de HTML usando jsoup - 1Vamos usar a classe Elementsorg.jsoup.select.Elements para selecionar todos os elementos do nosso bloco selecionado.
Elements listNews = doc.select("div#tabnews_newsc.content-tabs__items.content-tabs__items_active_true");
Agora temos algo assim: Análise fácil de HTML usando jsoup - 2Agora tudo o que precisamos fazer é usar um pequeno loop para iterar por todos os elementos:
for (Element element : listNews.select("a"))
            System.out.println(element.text());
O método text()permite descartar o código de marcação e deixa apenas uma combinação de texto para todos os elementos recebidos. O resultado da execução será o seguinte: Análise fácil de HTML usando jsoup - 3É fácil perceber que o número real de linhas recebidas não corresponde ao real exibido na página. É aqui que residem as armadilhas. Se você observar o código-fonte da marcação, notará que as últimas notícias mudam animadamente em um determinado intervalo de tempo. Algumas dessas “pedras” são resolvidas por amostragem adicional e, claro, testes. Pode acontecer que os primeiros cinco elementos contenham as informações que precisamos e o sexto elemento contenha apenas uma linha vazia com script. Acontece também que os blocos não terão identificadores, então é possível apontar diretamente através de um método get(int index)para o número da posição do elemento em questão.
System.out.println(listNews.select("a").get(2).text());

Conclusão

Este exemplo mostra apenas uma pequena parte do que o jsoup é capaz. Há também o fato de os sites serem atualizados frequentemente, alterando a estrutura do código de marcação, portanto, ao trabalhar com scraping, você precisa estar pronto para se adaptar às mudanças. Você pode obter mais informações e a versão atual no site oficial jsoup.org ; você pode ler mais sobre classes e métodos no link o7planning.org . Vou deixar um link para meu github , no momento em que escrevo existem vários bots do Telegram que usam Jsoup para receber e exibir informações.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION