For the complete documentation index, see llms.txt. This page is also available as Markdown.

Dicas para escrever expressões XPath

Aprenda a escrever expressões XPath eficazes para o Custom Parser com técnicas comprovadas e boas práticas que garantem extração precisa de dados.

A estrutura do HTML pode diferir entre o documento coletado e o carregado no navegador

Ao escrever funções de seleção de elementos HTML, certifique-se de trabalhar com documentos coletados em vez da versão ao vivo do site carregada no seu navegador, pois os documentos podem diferir. A principal razão por trás desse problema é a renderização de JavaScript. Quando um site é aberto, seu navegador é responsável por carregar documentos adicionais, como folhas de estilo CSS e scripts JavaScript, que podem alterar a estrutura do documento HTML inicial. Ao analisar HTMLs coletados, Custom Parser não carrega o documento HTML da mesma forma que os navegadores fazem (os parsers ignoram instruções JavaScript), portanto a árvore HTML pode diferir entre o que o parser e o navegador renderizam.

Como exemplo, veja o seguinte documento HTML:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Documento</title>
</head>
<body>
    <div>
        <h3>Este é um produto</h3>
        <div id="price-container">
            <p>Este é o preço:</p>
        </div>
        <p>E aqui está uma descrição</p>
    </div>
    <script>
        const priceContainer = document.querySelector("#price-container");
        const priceElement = document.createElement("p");
        priceElement.textContent = "123";
        priceElement.id = "price"
        priceContainer.insertAdjacentElement("beforeend", priceElement);
    </script>
</body>
</html>

Se você abrir o documento no navegador, ele mostrará o preço que você pode selecionar usando a seguinte expressão XPath //p[@id="price"]:

Agora, se você desativar a renderização de JavaScript no navegador, o site será renderizado da seguinte forma:

A mesma //p[@id="price"] expressão XPath não corresponde mais ao preço, pois ele não é renderizado.

Certifique-se de escrever todos os seletores HTML possíveis para o elemento de destino

Por vários motivos, a mesma página coletada duas vezes pode ter layouts diferentes (diferentes User Agents usados na coleta, site de destino fazendo testes A/B etc.).

Para lidar com esse problema, sugerimos definir parsing_instructions para o documento coletado inicialmente e testar essas instruções imediatamente com vários outros resultados de tarefas coletados do mesmo tipo de página.

funções de seletor HTML (xpath/xpath_one) suportam fallbacks de seletor.

Fluxo sugerido para escrever seletores HTML

  1. Colete o documento HTML da página de destino usando Scraper API.

  2. Desative o JavaScript e abra o HTML coletado localmente no seu navegador. Se o JavaScript estiver desativado depois depois que o HTML for aberto, certifique-se de recarregar a página para que o HTML possa recarregar sem JavaScript.

Como escrever instruções de análise

Digamos que você tenha a seguinte página para analisar:

Analise o título do produto

Crie um novo objeto JSON e atribua a ele um novo campo.

Você pode nomear o campo da maneira que preferir, com algumas exceções (o nome do campo definido pelo usuário não pode começar com um sublinhado _ , por exemplo, "_title").

O nome do campo será exibido no resultado analisado.

O novo campo deve conter um valor do tipo objeto JSON:

Se você fornecer essas instruções ao Custom Parser, ele não fará nada ou enviará uma reclamação de que você não forneceu instruções.

Para realmente analisar o título no title campo, você deve definir um pipeline de processamento de dados dentro do title objeto usando a _fns propriedade reservada (que é sempre do tipo array):

Para que o Custom Parser selecione o texto do título, você pode utilizar a função de seletor HTML xpath_one. Para usar a função no documento HTML, ela deve ser adicionada ao pipeline de processamento de dados. A função é definida como um objeto JSON com os campos obrigatórios _fn (nome da função) e _args (argumentos da função). Veja a lista completa de definições de função aqui.

As instruções de análise acima devem produzir o seguinte resultado:

Analise a descrição

Da mesma forma, nas instruções de análise, você pode definir outro campo no qual o contêiner da descrição do produto, o título da descrição e os itens serão analisados. Para que o título e os itens da descrição fiquem aninhados sob o descrição objeto, a estrutura das instruções deve ser a seguinte:

A estrutura fornecida das instruções de análise implica que description.title e description.items serão analisados com base no descrição elemento. Você pode definir um pipeline para o descrição campo. Neste caso, isso é feito primeiro, pois simplificará a expressão XPath do título da descrição.

No exemplo, o description._fns pipeline selecionará o description-container elemento HTML, que será usado como ponto de referência para analisar o título e os itens da descrição.

Para analisar os campos restantes da descrição, adicione dois pipelines diferentes para os campos description.items, e description.title:

Observe como a xpath a função é usada em vez de xpath_one para extrair todos os itens que correspondem à expressão XPath.

As instruções de análise produzem o seguinte resultado:

Analise as variações do produto

O exemplo a seguir mostra a estrutura das instruções se você quiser analisar informações no product_variants campo, que conterá uma lista de objetos de variação. Neste caso, o objeto de variação tem preço e color campos.

Comece selecionando todos os elementos de variação do produto:

Para fazer product_variants uma lista contendo objetos JSON, você terá que iterar pelas variações encontradas usando _items iterador:

Por fim, defina instruções sobre como analisar os color e preço campos:

Com product_variants descrito, as instruções finais ficarão assim:

O que produzirá a seguinte saída:

Você pode encontrar mais exemplos de instruções de análise aqui: Exemplos de instruções de análise.

Isto foi útil?