Se um site não fornecer uma boa API, sua próxima melhor aposta é raspar seu conteúdo. Cheerio e Express.js ajudarão você a fazer exatamente isso.
Web scraping é uma técnica que possibilita a obtenção de dados de um determinado site. Os sites usam HTML para descrever seu conteúdo. Se o HTML for limpo e semântico, será fácil usá-lo para localizar dados úteis.
Normalmente, você usará um web scraper para obter e monitorar dados e rastrear futuras alterações neles.
Conceitos de jQuery que vale a pena conhecer antes de usar o Cheerio
jQuery é um dos pacotes JavaScript mais populares existentes. Facilita o trabalho com o Modelo de objeto de documento (DOM), lidar com eventos, animações e muito mais. Cheerio é um pacote para web scraping que se baseia em jQuery - compartilhando a mesma sintaxe e API, ao mesmo tempo em que facilita a análise de documentos HTML ou XML.
Antes de aprender a usar Cheerio, é importante saber como selecionar elementos HTML com jQuery. Felizmente, o jQuery suporta a maioria dos seletores CSS3, o que facilita a captura de elementos do DOM. Dê uma olhada no seguinte código:
$("#container");
No bloco de código acima, jQuery seleciona os elementos com o eu ia de "recipiente". Uma implementação semelhante usando JavaScript antigo regular seria algo como isto:
document.querySelectorAll("#container");
Comparando os dois últimos blocos de código, você pode ver que o primeiro bloco de código é muito mais fácil de ler do que o último. Essa é a beleza do jQuery.
jQuery também tem métodos úteis como texto(), html(), e mais que possibilitam a manipulação de elementos HTML. Existem vários métodos que você pode usar para percorrer o DOM, como pai(), irmãos(), anterior (), e próximo().
O cada() O método em jQuery é muito popular em muitos projetos Cheerio. Ele permite iterar sobre objetos e arrays. A sintaxe para o cada() método se parece com isso:
$().each(<arrayorobject>, callback)
No bloco de código acima, ligar de volta é executado para cada iteração da matriz ou argumento do objeto.
Carregando HTML com Cheerio
Para começar a analisar dados HTML ou XML com Cheerio, você pode usar o cheerio.load() método. Dê uma olhada neste exemplo:
const $ = cheerio.load('Hello, world!
');
console.log($('h1').text())
Este bloco de código usa o jQuery texto() método recupera o conteúdo de texto do h1 elemento. A sintaxe completa para o carregar() método se parece com isso:
load(content, options, mode)
O contente parâmetro refere-se aos dados HTML ou XML reais que você passa carregar() método. opções é um objeto opcional que pode modificar o comportamento do método. Por padrão, o carregar() método apresenta html, cabeça, e corpo elementos se estiverem faltando. Se você deseja interromper esse comportamento, certifique-se de definir modo para falso.
Raspando notícias de hackers com Cheerio
O código utilizado neste projeto está disponível em um Repositório GitHub e é gratuito para você usar sob a licença do MIT.
É hora de combinar tudo o que você aprendeu até agora e criar um web scraper simples. Hacker News é um site popular para empreendedores e inovadores. Também é um site perfeito para aproveitar suas habilidades de raspagem na web porque carrega rápido, tem uma interface muito simples e não exibe nenhum anúncio.
Certifique-se de ter o Node.js e a Gerenciador de pacotes de nós rodando em sua máquina. Crie uma pasta vazia e, em seguida, um pacote.json arquivo e adicione o seguinte JSON dentro do arquivo:
{
"name": "web-scraper",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "nodemon index.js"
},
"author": "",
"license": "MIT",
"dependencies": {
"cheerio": "^1.0.0-rc.12",
"express": "^4.18.2"
},
"devDependencies": {
"nodemon": "^3.0.1"
}
}
Depois de fazer isso, abra o terminal e execute:
npm i
Isso deve instalar as dependências necessárias para construir o scraper. Esses pacotes incluem Cheerio para analisar o HTML, ExpressJS para criar o servidor e, como uma dependência de desenvolvimento,Nodemon, um utilitário que escuta as mudanças no projeto e reinicia automaticamente o servidor.
Configurando as coisas e criando as funções necessárias
Criar um index.js arquivo e, nesse arquivo, crie uma variável constante chamada "PORT". Definir PORTA para 5500 (ou qualquer número que você escolher), então importe os pacotes Cheerio e Express, respectivamente.
const PORT = 5500;
const cheerio = require("cheerio");
const express = require("express");
const app = express();
Em seguida, defina três variáveis: url, html, e página finalizada. Definir url para o URL do Hacker News.
const url = 'https://news.ycombinator.com';
let html;
let finishedPage;
Agora crie uma função chamada getHeader() que retorna algum HTML que o navegador deve renderizar.
functiongetHeader(){
return`
"display: flex; flex-direction: column; align-items: center;">
"text-transform: capitalize">Scraper News</h1>
"display: flex; gap: 10px; align-items: center;">
"/" id="news" onClick='showLoading()'>Home</a>
"/best" id="best" onClick='showLoading()'>Best</a>
"/newest" id="newest" onClick='showLoading()'>Newest</a>
"/ask" id="ask" onClick='showLoading()'>Ask</a>
"/jobs" id="jobs" onClick='showLoading()'>Jobs</a>
</div>
class="loading" style="display: none;">Loading...</p>
</div>
`}
A criação de outra função getScript() que retorna algum JavaScript para o navegador executar. Certifique-se de passar a variável tipo como um argumento quando você o chama.
functiongetScript(type){
return`