O que é Análise HTML?
A API de Raspagem Universal Sem Raspagem recupera e renderiza o HTML público da página que os parsers a jusante podem converter em uma árvore de documentos consultável.
TL;DR
- A análise HTML transforma a marcação em uma árvore de documentos. Elementos, atributos, texto e comentários se tornam nós que o código pode percorrer ou consultar.
- HTML usa suas próprias regras de tratamento de erros. Os navegadores podem construir um DOM utilizável a partir da marcação que não estaria bem formada como XML.
- A análise não executa o JavaScript da página. Um parser lê a marcação fornecida; um ambiente de execução de navegador pode ser necessário para obter o DOM pós-renderização.
- Os seletores operam após a análise. Seletores CSS e XPath localizam nós na árvore; a extração então lê e normaliza seus valores.
A análise HTML é o processo de ler a fonte HTML e construir uma árvore de documentos estruturada. O resultado é um Modelo de Objeto de Documento, ou DOM, que contém nós de elementos, nós de texto, atributos, comentários e relacionamentos entre pais, filhos e irmãos.
O Padrão HTML WHATWG define a tokenização e o comportamento de construção de árvore para recursos text/html. Essas regras explicam por que a marcação fonte e o DOM resultante estão relacionados, mas nem sempre são idênticos.
Como a Análise HTML Funciona?
A análise HTML tokeniza a marcação e aplica regras de construção de árvores para criar um DOM.
- Leia caracteres. O parser consome a entrada HTML como um fluxo.
- Crie tokens. Tags de início, tags de fim, texto, comentários e declarações de doctype se tornam tokens.
- Construa a árvore. Modos de inserção e regras de elementos abertos decidem onde cada token pertence.
- Corrija a marcação recuperável. O parser pode implicar elementos, fechar elementos abertos ou realocar nós de acordo com o padrão.
- Exponha o DOM. O código pode percorrer os nós resultantes ou consultá-los com APIs de seletor suportadas.
Análise HTML vs Renderização
A análise cria a árvore de documentos; a renderização calcula o layout e pinta a página visual.
| Etapa | Entrada | Saída |
|---|---|---|
| Busca | URL e configurações de solicitação | Bytes de resposta HTTP |
| Análise | Texto HTML | Árvore DOM |
| Execução de script | DOM e JavaScript | DOM potencialmente modificado |
| Renderização | DOM, CSS, estado de layout | Pixels e apresentação interativa |
| Extração | DOM ou resposta estruturada | Registros selecionados |
Guia do pipeline do navegador do MDN descreve tokenização, construção de árvore e a interação entre análise e scripts bloqueadores.
Para cadeias de caracteres em memória, DOMParser.parseFromString() mostra a forma da API do navegador para transformar fonte HTML ou XML em um Documento.
Por que a análise HTML é importante para web scraping?
A análise HTML fornece aos scrapers um modelo estrutural que é mais seguro e preciso do que buscar marcação bruta como texto simples.
Seleção de Campo
Localize cartões de produtos, manchetes, tabelas, links e metadados por estrutura e atributos.
Limpeza de Texto
Leia o conteúdo do texto sem manter tags, comentários ou marcação de navegação não relacionada.
Resolução de Link
Extraia atributos href e resolva URLs relativas em relação à base do documento.
Validação de Conteúdo
Verifique se os elementos requeridos existem e se os nós selecionados têm as relações esperadas.
Erros Comuns de Análise HTML
A maioria das falhas de análise vem do uso da entrada errada, assumindo regras XML ou acoplamento de extração a detalhes de layout frágeis.
- Analisando a resposta inicial quando os dados aparecem mais tarde. Inspecione o DOM renderizado ou a resposta de rede estruturada quando o JavaScript cria o conteúdo.
- Tratando HTML como XML bem formado. Use um parser HTML para text/html porque o HTML tem regras de correção diferentes.
- Buscando marcação com expressões regulares amplas. Analise a árvore, depois selecione nós pela estrutura e atributos estáveis.
- Assumindo que cada página tem cada módulo. Modele elementos opcionais como anuláveis e valide tipos de página antes da extração.
O que acontece durante a tokenização?
A tokenização lê o fluxo de caracteres de entrada e reconhece construções como tags de início, tags de fim, dados de caracteres, comentários e o tipo de documento. O tokenizer mantém o estado porque os mesmos caracteres podem significar coisas diferentes em texto normal, valores de atributos, comentários, elementos de texto bruto ou dados de script.
Referências de caracteres são resolvidas de acordo com as regras HTML, atributos são anexados a tokens de tags, e erros de análise são tratados sem necessariamente interromper o documento. Esse comportamento é uma razão pela qual um parser HTML é preferível a uma simples divisão de string. Um sinal de menor dentro de um script ou um ampersand em texto não podem ser interpretados corretamente sem contexto.
A tokenização sozinha não produz a hierarquia final de elementos. Tokens alimentam a fase de construção da árvore, que decide onde os nós pertencem e como marcação malformada ou omitida afeta a estrutura do documento.
Como a construção da árvore corrige HTML?
A construção da árvore usa modos de inserção e uma pilha de elementos abertos para criar o DOM. O algoritmo pode implicar elementos ausentes, fechar elementos quando um novo token torna a aninhamento anterior inválido, e lidar com contextos especiais como tabelas. Como resultado, o DOM pode conter nós ou relações que não foram escritos explicitamente no texto fonte.
A marcação de tabelas é um exemplo comum. Conteúdos colocados em um local inválido podem ser movidos de acordo com as regras de análise. Elementos de parágrafo também podem fechar implicitamente quando certos elementos de bloco começam. A lógica de extração deve inspecionar a árvore analisada em vez de inferir aninhamento a partir da indentação ou uma leitura rápida da marcação fonte.
Diferentes bibliotecas de parser visam implementar o padrão HTML, mas podem expor diferentes APIs e níveis de conformidade. Teste a biblioteca real com páginas malformadas representativas se a forma exata da árvore é importante para o pipeline.
Como a codificação e o tipo de conteúdo afetam a análise?
O parser precisa da codificação de caracteres correta para transformar bytes de resposta em caracteres. Uma codificação errada pode corromper nomes, preços, pontuação e valores de atributos relevantes para o seletor antes que a construção da árvore comece. Respeite os metadados de resposta confiáveis e o comportamento documentado de detecção de codificação do parser.
O tipo de conteúdo também importa. HTML e XML têm regras de análise e comportamento de erro diferentes. XML geralmente requer entrada bem formada e processamento ciente de namespace, enquanto o HTML define comportamento de recuperação para erros comuns de marcação. Alimentar text/html em um parser XML pode rejeitar uma página que os navegadores exibem, enquanto alimentar XML em um parser HTML pode perder semântica de namespace ou caso.
Registre o tipo de conteúdo e URL da resposta final junto com a captura. Um URL nominal de página pode retornar JSON, um download, uma página de acesso ou outro formato com base no contexto da solicitação. Selecione o parser somente após verificar o que o serviço realmente retornou.
Como os scripts interagem com o parser?
Em um navegador, certos elementos de script podem pausam a análise HTML enquanto o código é buscado e executado. Esse código pode inspecionar o DOM parcialmente construído, escrever marcação adicional ou agendar mudanças posteriores. Outros scripts são carregados sem bloquear da mesma forma e podem atualizar a página após a análise inicial ser concluída.
Um parser independente não reproduz o ciclo de vida da aplicação apenas construindo a árvore inicial. Se os dados necessários forem inseridos por scripts, o fluxo de trabalho de extração precisa de um navegador ou uma resposta estruturada que contenha as mesmas informações. A entrada correta pode ser o DOM renderizado, mas também pode ser uma resposta API observada durante a renderização.
Escolha uma condição de conclusão ligada ao conteúdo alvo. O carregamento do documento sozinho pode ocorrer antes que uma aplicação cliente termine sua solicitação de dados, enquanto o tráfego analítico contínuo pode tornar condições de rede ociosas inadequadas. Um elemento, resposta ou estado da aplicação associado ao módulo requerido é mais significativo.
Como você testa um parser HTML para extração?
Os testes do parser devem incluir marcação válida, tags omitidas, aninhamento inválido, entidades, comentários, tabelas, scripts, texto não-ASCII e documentos vazios. Compare a árvore resultante com o comportamento exigido pelas regras de extração, em vez de testar apenas se a análise retorna sem uma exceção.
Os testes de extração devem operar na árvore analisada e afirmar os limites dos registros, o texto dos campos, os atributos e os módulos opcionais. Inclua páginas cuja fonte e DOM diferem para que a equipe saiba se uma regra espera HTML do servidor ou HTML renderizado.
Quando uma versão de parser ou biblioteca muda, execute novamente o corpus representativo. Uma pequena diferença na correção da árvore, normalização de texto ou suporte a seletores pode alterar os registros extraídos. Versione o parse e a pilha de extração juntos com o esquema para que a fonte de uma mudança permaneça rastreável.
Conclusão
A análise HTML converte marcação em um DOM que navegadores e ferramentas de extração podem consultar. A extração confiável começa escolhendo a entrada correta—HTML fonte ou HTML renderizado—e, em seguida, usando seletores estruturais e validação de esquema na árvore resultante.
Pronto para Construir Seu Fluxo de Trabalho de Dados Web?
Use Scrapeless para recuperar conteúdo público da web, depois aplique o padrão de descoberta e extração que se ajusta ao seu conjunto de dados.
Comece Grátis →FAQ
A análise HTML é a mesma coisa que web scraping?
Não. A análise HTML constrói uma árvore de documentos; web scraping também inclui recuperação, seleção, limpeza, validação e armazenamento.
Um parser HTML executa JavaScript?
Um parser HTML autônomo normalmente não executa JavaScript. Um ambiente de navegador pode executar scripts e expor o DOM resultante.
Por que o DOM pode diferir da fonte da página?
O parser HTML pode corrigir a marcação e implicar elementos, enquanto JavaScript pode adicionar, remover ou alterar nós após a análise.
Seletores CSS podem ser usados sem analisar HTML?
Seletores CSS operam em uma árvore de documentos, portanto, a marcação deve primeiro ser analisada ou fornecida através de um ambiente que já expõe um DOM.