Exemplos Práticos
Exemplo: Books to Scrape
Um guia completo extraindo livros do site toscrape.com.
O site books.toscrape.com é o sandbox perfeito para testar suas habilidades.
Objetivo
Extrair o título, preço e link de todos os livros na página inicial.
Implementação Completa
Neste exemplo, usaremos o AxiosClient (já que a página é estática) e o HtmlExtractionModel.
import { AxiosClient } from "@xcrap/axios-client";
import { HtmlParser, HtmlExtractionModel, css, extract } from "@xcrap/extractor";
async function scrapeBooks() {
// 1. Obter o HTML
const client = new AxiosClient();
const response = await client.fetch({ url: "https://books.toscrape.com/" });
// 2. Definir os Modelos
const bookModel = new HtmlExtractionModel({
title: {
query: css("h3 a"),
extractor: extract("attribute:title")
},
price: {
query: css(".price_color"),
extractor: extract("innerText")
},
link: {
query: css("h3 a"),
extractor: extract("attribute:href")
}
});
const catalogModel = new HtmlExtractionModel({
books: {
query: css(".product_pod"),
multiple: true,
model: bookModel
}
});
// 3. Extrair os Dados usando o HttpResponse
const parser = response.asHtmlParser();
const data = await parser.extractModel({ model: catalogModel });
console.log(data.books);
}
scrapeBooks();O que está acontecendo aqui?
AxiosClient: Faz a requisição HTTP GET para o site.query: css(".product_pod"): Identifica o container de cada livro.multiple: true: Diz ao Xcrap para encontrar todos os elementos que batem com o seletor, não apenas o primeiro.model: Define um novo modelo para ser aplicado dentro de cada container encontrado.extract("attribute:title"): Pega o valor do atributotitleda tag<a>, que contém o nome completo do livro.
Este mesmo padrão pode ser aplicado a qualquer site com listas (Amazon, eBay, etc), mudando apenas os seletores CSS.