O que é Cheerio?
Scraping sem resíduos O navegador renderiza páginas JavaScript em um navegador na nuvem para que seu HTML resultante possa ser analisado com ferramentas como Cheerio.
Cheerio é uma biblioteca JavaScript para analisar HTML e XML e consultar o documento resultante com uma API semelhante ao jQuery. Seu principal trabalho é transformar marcação em uma estrutura que você pode pesquisar, percorrer e modificar. Em um scraper Node.js, o Cheerio comumente extrai campos de HTML que já foram adquiridos.
A biblioteca não fornece um ambiente de navegador visual. Um elemento de script permanece parte do documento, em vez de ser um programa que o Cheerio executa. Isso torna a escolha de entrada decisiva: os registros desejados devem existir na marcação que você carrega, seja essa marcação proveniente de uma resposta HTTP comum ou de um fluxo de trabalho de navegador concluído.
O que o Cheerio faz com HTML
O Cheerio analisa a marcação em nós e expõe métodos para selecionar e alterar esses nós. O modelo de documento Cheerio fornece operações de seleção e navegação familiares, sem renderização de navegador, layout ou execução de script de página. Um seletor descreve quais nós você deseja, e os métodos leem seu texto ou atributos.
Esse modelo é adequado para arquivos de artigos, listas de produtos renderizadas no servidor, documentação pública e instantâneas de HTML armazenadas. Você pode identificar um contêiner repetitivo, percorrer seus filhos e converter cada contêiner em um registro de saída. O parser não precisa exibir a página para realizar essas operações.
Cheerio também pode modificar um documento e serializar o resultado. Isso é útil para transformações de conteúdo controladas, mas a extração e a reescrita devem permanecer atividades separadas em um coletor. Se você alterar a árvore antes de inspecionar um campo ausente, pode dificultar a identificação de se a fonte omitiram o valor ou se sua transformação o removeu.
Carregando uma String, Bytes ou uma URL
Cheerio suporta vários caminhos de carregamento, e a escolha correta depende de onde a marcação vem e se sua codificação é conhecida. O método de carregamento comum aceita uma string. Node.js também fornece ao Cheerio o ambiente necessário para métodos de carregamento de byte, stream e URL.
Os métodos de carregamento Cheerio incluem loadBuffer para bytes, carregadores baseados em stream e fromURL para buscar e analisar uma URL. Isso significa que a afirmação abrangente de que o Cheerio nunca pode buscar uma página é imprecisa. Seu carregador de URL pode adquirir marcação; ainda não se torna um navegador ou executa o JavaScript da página.
A codificação é uma razão prática para preservar bytes brutos. Uma vez que o decodificador de texto errado substituiu caracteres, um parser posterior não pode reconstruir o título original de forma confiável. Se a codificação da fonte for incerta, escolha um caminho de entrada que possa inspecionar bytes e informações de codificação antes de criar a string usada para extração.
Além disso, diferencie um documento completo de um fragmento. Um fragmento de cartão não é necessariamente destinado a ter a mesma estrutura circundante que uma página HTML completa. Wrappers gerados pelo parser podem afetar seletores que assumem uma raiz particular. Torne o contrato de entrada explícito para que um fragmento extraído de uma API não seja tratado como um documento completo por acidente.
Seletores funcionam melhor dentro de contêineres de registro
Seletores Cheerio produzem registros mais confiáveis quando a seleção de campo permanece dentro de cada contêiner de item repetido. Comece com o cartão ou linha que representa uma entidade, depois encontre seu título, link e campos opcionais. Isso preserva a relação entre os valores, mesmo quando um item falta um campo.
A sintaxe do seletor Cheerio inclui seletores de tag, classe, atributo e relacionamento. Um seletor de descendente pode alcançar conteúdo aninhado; um seletor de filho diretos restringe o relacionamento. Escolha com base na estrutura observada, em vez de em qualquer expressão que primeiro retorne uma correspondência.
Considere um diretório de artigos ilustrativo. Alguns cartões têm um subtítulo e outros não. Coletar cada título em um array e cada subtítulo em outro pode alterar a pareação após o primeiro subtítulo ausente. Selecionar ambos os campos dentro de cada cartão mantém o valor ausente ligado ao artigo correto.
Prefira atributos e relacionamentos estruturais que carreguem significado na fonte. Uma longa cadeia de seletores posicionais pode reproduzir o layout atual enquanto falha quando o publicador insere outro cartão. Mantenha seletores em uma pequena camada de extração nomeada e verifique os campos necessários antes de passar registros para consumidores a jusante.
Texto, Atributos e Links Têm Significados Diferentes
Conteúdo de texto, marcação serializada e valores de atributos são diferentes saídas de extração. Ler texto pode combinar texto descendente; ler um atributo retorna o valor armazenado; serializar HTML preserva a marcação. Selecione a representação que corresponde ao seu esquema em vez de usar um método para cada campo.
| Campo | Representação Preferida | Pergunta de Validação |
|---|---|---|
| Título do artigo | Texto normalizado | Os rótulos circundantes se tornaram parte do título? |
| Endereço detalhado | URL resolvido | Qual página fornece o endereço base? |
| Identificador estável | Atributo de origem ou ID explícito | É único dentro da coleção? |
| Descrição rica | Marca controlada ou texto simples | O consumidor de saída permite marcação? |
Um link relativo deve ser resolvido em relação ao base correto. Se um pedido foi redirecionado, o endereço do documento final pode diferir do solicitado. A resolução de URL segue regras estruturadas descritas pelo padrão de URL; a simples concatenação de strings pode produzir a localização errada para caminhos relativos à raiz, consultas ou referências de diretório pai.
Um Contrato de Extração Prática para um Arquivo de Artigos
Um extractor de arquivo de artigos deve definir a página aceita, o limite do registro e os campos de saída antes de processar um diretório inteiro. Imagine um arquivo público cujas entradas contenham um título e um link de detalhe, com uma etiqueta de categoria opcional. Esse cenário ilustra escolhas de design em vez de um conjunto de dados reportados ao vivo.
Comece com um documento HTML aceito e identifique o contêiner do arquivo. Dentro dele, identifique cada entrada e leia seu título e link. Resolva o link com o endereço base do documento e preserve uma categoria ausente como inexistente. Um cabeçalho de navegação fora do arquivo nunca deve satisfazer o requisito do título do artigo.
Mantenha tanto a página de origem quanto o endereço do artigo na saída. A página de origem explica onde a descoberta ocorreu; o endereço do artigo identifica o destino. Se o arquivo usar várias páginas, deduplice destinos entre páginas enquanto preserva informações suficientes para inspecionar sobreposições inesperadas.
Defina uma regra de validação para combinações impossíveis. Uma entrada com uma categoria, mas sem título, pode indicar um anúncio ou uma mudança de seletor. Rejeite ou sinalize com uma razão em vez de inventar um título a partir de texto próximo. Um contrato de extração deve tornar a incerteza visível ao nível do campo.
Para manutenção, retenha um pequeno conjunto de exemplos HTML permitidos cobrindo entradas ordinárias, categorias ausentes e aninhamento inesperado. Compare relacionamentos de campo ao mudar seletores. A verificação importante é se cada linha de saída ainda representa a entrada pretendida, não apenas se o número total de nós selecionados permanece inalterado.
Por que Cheerio às vezes não retorna registros
Cheerio não retorna registros quando a árvore carregada não contém nós correspondentes à sua seleção. Isso pode significar que o seletor está errado, a estrutura da página mudou ou o HTML não contém os registros. Inspecione a entrada antes de decidir qual explicação se aplica.
O painel de Elementos de um navegador mostra o DOM atual após a execução dos scripts. Uma resposta HTTP simples pode conter apenas a shell inicial do aplicativo. Copiar um seletor da página renderizada não prova que ele pode corresponder ao corpo da resposta. Pesquise esse corpo por um título ou identificador conhecido para estabelecer se a informação está presente.
A renderização também tem uma condição de conclusão. Se os registros aparecerem após uma ação do usuário, uma captura de tela feita antes da ação será incompleta, mesmo que tenha vindo de um navegador. Defina o estado que importa, como a lista de arquivos aparecendo ou a categoria selecionada sendo atualizada, antes de passar o HTML para o Cheerio.
Usando Cheerio com Scrapeless Scraping Browser
O Scrapeless Scraping Browser fornece execução de navegador quando uma página precisa de JavaScript ou interações antes que seu conteúdo possa ser extraído. O aplicativo pode adquirir o documento renderizado relevante através de um fluxo de trabalho do navegador e depois usar o Cheerio para uma análise determinística dessa captura de tela.
O navegador em nuvem Scrapeless aborda a aquisição, enquanto a introdução ao Scraping Browser explica o serviço do navegador. Seu esquema ainda precisa de campos obrigatórios, manuseio de URL e um limite de registro explícito. A renderização gerenciada não decide qual preço ou etiqueta próximo pertence ao seu registro.
O relacionado guia de extração do Cheerio expande os fluxos de trabalho de análise HTML. Avalie os preços do Scrapeless ao redor das páginas que realmente precisam de execução do navegador. Documentos estáticos podem permanecer em um caminho de aquisição mais simples quando sua marcação inicial já contém os dados completos.
Conclusão
Cheerio é uma escolha focada para transformar HTML disponível em registros estruturados em JavaScript. Dê a ele o documento correto, selecione campos dentro de cada entidade e preserve valores ausentes e endereços de origem. Quando o conteúdo depende do comportamento do navegador, corrija a aquisição primeiro e mantenha o contrato de extração estável.
Obtenha o HTML que seu parser precisa
Use o Scrapeless Scraping Browser para páginas que requerem execução do navegador, depois mantenha o Cheerio responsável por suas regras de extração.
Inscreva-se hoje e obtenha $5 em crédito grátis — sem cartão de crédito necessário.
Reclame Seu Crédito de $5 →FAQ
Q: Cheerio é o mesmo que jQuery?
Cheerio oferece uma API de seleção e manipulação semelhante ao jQuery, mas não roda dentro de um DOM de página ao vivo da mesma forma que o jQuery do navegador. Você carrega explicitamente o documento que o Cheerio irá analisar. Nomes de métodos familiares não implicam layout, manipulação de eventos ou execução de JavaScript.
Q: O Cheerio pode baixar uma página?
Cheerio fornece um carregador fromURL em seu ambiente Node.js que busca e analisa marcação. Outros métodos de carregamento aceitam strings, bytes ou fluxos. O carregamento de URL continua sendo uma operação de aquisição HTTP e não renderiza conteúdo do aplicativo do lado do cliente.
Q: Por que meus links extraídos são relativos?
Um atributo de link HTML pode conter uma referência relativa em vez de uma URL absoluta. Resolva-o em relação ao endereço base correto do documento e preserve o endereço final após redirecionamentos quando relevante. Evite construir links unindo strings sem resolução ciente de URL.
Q: O Cheerio pode analisar um site JavaScript?
Cheerio pode analisar marcação de qualquer fonte, incluindo um aplicativo JavaScript, uma vez que o conteúdo necessário exista nessa marcação. Ele não executa o aplicativo para criar nós ausentes. Obtenha o estado renderizado relevante primeiro quando a resposta inicial não tiver os dados.