Exemplos de instruções de parsing

Veja exemplos práticos de instruções de parsing para o Custom Parser: lide com objetos aninhados, listas, erros e arrays de arrays.

O trecho HTML a seguir é analisado usando instruções de parsing de exemplo nas próximas seções.

HTML de exemplo

<body>
    <div id="products">
        <div class="product" id="shoes">
            <div class="title">Shoes</div>
            <div class="price">223.12</div>
            <div class="description">
                <ul>
                    <li class="description-item">Super</li>
                </ul>
            </div>
        </div>
        <div class="product" id="pants">
            <div class="title">Pants</div>
            <div class="price">60.12</div>
            <div class="description">
                <ul>
                    <li class="description-item">Amazing</li>
                    <li class="description-item">Quality</li>
                </ul>
            </div>
        </div>
        <div class="product" id="socks">
            <div class="title">Meias</div>
            <div class="price">123.12</div>
            <div class="description">
                <ul>
                    <li class="description-item">Muito</li>
                    <li class="description-item">Bom</li>
                    <li class="description-item">Meias</li>
                </ul>
            </div>
        </div>
    </div>
</body>

Mínimo necessário

circle-info

Caso de uso: você quer extrair o texto de todos os shoes description items.

Exemplo 1. Seleção de itens de descrição de shoes usando XPath.

O xpath a função encontrará um único item e o colocará em uma lista como uma string:

O exato xpath comportamento da função é descrito aqui.

Instruções de parsing aninhadas

circle-info

Caso de uso: você quer analisar todas as informações relacionadas a shoes. Além disso, o resultado analisado deve representar a estrutura do documento do HTML fornecido.

Você está segmentando esta parte do HTML de exemplo:

E você gostaria que o resultado analisado tivesse a seguinte estrutura:

As instruções de parsing ficariam da seguinte forma.

Exemplo 2. Instruções de parsing são usadas para analisar shoes informações.

xpath_one funciona de forma semelhante a xpath, mas em vez de retornar uma lista de todas as correspondências, ela retorna o primeiro item correspondente.

No exemplo acima, o shoes propriedade é a única propriedade definida no escopo das instruções mais externas. A shoes propriedade contém instruções de parsing aninhadas.

O shoes o escopo de instruções não tem um pipeline definido (_fns propriedade está ausente). Isso significa que pipelines definidos em title, preço, e description escopos usarão o documento-sobre-análise como entrada do pipeline.

No Exemplo 2, você pode ver uma repetição de //div[@id='shoes'] em expressões XPath. A repetição pode ser evitada definindo um pipeline no shoes escopo:

Exemplo 3. Definindo um pipeline no shoes escopo das instruções para evitar repetição de expressões XPath.

Usando as instruções de parsing fornecidas no Exemplo 3, o Custom Parser irá:

  1. Começar processando shoes._fns pipeline, que irá produzir o shoes elemento HTML;

  2. Pegar shoes._fns a saída do pipeline e usá-la como entrada para pipelines definidos em title, preço, e description escopos;

  3. Processar title, preço, e description pipelines para produzir os valores finais.

O resultado ficará igual ao resultado do Exemplo 2:

A principal diferença entre o Exemplo 2 e o Exemplo 3 é que no Exemplo 3, o pipeline é definido no shoes escopo. Esse pipeline adicional seleciona o elemento dos shoes e o passa para pipelines adicionais encontrados mais abaixo na hierarquia de instruções.

Lista de objetos aninhados

circle-info

Caso de uso: Anteriormente, você queria analisar apenas shoes informações. Agora você quer analisar as informações de todos os produtos no HTML.

O HTML de exemplo é usado novamente como o documento-sobre-análise.

Se você quer que seu resultado analisado se pareça com isto:

As instruções de parsing ficariam da seguinte forma:

Exemplo 4. Analisando todos os produtos encontrados no documento HTML.

A estrutura da instrução de parsing é semelhante à do Exemplo 3. No entanto, há duas grandes exceções:

  1. xpath é usado em vez de xpath_one in products._fns pipeline. products._fns o pipeline agora irá produzir uma lista de todos os elementos que correspondem à expressão XPath fornecida (uma lista de elementos product).

  2. _items propriedade reservada é usada para indicar que você quer formar uma lista iterando por cada item da products._fns saída do pipeline e passando/processando cada item da lista separadamente pelo escopo do pipeline.

Se _items a propriedade reservada não tivesse sido usada nas instruções de parsing do Exemplo 4, o resultado analisado seria o seguinte:

circle-exclamation

Selecionar o N-ésimo elemento de uma lista

Esta seção demonstra a flexibilidade dos pipelines. O mesmo problema pode ser abordado de diferentes maneiras.

Várias opções podem ser usadas para selecionar o N-ésimo elemento de uma lista de quaisquer valores.

circle-info

Caso de uso: você quer selecionar o preço do segundo produto da página.

O HTML de exemplo é novamente usado como exemplo. Você tem múltiplas opções para selecionar o 2º produto.

Opção 1

Você pode utilizar o seletor XPath [] e definir a seleção na expressão XPath.

Exemplo 5. Selecionar o 2º preço usando o seletor XPath [].

Resultado:

Opção 2

Você também pode usar a função xpath para encontrar todos os preços e encaminhá-la para a função select_nth, que seleciona o n-ésimo elemento da lista extraída de preços.

Exemplo 6. Selecionar o 2º valor usando a função `select_nth`.

Resultado:

circle-exclamation

Opção 3

Você pode usar select_nth com qualquer tipo de lista, incluindo listas de elementos HTML:

Exemplo 7. Selecionando todos os elementos HTML de produto com class="product" ==> selecionando o 2º elemento de produto da lista ==> extraindo o texto do preço do elemento HTML do produto selecionado.

Resultado:

Tratamento de erros

Dado o seguinte trecho HTML:

E tentando analisá-lo com as seguintes instruções de parsing:

O Custom Parser retornará um resultado analisado onde preço e title foram analisados normalmente, mas o description falhou ao ser analisado devido à convert_to_float função falhar ao converter string to float:

Por padrão, todos os erros são contados como avisos e são colocados dentro da lista _warnings Se você quiser ignorar os erros ao analisar um campo, eles podem suprimir avisos/erros com "_on_error": "suppress" parâmetro:

O que então produzirá o seguinte resultado:

Array de arrays

O Custom Parser permite arrays N-dimensionais em resultados analisados. Como exemplo, vamos usar o seguinte trecho HTML:

Suponha que você queira analisar o documento de modo que o resultado seja um array 2D 3x3 de inteiros:

Para transformar o HTML no JSON acima, você pode usar as seguintes instruções de parsing:

Atualizado

Isto foi útil?