Introdução
Tradicionalmente, Node.js não permite que você analise e manipule marcações porque executa código fora do navegador. Neste artigo, exploraremos a Cheerio, uma biblioteca JavaScript de código aberto projetada especificamente para esse propósito.
A Cheerio fornece uma implementação flexível e enxuta de jQuery, mas é projetada para o servidor. Manipular e renderizar a marcação com Cheerio é incrivelmente rápido porque funciona com uma marcação concisa e simples (semelhante ao jQuery). Além de analisar HTML, o Cheerio também funciona perfeitamente bem com documentos XML.
Objetivos
Este tutorial não pressupõe nenhum conhecimento prévio do Cheerio e cobrirá as seguintes áreas:
Instalando o Cheerio em um projeto Node.js Compreendendo o Cheerio (carregamento, seletores, manipulação de DOM e renderização) Construindo um aplicativo de amostra (FeatRocket) que extrai artigos em destaque do LogRocket e os registra no consolePré-requisitos
Para concluir este tutorial, você precisará:
Familiaridade básica com HTML, CSS e o DOM Familiaridade com Familiaridade com npm e Node.js trabalhando com a linha de comando e editores de texto
Configurando o Cheerio
O Cheerio pode ser usado em qualquer projeto ES6 +, TypeScript e Node.js, mas para este artigo, iremos foco no Node.js.
Para começar, precisamos executar o comando npm init-y, que irá gerar um novo arquivo package.json com seu conteúdo como abaixo:
{“name”:”cheerio-sample”,”version”:”1.0.0″,”description”:””,”main”:”index.js”,”scripts”: {“test”:”echo \”Erro: nenhum teste especificado \”&& exit 1″},”keywords”: [],”author”:””,”license”:”ISC”}
Feito isso, vamos prosseguir para install Cheerio :
npm install cheerio
Uma maneira de verificar se a instalação foi bem-sucedida é verificando o arquivo package.json. Você deve ver uma nova entrada chamada dependencies adicionado como abaixo:
…”dependencies”: {“cheerio”:”^ 1.0.0-rc.10″}
Noções básicas sobre Cheerio
Carregando
O primeiro passo para trabalhar com o Cheerio é carregar o arquivo HTML/XML que queremos analisar ou manipular. Temos que fazer isso porque estamos trabalhando com Node.js, que não tem acesso direto à nossa marcação de aplicativo, a menos que tenha sido baixado de alguma forma.
O carregamento pode ser feito com o cheerio.load () , e isso requer um argumento importante-o documento HTML/XML que você deseja carregar.
Abaixo está um exemplo:
const cheerio=require (“cheerio”); const markup=`
- Vue.js
- Reação
- Svelte
- Angular
`;/* Observação-o nome da variável é declarado como’$’para trazer a familiaridade do JQuery para cheerio */const $=cheerio.load (marcação);
Semelhante a um navegador da web, o uso do método cheerio.load () incluirá automaticamente as tags ,
e , respectivamente, se ainda não estiverem presentes em nossa marcação.Você pode desabilitar este recurso definindo o terceiro argumento do método.load () como false:
const $=cheerio.load (markup, null, false);
Isso pode ser útil no caso em que você está trabalhando com documentos XML em vez de HTML.
Seletores
Usamos seletores para dizer ao Cheerio em qual elemento queremos trabalhar. Como mencionado anteriormente, a implementação do seletor no Cheerio é semelhante ao jQuery, que também segue o estilo CSS, mas com alguns acréscimos.
Alguns dos seletores mais comumente usados no Cheerio incluem:
$ (“*”)-O sinal de asterisco (*) é usado como um seletor curinga, que selecionará todos os elementos na marcação fornecida $ (“div”)-Seletor de tag: seleciona cada instância da tag fornecida. Neste caso, ele selecionará cada instância da tag
Eventos e manipulação de DOM
Semelhante a JQuery , Cheerio é fornecido com vários métodos relacionados ao DOM para acessar e manipular elementos HTML e seus atributos.
Alguns dos métodos mais comumente usados incluem:
.text ()-Define ou retorna o conteúdo innerText do elemento selecionado. Usando nossa marcação anterior como exemplo, podemos obter o conteúdo de texto de um elemento com classe vue com o código abaixo:
$ (“. Vue”). Text ();
//output=> Vue.js ⚡.html ()-Define ou retorna o conteúdo innerHTML do elemento selecionado.append ()-Irá inserir o conteúdo fornecido como o último filho de cada um dos elementos selecionados.prepend ()-Ao contrário de append, isso irá inserir fornecido conteúdo como o primeiro filho de cada um dos elementos selecionados.addClass () e.removeClass ()-Irá remover ou adicionar classes fornecidas a todos os elementos correspondentes.hasClass ()-Retorna um valor booleano (verdadeiro/falso) se o elemento selecionado tiver o nome da classe fornecida.toggleClass ()-Verificará se a classe fornecida está presente no elemento selecionado. Se estiver presente, a classe fornecida será removida, caso contrário, será adicionada à lista de classes de elementos selecionados
Renderização
Assim que terminar de analisar e manipular sua marcação, você pode acessar seu conteúdo raiz com:
$.root (). html ();
Por padrão, ao analisar o conteúdo HTML no Cheerio, algumas tags serão abertas e, no caso em que você estiver trabalhando com conteúdo XML, o arquivo XML será inválido desta forma.
Para renderizar um documento XML válido, você pode usar a função de utilitário XML do Cheerio:
//Carregando conteúdo XML const $=cheerio.load (‘
Construindo FeatRocket
Agora que temos um entendimento básico de como o Cheerio funciona, vamos prosseguir e construir um projeto de amostra.
Estaremos construindo o FeatRocket, um aplicativo CLI que limpará tudo artigos em destaque no blog LogRocket e registrá-los em nosso console.
Veja como faremos isso:
Entenda a estrutura do blog LogRocket Baixe a marcação da página da web Carregue a marcação baixada em uma nova instância do Cheerio Localize e filtre o conteúdo necessário Registrar o resultado no console
Compreendendo a estrutura do site
A primeira etapa na web scraping é entender como o conteúdo do site está organizado, ou seja, qual atributo (classe, id, href ) é atribuído ao elemento que você deseja acessar e assim por diante.
Em nosso caso, notamos que nosso conteúdo direcionado está organizado da seguinte forma:
…
…
Onde o div com a classe listfeaturedtag é um wrapper para todos os nossos artigos direcionados e os divs com a classe col.. padlr10 são cartões para cada artigo apresentado.
Faça download da marcação da página da web
Agora entendemos a estrutura do site ao lado do nosso conteúdo direcionado. Em seguida, crie um novo arquivo scrapper.js e prossiga para instalar Axios -usaremos o Axios para baixar o conteúdo do site.
npm install axios
E podemos pegar o código-fonte do site com:
const axios=require (“axios”); axios.get (“https://blog.logrocket.com/”).then ((resposta)=> {console.log (resposta)}).catch ((err)=> console.log (“Erro de busca”+ err));
Cole o código acima no arquivo scrapper.js recém-criado e execute-o com:
node scrapper.js
Você notará que todo o conteúdo HTML do site é registrado no console.
Carregar a marcação no Cheerio
A próxima etapa é carregar a marcação baixada em um novo Cheerio:
const axios=require (“axios”); const cheerio=require (“cheerio”); axios.get (“https://blog.logrocket.com/”).then ((resposta)=> {const $=cheerio.load (response.data);}).catch ((err)=> console. log (“Fetch error”+ err));
Filtrar resultados
Em seguida, queremos filtrar apenas o conteúdo necessário. Já conhecemos os atributos de nossos divs-alvo (.listfeaturedtag e.padlr10). Teremos apenas que percorrer cada um deles e registrá-los no console, para que nosso código completo fique assim:
const axios=require (“axios”); const cheerio=require (“cheerio”); axios.get (“https://blog.logrocket.com/”).then ((resposta)=> {const $=cheerio.load (response.data); const featuredArticles=$ (“. listfeaturedtag.padlr10”) ; for (let i=0; i
Agora, se executarmos o node scrapper.js, você deverá ver uma saída semelhante à abaixo em seu console:
Conclusão
Cheerio é uma excelente estrutura para manipular e extrair conteúdo de marcação no lado do servidor, além de ser leve e implementar uma sintaxe familiar.
Este tutorial forneceu um guia detalhado sobre como começar a usar o Cheerio em um projeto da vida real.
Para referência futura, você também pode verificar o código-fonte do FeatRocket no GitHub .
Obrigado pela leitura!